Clipper On Line • Ver Tópico - Índice Corrompendo

Índice Corrompendo

Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

 

Índice Corrompendo

Mensagempor jelias » 02 Jan 2014 08:46

Amiguinhos,

Aproximadamente dois meses atrás fiz uma mudança em minha rotina de cadastro de pedidos e desde então estou encontrando muitos problemas, alguns já consegui resolver com ajuda de um amigo, porém o mais temível continua acontecendo, corrupção de índice!
Quando desenvolvi este sistema usava Clipper 5.2e + SIX 3.0 e funcionava maravilhosamente bem, nunca tive problemas com índices. Hoje estou usando xHarbour 1.2.1 Simplex (Rev. 9421) + DBFCDX.
Quero relatar o que modifiquei:

- Antes eu estava usando DBSEEK() para localizar os dados do pedido e SET RELATION para "filtrar" os itens do pedido. Tudo acontecia normalmente, sem muito problemas, mais devido ao uso crescente de usuário cadastrando pedido e o volume aumentando, algumas vezes quando se estava cadastrando um pedido, aparecia um item de outro, mais era só sair e não aparecia mais.
- Pensando em melhorar a rotina, passei a usar ORDSCOPE(), confesso que no início não tomei alguns cuidados como limpar o filtro antes, mais após eliminar muitos problemas que tive, continuo tendo problemas com corrupção de índice. Os itens aparecem em outros pedidos. Fiz vários testes com DBSEEK() para me certificar se o índice realmente estava corrompido e após ter certeza criei novamente o índice e tudo volta ao normal, funciona que é uma beleza.
- Antes de criar o índice novamente eu apago o arquivo antigo. Faço uso de TAG´s.
- O sistema é grande e em nenhum outro módulo estou tendo problemas com corrupção, somente nos arquivos de itens desta rotina.

Se alguém puder me ajudar, irei deixar a rotina abaixo.

Sds,

Júlio.

#include "INKEY.CH"
#include "SETCURS.CH"
#include "CLUBE.CH"
#include "MOUSE.CH"
#include "FILEIO.CH"
#include "GETPASS.CH"
FUNCTION CAD_PEDID(n_cod)
LOCAL Atel:=SAVESCREEN(00,00,24,79)
LOCAL Wcadastro:=.F.
LOCAL cArea, oCol, nKey, nReg, nCol, nRow, cCodigo, eEnter
LOCAL cReg, dData, cCorOld, cBox1 := "ÛßÛÛÛÜÛÛ"
LOCAL cCorUso := SETCOLOR(), nPosicao
LOCAL aCab:={"Carga","Pedido","C¢digo","Descri‡Æo","","QTD","Pre‡o Tabela","(%) Desc.","Vlr. Desc.","Pre‡o Unit rio","Pre‡o Total","(%) Comissao","Vlr. Comissao"}, aCamp:={"ncarga","codped","sayite","saydes","condic","quanti","pretab","descon","vlrdes","preuni","pretot","comiss","vlrcom"}
STATIC nMRow, nMCol
PRIVAT aTab,pSenha
pSenha=SPAC(6)
lDelete := .F.
lAdiciona := .F.
lEdita := IF(lEdita == NIL,.F.,.T.)
SET SOFTSEEK OFF

aMensagem := { "<INS>-Inclus„o <ENTER>-Altera <DEL>-Exclus„o <F1>-Ajuda <F2>-Ordem"}

ABREARQ(,{"AL_PEDID","AL_CLIEN","AL_ESTOQ","AL_LINHA","AL_GRUPO","AL_ITPED","AL_ALECF","AL_NCARG","AL_VENDE","AL_EMPRE"})

sele AL_EMPRE; DBSETORDER(1); DBSEEK(aw_emp)
First:=.T.
do whil .t.
   wCadastro=.F.
   rest screen from aw_tel_master
   SETCURSOR(1)
   SETCOLOR("w+/b,w+/,,,n/bg")
   SETCOLOR("b+/b,w+/,,,n/bg")
   @ 00,00 clear to 24,79
   SETCURSOR(1)
   @ 00,00,07,79 BOX cBox1
   *@ 06,01 clea to 06,78
   SETCOLOR("w+/b,w+/,,,n/bg")
   v_codc=0; v_codp=0
   aCoordenadas := { 07,05,16,76 }
   if First
      v_carg=0
   else
      v_carg=IIF(TYPE("v_carg")="C",VAL(v_carg),v_carg)
   end
   @ 01,01 say "Carga    =" get v_carg pict"9999999999" VALID( IIF(LASTKEY()==13 .and. v_carg=0,VISUALIZA("AL_NCARG", aCoordenadas, {"v_carg","val(codigo)"} ),L_SEEK(v_carg,10000000000,nil,nil,"AL_NCARG",1,nil) ) ) ;
                     MSG("<ENTER>=consulta ou entre com o c¢digo da carga !")
   read
   if (LASTKEY()==27 .OR. LASTKEY()==17)
      ABREARQ(,.F.)
      RESTSCREEN(00,00,24,79,Atel)
      RETU(.T.)
   end
   v_carg=STRZERO(v_carg,10)
   First:=.F.
   ******
   @ 02,01 say "Pedido   =" get v_codp pict"999999"   VALID( IIF(LASTKEY()==13 .and. v_codp=0,VISUALIZA("AL_PEDID", {07,05,15,50}, {"v_codp","val(codped)"} ),.T.) ) ;
                        MSG("Entre com o c¢digo do pedido,<ENTER> p/ consulta ou <^R> p/ incluir !")
   read
   if (LASTKEY()==27 .OR. LASTKEY()==17)
      ABREARQ(,.F.)
      RESTSCREEN(00,00,24,79,Atel)
      RETU(.T.)
   end
   sele AL_PEDID
   if (LASTKEY()==27 .OR. LASTKEY()==17)
      ABREARQ(,.F.)
      RESTSCREEN(00,00,24,79,Atel)
      RETU(.T.)
   elseif (LASTKEY()==18)
      Wcadastro=.T.
   elseif (LASTKEY()!=18 .and. v_codp>0)
      v_codp=STRZERO(v_codp,6)
   elseif v_codp=0
      loop
   end
   sele AL_PEDID
   DBSETORDER(1)
   if (!Wcadastro .and. !DBSEEK(v_carg+v_codp))
      MENSAGEM("C¢digo do pedido nÆo encontrado, Verifique !!!",5)
      loop
   elseif (!Wcadastro .and. DBSEEK(v_carg+v_codp))
      cadastro=.f.
      xPED:=CRIAVAR()
   elseif Wcadastro
      if AL_NCARG->datlib#CTOD("  /  /  ")
    MENSAGEM("Carga ja acertada, impossivel cadastrar pedidos!",3)
    loop
      end
      IF PERG("Aten‡Æo, deseja incluir novo pedido para este cliente ? ")="N"
         loop
      end
      xPED:=NEWVAR()
      xPED[4]:=DATE()
      sele AL_NCARG
      RECLOCK(10)
      repl npedid with npedid+1
      DBCOMMIT()
      DBUNLOCK()
      v_codp=STRZERO(AL_NCARG->NPEDID,6)
      sele AL_PEDID
      ADDREC()
      repl ncarga with v_carg
      repl codped with v_codp
      DBCOMMIT()
      DBUNLOCK()
      xPED[1]:=v_carg
      xPED[2]:=v_codp
      cadastro=.t.
   end
   SETCOLOR("w+/b,w+/,,,n/bg")
   ******** -> Atualiza 'zeros' a esquerda
   @ 01,01 say "Carga    =" get v_carg pict"9999999999"
   @ 02,01 say "Pedido   =" get v_codp pict"999999"
   GetList:={}

   ****** -> Consulta de OS
   @ 03,01 say "Cliente  =" get xPED[3] pict"99999" WHEN( IIF(VALTYPE(xPED[3])=="C",IIF(AFILL(xPED,VAL(xPED[3]),3,1)#NIL,.T.,.T.),.T.) ) ;
              VALID(IIF(LASTKEY()==13 .and. xPED[3]=0,Visualiza("AL_CLIEN", aCoordenadas, {3,1},"xPED",{"{||CADAS_CLIEN(.T.)}","{||CADAS_CLIEN(codigo)}"} ),;
              IIF(L_SEEK(STRZERO(xPED[3],5),nil,nil,{ {03,18,"'= '+nomecl"} },"AL_CLIEN",1,'CPFCLI#" " .or. CPFCGC#" "')==.T.,IIF(AFILL(xPED,STRZERO(xPED[3],5),3,1)#NIL,.T.,.T.),.F.) ) )
   *              MSG("<ENTER>=consulta ou entre com o c¢digo do cliente !")
   @ 04,01 say "Vendedor =" get xPED[5] pict"999"  WHEN( IIF(VALTYPE(xPED[5])=="C",IIF(AFILL(xPED,VAL(xPED[5]),5,1)#NIL,.T.,.T.),.T.) ) ;
              VALID(IIF(LASTKEY()==13 .and. xPED[5]=0,Visualiza("AL_VENDE", aCoordenadas, {5,1},"xPED",{"{||CADAS_VENDE(.T.)}","{||CADAS_VENDE(codigo)}"} ),;
              IIF(L_SEEK(STRZERO(xPED[5],3),nil,nil,{ {04,16,"'= '+nomeve" } },"AL_VENDE",1,'STRZERO(xPED[5],3)=AL_CLIEN->codreg')==.T.,IIF(AFILL(xPED,STRZERO(xPED[5],3),5,1)#NIL,.T.,.T.),.F.) ) )
   @ 05,01 say "Cond.Pag.=" get xPED[9]  pict"99/99/99/999/999/999" WHEN( IIF(wCadastro,PEGA_CLI(),.T.) )
   @ 05,35 say "Tipo Pag.=" get xPED[18] pict"99" WHEN( MOSTRA_SO(1,{06,40,12,58},{"01-Duplicatas ","02-Cheques  ","03-Promissoria","04-Bonificacao","05-Trocas"},nil) );
                     VALID( MOSTRA_SO(2,{06,40,12,58},nil,{"01","02","03","04","05"},xPED[18]) )
   @ 05,55 say "Tipo NF  =" get xPED[10] pict"99" WHEN( MOSTRA_SO(1,{01,35,24,65},{"01-Vendas         ","02-                   ","03-Dev. Fornecedores/Ind.","04-Dev. Fornecedores/Com.","05-Remessa para Troca","06-Dev. Mat. Uso/Consumo","07-Remessa Comodato",;
                     "08-Simples Remessa","09-Perdas ","10-Bonificacao","11-Transferˆncia","12-Entrada","13-Devolucao Clientes     ","14-Sa¡da p/Industrializa‡Æo","15-Remessa Amostra Gratis","16-Complemento","17-Trocas","18-Remessa Exposicao","19-Retorno Exposicao","20-Dev. Fornecedor Com/ST","21-Perda","22-Saida Reclassificacao","23-Entrada Reclassificacao"},nil ) ) ;
                     VALID( MOSTRA_SO(2,{01,35,24,65},nil,{"01","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23"},xPED[10]) )
   @ 06,01 say "Numero NF= "+numenf
   @ 06,22 say "Emissao  = "+DTOC(datemi)
   if AL_PEDID->situac=" "
      read
      if (LASTKEY()==27 .OR. LASTKEY()==17)
    ABREARQ(,.F.)
    RESTSCREEN(00,00,24,79,Atel)
    RETU(.T.)
      end
   else
      GetList:={}
      sele AL_CLIEN; DBSETORDER(1); DBSEEK(AL_PEDID->codcli)
      sele AL_VENDE; DBSETORDER(1); DBSEEK(AL_PEDID->codven)
      @ 03,18 say "= "+AL_CLIEN->nomecl
      @ 04,16 say "= "+AL_VENDE->nomeve
   end
   if xPED[10]="10"
      if xPED[18]#"04"
    MENSAGEM("Tipo de Pagamento esta incorreto para esta BONIFICACAO!",3)
    loop
      end
   end
   if xPED[18]="04"
      if xPED[10]#"10"
    MENSAGEM("Este tipo de pagamento so pode ser usado com tipo NF 10 - Bonificacao!",3)
    loop
      end
   end

   SETCOLOR("w+/b,w+/,,,n/bg")
   if xPED[10]="10" .and. xPED[18]="04" .and. xPED[27]=" " .and. AL_PEDID->situac=" "
      @ 01,35 say "Senha :" get xPED[27] pict"@P" password
      read
      if xPED[27]="032867"
    @ 01,50 say "Liberado por Julio"
    vLiberado="Julio"
      elseif xPED[27]="037076"
   @ 01,50 say "Liberado por Geovane"
      else
    MENSAGEM("Senha invalida!!!!",3)
    loop
      end
   elseif xPED[10]="10" .and. xPED[18]="04" .and. xPED[27]#" "
      if xPED[27]="032867"
    @ 01,50 say "Liberado por Julio"
    vLiberado="Julio"
      elseif xPED[27]="037076"
    @ 01,50 say "Liberado por Geovane"
      else
    MENSAGEM("Senha invalida!!!!",3)
    loop
      end
   end
   xPED[3]:=IF(VALTYPE(xPED[3])="N",STRZERO(xPED[3],5),xPED[3])
   sele AL_CLIEN; DBSETORDER(1); DBSEEK(xPED[3])
   if AL_CLIEN->credit="S"
      MENSAGEM("Cliente com pendencia financeira, entre em contato com o contas a receber!",5)
      loop
   end
   ****************************************************************************
   * Consolida os dados do cliente
   ****************************************************************************
   sele AL_CLIEN
   gCnpj=cpfcgc
   gInse=insest
   gEsta=estado
   gCpfc=cpfcli
   gTipo=tipocl
   gCodc=codcid
   *if (gTipo#"J" .and. gTipo#"F")
   *   MENSAGEM("Tipo do cliente Invalido, informe pessoa juridica ou fisica!",5)
   *   loop
   *elseif gTipo="J"
   *   if !CGC(gCnpj)
   *     MENSAGEM("CNPJ do cliente Invalido, favor verificar!",5)
   *     loop
   *   end
   *   if gEsta#"SP"
   *     if !TESTAIE(gInse,gEsta)
   *        MENSAGEM("Inscricao Estadual do cliente Invalida, favor verificar!",5)
   *        loop
   *     end
   *   end
   *elseif gTipo="F"
   *   if !VERCPF(gCpfc)
   *     MENSAGEM("CPF do cliente Invalido, favor verificar!",5)
   *     loop
   *   end
   *end
   ****************************************************************************
   if xPED[10]="13"
      SETCOLOR("w+/b,w+/,,,n/bg")
      @ 06,55 say "NF Cancelada= " get xPED[23] pict"999999" VALID(xPED[23]#" ")
      if AL_PEDID->situac=" "
    read
    if (LASTKEY()==27 .OR. LASTKEY()==17)
       ABREARQ(,.F.)
       RESTSCREEN(00,00,24,79,Atel)
       RETU(.T.)
    end
      else
    GetList:={}
      end
   end
   SETCOLOR("w+/b,w+/,,,n/bg")
   @ 04,50 say "Preco de Tabela = "+AL_VENDE->tabela
   xPED[3]:=IF(VALTYPE(xPED[3])="N",STRZERO(xPED[3],5),xPED[3])
   xPED[5]:=IF(VALTYPE(xPED[5])="N",STRZERO(xPED[5],3),xPED[5])
   sele AL_PEDID
   RECLOCK()
   REPLVAR(xPED)
   REPL cidade with AL_CLIEN->cidade
   DBCOMMIT()
   DBUNLOCK()
                                 //// Rela‡äes ////
   sele AL_ITPED
   DBSETORDER(1)
   // Limpa filtro
   ORDSCOPE(0,nil); ORDSCOPE(1,nil)
   // Realiza o filtro
   ORDSCOPE(0,v_carg+v_codp)
   ORDSCOPE(1,v_carg+v_codp)
   DBGOTOP()

                                  ///// FIM //////

   SETCURSOR(0)
   SETCOLOR("b+/b,w+/,,,n/bg")
   aMensagem := { "<INS>-Inclui <ENTER>-Altera <DEL>-Exclui <F2>-Desc. <F5>-Ex.Pedido <F10>-Recal"," 000000"}
   aCoordenadas:={08,01,20,78}
   @ aCoordenadas[1]-1, aCoordenadas[2]-1, aCoordenadas[3]+2+LEN(aMensagem), aCoordenadas[4]+1 BOX cBox1
   @ 22,01 say REPL("Ü",78)
   SETCOLOR("w+/b,w+/,,,n/bg")
   IF VALTYPE(aMensagem) == "A"
      *FOR I := 1 TO LEN(aMensagem)
     I:=1
     @ aCoordenadas[3]+2+I, aCoordenadas[2] SAY PADC(aMensagem[I],aCoordenadas[4]-aCoordenadas[2]+1) COLOR "W/B"
      *NEXT
   ENDIF

   *oTab := MyBrowser( bWhile,bFor,bFirst,bLast, aCoordenadas[1], aCoordenadas[2], aCoordenadas[3]-2, aCoordenadas[4] )
   oTab := TBrowseDB( aCoordenadas[1], aCoordenadas[2], aCoordenadas[3]-2, aCoordenadas[4] )
   oTab:colsep := " Û "
   oTab:headsep:= "ßÛß"
   FOR I = 1 TO LEN( aCamp )
     IF VALTYPE(aCamp[I]) == "B"
        oCol:=TBcolumnNew( aCab[I], ( aCamp[I] ) )
     ELSE
        oCol:=TBcolumnNew( aCab[I], FIELDWBLOCK( aCamp[I], SELECT()))
     ENDIF
     oTab:addColumn( oCol )
   NEXT

   @ oTab:nTop   +2, oTab:nRight+1 SAY chr(30) COLOR Cor(21)
   @ oTab:nBottom  , oTab:nRight+1 SAY chr(31) COLOR Cor(21)
   @ oTab:nBottom+1, oTab:nRight+1 SAY ""     COLOR Cor(22)
   @ oTab:nBottom+1, oTab:nLeft -1 SAY ""     COLOR Cor(22)

   SCROLL_UP    := { oTab:nTop   +2, oTab:nRight+1, oTab:nTop   +2, oTab:nRight+1 } ; SCROLL_DOWN  := { oTab:nBottom  , oTab:nRight+1, oTab:nBottom  , oTab:nRight+1 }
   SCROLL_LEFT  := { oTab:nBottom+1, oTab:nRight+1, oTab:nBottom+1, oTab:nRight+1 } ; SCROLL_RIGHT := { oTab:nBottom+1, oTab:nLeft -1, oTab:nBottom+1, oTab:nLeft -1 }
   nCol_Reg := (oTab:nRight-oTab:nLeft+2) / LEN(aCamp)

   DO WHILE .T.
      aCoordenadas:={08,01,20,78}
      aTeclas   := { ;
         { K_INS    , "P_INSERE(v_carg,v_codp)"   } ,;
                   { K_DEL    , "DELREGISTRO()"             } ,;
         { K_ENTER  , "ALTERAREG(v_carg,v_codp)"  } ,;
                   { K_F1     , "HELP()"                    } ,;
                   { K_F2     , "NOTAF()"                   } ,;
         { K_F3     , "CALEN()"                   } ,;
                   { K_F4     , "CALCU()"                   } ,;
         { K_F5     , "EXCLUIPED()"               } ,;
         { K_F6     , "COMPLEMENTO()"             } ,;
                   { K_F7     , "PAGTOS()"                  } ,;
         { K_F8     , "DESPESA()"                 } ,;
                   { K_F9     , "DESCONTO()"                } ,;
         { K_F10    , "CALC(v_carg,v_codp)"       } ,;
         { K_F11    , "ASTERIS()"                 } }

      SETCOLOR("w+/b,w+/,,,n/bg")
      @ 20,01 say "IT->"+TRANS(AL_PEDID->QTDITE,"9999")+" CORT->"+TRANS(AL_PEDID->QTDCAN,"9999")+"-R$ "+TRANS(AL_PEDID->VLRCAN,"9,999,999.99")+;
      "  DESC. -> "+TRANS((AL_PEDID->DESCON+AL_PEDID->DESCPR),"@E 99,999.99")+" TOTAL-> "+TRANS( (AL_PEDID->VLRTOT-AL_PEDID->DESCON),"99,999,999.99")
      @ 21,49 say "VLR COMISSAO -> "+TRANS(AL_PEDID->VLRCOM,"@E 99,999,999.99")
      @ oTab:nBottom+1,oTab:nLeft SAY REPLICATE("°",oTab:nRight-oTab:nLeft+1) COLOR Cor(28)
      nCol_ := oTab:nLeft+IF(ROUND((nCol_Reg*(oTab:colpos-1)),0)<=0,0,IF(oTab:colpos>=LEN(aCamp),LEN(aCamp)*nCol_Reg,ROUND(nCol_Reg*(oTab:colpos-1),0)))
      @ oTab:nBottom+1,IF(nCol_+nCol_Reg>oTab:nRight,nCol_:=oTab:nRight-ROUND(nCol_Reg,0)+1,nCol_) SAY REPLICATE("Û",ROUND(nCol_Reg,0)) COLOR Cor(29)
      oTab:refreshAll()
      oTab:COLORRECT({oTab:rowpos,1,oTab:rowpos,oTab:COLCOUNT},{1,2})
      DO WHILE ! oTab:stabilize()
         nKey := inkey()
         IF nKey <> 0 .AND. nKey <> K_ENTER
            EXIT
         ENDIF
      ENDDO
      IF oTab:stable
         nRow := ROW()
         nCol := COL()
         oTab:COLORRECT({oTab:ROWPOS,1,oTab:ROWPOS,oTab:COLCOUNT}, {5,2})
    oTab:hilite()
         DO WHILE ! oTab:stabilize() ; ENDDO
         IF oTAB:hitbottom  ; BEEP() ; Mensagem("Atingiu o final do arquivo",2) ; SETCURSOR(0) ; ELSEIF oTAB:hittop ; BEEP() ; Mensagem("Atingiu o in¡cio do arquivo",2) ; SETCURSOR(0) ; ENDIF
         SETPOS( nRow, nCol )
         nKey := 0
         DO WHIL nKey == 0 ; nKey := Minkey(5, @nMRow, @nMCol, .T.) ; ENDDO
         DO WHILE (!oTab:Stabilize())  ; ENDDO
      ENDIF
      IF     nKey == K_UP         ; oTab:UP()
      ELSEIF nKey == K_DOWN       ; oTab:DOWN()
      ELSEIF nKey == K_LEFT       ; oTab:LEFT()
      ELSEIF nKey == K_CTRL_LEFT  ; oTab:PANLEFT()
      ELSEIF nKey == K_RIGHT      ; oTab:RIGHT()
      ELSEIF nKey == K_CTRL_RIGHT ; oTab:PANRIGHT()
      ELSEIF nKey == K_PGUP       ; oTab:PAGEUP()
      ELSEIF nKey == K_CTRL_PGUP  ; oTab:GOTOP()
      ELSEIF nKey == K_PGDN       ; oTab:PAGEDOWN()
      ELSEIF nKey == K_CTRL_PGDN  ; oTab:GOBOTTOM()
      ELSEIF nKey == K_HOME       ; oTab:HOME()
      ELSEIF nKey == K_CTRL_HOME  ; oTab:PANHOME()
      ELSEIF nKey == K_END        ; oTab:END()
      ELSEIF nKey == K_CTRL_END   ; oTab:PANEND()
      ELSEIF nKey == K_ESC        ; EXIT
      ELSEIF nKey == M_LEFT
          IF     InRegion(SCROLL_UP)    ; oTab:Up()
          ELSEIF InRegion(SCROLL_DOWN)  ; oTab:Down()
          ELSEIF InRegion(SCROLL_LEFT)  ; oTab:Right()
          ELSEIF InRegion(SCROLL_RIGHT) ; oTab:Left()
          ELSEIF InRegion(oTab:nTop, oTab:nLeft, oTab:nBottom, oTab:nRight)
               nLeftCol := oTab:leftVisible ; nLeftCol := IF(nLeftCol == 0, 1, nLeftCol) ; nOffset  := oTab:nLeft + oTab:colWidth(nLeftCol) + len(oTab:colSep) ; nPlace   := 0
               WHILE nMCol > nOffset ; nPlace++ ; nOffset += oTab:colWidth(nLeftCol + nPlace) + len(oTab:colSep) ; ENDDO
               nRow := 1 + nMRow - oTab:nTop - 2 ; oTab:dehilite() ; oTab:colPos := nLeftCol + nPlace ; oTab:rowPos := nRow
          ENDIF
      ELSE
         IF VALTYPE(aTeclas) == "A"
            nPosicao := ASCAN(aTeclas, { | a | nKey  == a[1] } )
       nRefaz=.F.
            IF nPosicao # 0
               gTela=SAVESCREEN(00,00,24,79)
               if (nPosicao==1 .and. (AL_PEDID->situac=" " .or. AL_PEDID->situac="P"))
        P_INSERE(v_carg,v_codp)
        nRefaz=.T.
          elseif (nPosicao==2 .and. (AL_PEDID->situac=" " .or. AL_PEDID->situac="P"))
        if _SENHA()
           DELREGISTRO()
           nRefaz=.T.
        end
               elseif (nPosicao==3 .and. (AL_PEDID->situac=" " .or. AL_PEDID->situac="P"))
        ALTERAREG(v_carg,v_codp)
        nRefaz=.T.
               elseif nPosicao==4
                  HELP()
          elseif nPosicao==5 .and. AL_PEDID->vlrtot>0.00
        DESCONTO()
          elseif (nPosicao==9 .and. AL_PEDID->situac=" ")
        COMPLEMENTO()
          elseif (nPosicao==10 .and. AL_PEDID->situac=" ")
        DESPESA()
          elseif nPosicao==13
        CALC(v_carg,v_codp)
        nRefaz=.T.
          elseif nPosicao==6
                  CALEN()
               elseif nPosicao==7
                  CALCU()
          elseif nPosicao==8
        if _SENHA()
           if EXCLUIPED()
         KEYBOARD( CHR(27) )
             nRefaz=.T.
           end
        end
               end
               RESTSCREEN(00,00,24,79,gTela)
          sele AL_ITPED
          DBSETORDER(1)
          // Limpa filtro
          ORDSCOPE(0,nil); ORDSCOPE(1,nil)

          // Refaz o filtro novamente
          ORDSCOPE(0,v_carg+v_codp)
          ORDSCOPE(1,v_carg+v_codp)
          DBGOTOP()
          Establ()
          oTab:GoTop()
          oTab:PanHome()
            ENDIF
            SET CURSOR OFF
         ENDIF
      ENDIF
   ENDDO
   RESTSCREEN(00,00,24,79,cArea)
   SETCOLOR(cCorUso)
   SETCURSOR(1)
ENDDO
RETURN NIL
***************************************************************************
STATIC FUNCTION _SENHA()
LOCAL xTela:=SAVESCREEN(00,00,24,79)
_Senha=SPAC(6)
WIN3D(" Senha ",13,30,15,50,2,"9")
@ 14,31 say "Senha : " get _senha pict"@P" password
read
if _senha="070843" .or. _senha="004461" .or. _senha="016269"  //Thais - Fatima - Camilinha
   pSenha=_senha
   RESTSCREEN(00,00,24,79,xTela)
   RETU .T.
end
pSenha=_senha
RESTSCREEN(00,00,24,79,xTela)
RETU .F.
***************************************************************************
STATIC FUNCTION Establ()
SET CURSOR OFF
oTab:refreshAll()
//DO WHILE ( !oTab:stabilize() ); ENDDO
RETURN NIL
***************************************************************************
STATIC FUNCTION P_INSERE(v_carg,v_codp)
LOCAL bINS:=SAVESCREEN(00,00,24,79)
LOCAL xPicture:=ALLTRIM(AL_EMPRE->tamanh)
xvelho=.f.
DO WHILE .T.
   vCod=0
   vQtd=0
   vCon=" "
   vTab=0.00
   vBai=" "
   vOut=" "
   vDes=0.00
   vCom=0.00
   WIN3D(" InclusÆo ",10,03,16,78,2,"5")
   @ 14,04 say REPL("Ä",74)
   aCoordenadas := { 07,05,16,76 }
   @ 11,04 say "C¢digo    =" get vCod pict xPicture VALID( IIF(LASTKEY()==13 .and. vCod=0,VISUALIZA("AL_ESTOQ", aCoordenadas, {"vCod","VAL(codigo)"} ), .T. ))
   **************************************************L_SEEK(vCod,NIL,nil,nil,"AL_ESTOQ",1,nil) ) )

   read
   if (LASTKEY()==27)
      RESTSCREEN(00,00,24,79,bINS)
      sele AL_ITPED
      RETURN NIL
   end
   vCod=STRZERO(vCod,5)
   xVelho=.F.
   sele AL_ESTOQ
   DBSETORDER(1)
   if !DBSEEK(vCod)
      MENSAGEM("Aten‡Æo, C¢digo procurado nÆo foi encontrado!!!",3)
      loop
   end
   if situac="02"
      MENSAGEM("Atencao, PRODUTO EM FALTA, VERIFIQUE COM O SETOR DE COMPRAS !",3)
   elseif situac="03"
      MENSAGEM("PRODUTO FORA DE LINHA !!!!!",3)
      loop
   end
   sele AL_ITPED
   DBSETORDER(1)
   // Limpa filtro
   ORDSCOPE(0,nil); ORDSCOPE(1,nil)

   // Refaz o filtro novamente
   ORDSCOPE(0,v_carg+v_codp)
   ORDSCOPE(1,v_carg+v_codp)
   DBGOTOP()
   _Found=.F.
   do whil (!EOF() .and. ncarga=v_carg .and. codped=v_codp)
      if (codite=vCod)
    _Found=.T.
    exit
      end
      skip
   end
   if _Found
      MENSAGEM("Aten‡Æo, Iten j  Cadastrado para este pedido !",3)
      loop
   end
   if AL_VENDE->tabela="01"
      vTabela=AL_ESTOQ->pretab
      vTab=AL_ESTOQ->pretab
   else
      Vg=RIGHT(AL_VENDE->tabela,1)
      vTabela=AL_ESTOQ->preta&Vg
      vTab=AL_ESTOQ->preta&Vg
   end
   vPrecoDesconto=VAL(STR((vTab-(vTab*10)/100),13,2))
   vCom=AL_ESTOQ->comiss
   @ 12,04 say "Descri‡Æo  = "+AL_ESTOQ->DESCRI
   @ 13,04 say "P. Tabela  = "+TRANS(vTabela,"@E 9,999,999.99")
   @ 13,50 say "Menor Preco= "+TRANS(vPrecoDesconto,"@E 9,999,999.99")
   @ 15,04 say "Quantidade =" get vQtd pict"99999.99" VALID( vQtd > 0.000 )
   @ 15,28 say "Comissao   =" get vCom pict"99.99" VALID(IIF(vCom<=AL_ESTOQ->comiss,IIF(vCom#AL_ESTOQ->comiss,IIF(PERG("Confirma mudanca na comissao ?")="S",.T.,.F.),.T.),.F.) )
   @ 15,50 say "P. Vendido =" get vTab pict"@E 9,999,999.99"  VALID( IIF(vTab=0,.F.,IIF(vTab<vPrecoDesconto,FALSAMEN("Preco digitado menor que valor de tabela com desconto!",3),.T.)) )
   *@ 16,27 say "Cortar  ?  =" get vCon pict"!"  MSG("Tecle <ENTER> para continuar ou <*> p/ para cortar esta mercadoria !") VALID( vCon=" " .or. vCon="*")
   read
   if (LASTKEY()=27)
      RESTSCREEN(00,00,24,79,bINS)
      RETURN NIL
   end
   if PERG("Confirma inclusÆo deste iten ? ")="S"
      if (AL_PEDID->tiposa#"01" .and. vCom>0)
    MENSAGEM("Atencao, pedido nao e uma venda por isso a comissao deve estar zerada!",3)
    RESTSCREEN(00,00,24,79,bINS)
         RETURN NIL
      end
      if vCom>AL_ESTOQ->comiss
    MENSAGEM("Item nao pode ser cadastrado, erro na comissao "+str(vCom,5,2),5)
    RESTSCREEN(00,00,24,79,bINS)
    RETURN NIL
      end
      if AL_CLIEN->descon>0
    vLiq=(vTab-((vTab*AL_CLIEN->descon)/100))
      else
    vLiq=vTab
      end
      sele AL_ITPED
      ADDREC()
      repl ncarga with v_carg
      repl codped with v_codp
      repl codcli with AL_CLIEN->codigo
      repl codite with vCod
      repl sayite with LEFT(vCod,16)
      repl descri with AL_ESTOQ->descri
      repl saydes with LEFT(AL_ESTOQ->descri,25)
      repl condic with vCon
      repl quanti with vQtd
      repl preuni with vTab
      repl descon with vDes
      repl vlrdes with IIF(vTabela>vTab,((vTabela-vTab)*vQtd),0)
      repl pretot with (vQtd * vTab)
      repl pretab with vTabela
      repl preliq with vLiq
      repl comiss with vCom
      repl vlrcom with ( (vLiq*vQtd) * vCom)/100
      repl fabric with AL_ESTOQ->fabric
      repl desbol with AL_CLIEN->descon
      DBCOMMIT()
      DBUNLOCK()
      sele AL_PEDID
      RECLOCK(10)
      if vCon=" "
    repl qtdite with (qtdite+1)
    repl vlrtot with (vlrtot+(vQtd * vTab) )
    repl descpr with (descpr+IIF(vTabela>vTab,((vTabela-vTab)*vQtd),0))
    repl vlrcom with (vlrcom+(( (vLiq*vQtd) * vCom)/100))
      else
    repl qtdcan with (qtdcan+1)
    repl vlrcan with (vlrcan+(vQtd * vTab) )
      end
      DBCOMMIT()
      DBUNLOCK()
   end
ENDDO
RETURN NIL
***************************************************************************
STATIC FUNCTION CALC_VLR(vDes,vTab,vTabela)
if vDes>0
   vTab=(vTabela-((vTabela*vDes)/100))
else
   vTab=vTabela
end
retu .T.
***************************************************************************
STATIC FUNCTION DELREGISTRO()
if psenha=" "
   MENSAGEM("Algo errado com a senha, verifique!",5)
   retu
end
if (ncarga=v_carg .or. codped=v_codp)
   // Estou conferindo antes de excluir devido problemas de filtro
end

IF PERGUNTA("Tem certeza que deseja apagar o registro ?") == "S"
   sele AL_ITPED
   IF RECLOCK()
      //
      sele AL_ITPED
      repl delete with pSenha
      DBCOMMIT()
      //
      DBDELETE()
      DBCOMMIT()
      DBUNLOCK()
      CALC(v_carg,v_codp)
   ELSE
      BEEP() ; MENSAGEM("Registro sendo utilizado por outra esta‡„o")
   ENDIF
ENDIF
RETURN NIL
***************************************************************************
STATIC FUNCTION FALSEMEN(cTexto,cTempo)
MENSAGEM(cTexto,cTempo)
if PERGUNTA("VOCÒ IRµ EMITIR UM NOTA FISCAL DE ENTRADA ?")="S"
   SETCURSOR(1)
   RETURN(.T.)
else
   SETCURSOR(1)
   RETURN(.F.)
end
**************************************************************************
STATIC FUNCTION ALTERAREG(v_codp,v_codc)
LOCAL bALT:=SAVESCREEN(00,00,24,79)
LOCAL xPicture:=AL_EMPRE->tamanh
if LEN(ALLTRIM(AL_ITPED->codite))=0
   RETURN NIL
end
DO WHILE .T.
   sele AL_ESTOQ
   DBSETORDER(1)
   DBSEEK(AL_ITPED->codite)
   sele AL_ITPED
   vCod=codite
   vQtd=quanti     ; xQtd=quanti
   vCon=condic     ; xCon=condic
   vTab=preuni     ; xTab=preuni
   vTabela=pretab ; xTabela=pretab
   vDes=descon     ; xDes=descon
   vCom=comiss     ; xCom=comiss
   vVco=vlrcom     ; xVco=vlrcom
   vPrecoDesconto=(pretab-(pretab*10)/100)
   WIN3D(" Altera‡Æo ",10,03,16,77,2,"6")
   @ 14,04 say REPL("Ä",74)
   @ 12,04 say "Descri‡Æo = "+AL_ESTOQ->DESCRI
   @ 13,04 say "P. Tabela  = "+TRANS(vTabela,"@E 9,999,999.99")
   @ 13,50 say "Menor Preco= "+TRANS(vPrecoDesconto,"@E 9,999,999.99")
   @ 15,04 say "Quantidade =" get vQtd pict"99999.99" VALID( vQtd > 0.000 )
   @ 15,28 say "Comissao   =" get vCom pict"99.99" VALID(IIF(vCom<=AL_ESTOQ->comiss,IIF(vCom#AL_ESTOQ->comiss,IIF(PERG("Confirma mudanca na comissao ?")="S",.T.,.F.),.T.),.F.) )
   @ 15,50 say "P. Vendido =" get vTab pict"@E 9,999,999.99"  VALID( IIF(vTab=0,.F.,IIF(vTab<vPrecoDesconto,FALSAMEN("Preco digitado menor que valor de tabela com desconto!",3),.T.)) )
   *@ 16,27 say "Cortar  ?  =" get vCon pict"!"  MSG("Tecle <ENTER> para continuar ou <*> p/ para cortar esta mercadoria !") VALID( vCon=" " .or. vCon="*")
   read
   if (LASTKEY()=27)
      RESTSCREEN(00,00,24,79,bALT)
      RETURN NIL
   end
   if UPDATED()
      if PERG("Confirma altera‡Æo deste iten ? ")="S"
    if (AL_PEDID->tiposa#"01" .and. vCom>0)
       MENSAGEM("Atencao, pedido nao e uma venda por isso a comissao deve estar zerada!",3)
       RESTSCREEN(00,00,24,79,bALT)
       RETURN NIL
    end
    if vCom>AL_ESTOQ->comiss
       MENSAGEM("Item nao pode ser cadastrado, erro na comissao "+str(vCom,5,2),5)
       RESTSCREEN(00,00,24,79,bALT)
       RETURN NIL
    end
    if AL_CLIEN->descon>0
       vLiq=(vTab-((vTab*AL_CLIEN->descon)/100))
    else
       vLiq=vTab
    end
         sele AL_PEDID
         RECLOCK(10)
    if xCon=" "
       repl qtdite with (qtdite-1)
       repl vlrtot with (vlrtot-(xQtd * xTab) )
       repl descpr with (descpr-IIF(xTabela>xTab,((xTabela-xTab)*xQtd),0))
       repl vlrcom with (vlrcom-xVco)
    else
       repl qtdcan with (qtdcan-1)
       repl vlrcan with (vlrcan-(xQtd * xTab) )
    end
         DBCOMMIT()
    DBUNLOCK()

         // Inclui os novos valores, normalmente !

         sele AL_ITPED
         RECLOCK(10)
    repl condic with vCon
    repl quanti with vQtd
    repl preuni with vTab
    repl descon with vDes
    repl vlrdes with ((vTabela-vTab)*vQtd)
    repl pretot with (vQtd * vTab)
    repl comiss with vCom
    repl preliq with vLiq
    repl vlrcom with ( (vLiq*vQtd) * vCom)/100
    repl fabric with AL_ESTOQ->fabric
    DBCOMMIT()
    DBUNLOCK()
    sele AL_PEDID
    RECLOCK(10)
    if vCon=" "
       repl qtdite with (qtdite+1)
       repl vlrtot with (vlrtot+(vQtd * vTab) )
       repl descpr with (descpr+IIF(vTabela>vTab,((vTabela-vTab)*vQtd),0))
       repl vlrcom with (vlrcom+(( (vLiq*vQtd) * vCom)/100))
    else
       repl qtdcan with (qtdcan+1)
       repl vlrcan with (vlrcan+(vQtd * vTab) )
    end
    DBCOMMIT()
    DBUNLOCK()
      end
   end
   exit
ENDDO
RESTSCREEN(00,00,24,79,bALT)
RETURN NIL
****************************************************************************
STATIC FUNCTION DESCONTO()
LOCAL bDes:=SAVESCREEN(00,00,24,79)
dVal=AL_PEDID->DESCON
WIN3D(" Desconto ",10,03,12,47,2,"6")
@ 11,04 say "Valor Desconto = " get dVal pict"@E 99,999,999.99"
read
if (LASTKEY()=27)
   RESTSCREEN(00,00,24,79,bDes)
   RETURN NIL
end
if UPDATED()
   sele AL_PEDID
   RECLOCK(10)
   repl descon with dVal
   DBCOMMIT()
   DBUNLOCK()
end
RESTSCREEN(00,00,24,79,bDes)
RETURN NIL
****************************************************************************
STATIC FUNCTION COMPLEMENTO()
LOCAL bDes:=SAVESCREEN(00,00,24,79)
if AL_PEDID->tiposa#"16"
   RETURN NIL
end
dVal1=AL_PEDID->bascom
dVal2=AL_PEDID->icmcom
dVal3=AL_PEDID->bassub
dVal4=AL_PEDID->icmsub
WIN3D(" Complemento ",10,03,15,47,2,"7")
@ 11,04 say "Base de Calculo = " get dVal1 pict"@E 99,999,999.99"
@ 12,04 say "Vlr. ICMS       = " get dVal2 pict"@E 99,999,999.99"
@ 13,04 say "Base C. ST      = " get dVal3 pict"@E 99,999,999.99"
@ 14,04 say "Vlr. ICMS ST    = " get dVal4 pict"@E 99,999,999.99"
read
if (LASTKEY()=27)
   RESTSCREEN(00,00,24,79,bDes)
   RETURN NIL
end
if UPDATED()
   sele AL_PEDID
   RECLOCK(10)
   repl bascom with dVal1
   repl icmcom with dVal2
   repl bassub with dVal3
   repl icmsub with dVal4
   DBCOMMIT()
   DBUNLOCK()
end
RESTSCREEN(00,00,24,79,bDes)
RETURN NIL
****************************************************************************
STATIC FUNCTION DESPESA()
LOCAL bDes:=SAVESCREEN(00,00,24,79)
dVal1=AL_PEDID->despes
WIN3D("Despesas Acessorias",10,03,12,47,2,"7")
@ 11,04 say "Despesas Acesso.= " get dVal1 pict"@E 99,999,999.99"
read
if (LASTKEY()=27)
   RESTSCREEN(00,00,24,79,bDes)
   RETURN NIL
end
if UPDATED()
   sele AL_PEDID
   RECLOCK(10)
   repl despes with dVal1
   DBCOMMIT()
   DBUNLOCK()
end
RESTSCREEN(00,00,24,79,bDes)
RETURN NIL
****************************************************************************
STATIC FUNCTION CALC(v_carg,v_codp)
ci_itens=0
ci_valor=0.00
ci_valod=0.00
ci_iteco=0
ci_vlrco=0.00
ci_vlcom=0.00
sele AL_ITPED
DBSETORDER(1)
// Limpa filtro
ORDSCOPE(0,nil); ORDSCOPE(1,nil)

// Refaz o filtro novamente
ORDSCOPE(0,v_carg+v_codp)
ORDSCOPE(1,v_carg+v_codp)
DBGOTOP()
do whil (!EOF() .and. ncarga=v_carg .and. codped=v_codp)
   if condic=" "
      ci_itens++
      ci_valor=(ci_valor+pretot)
      ci_valod=(ci_valod+vlrdes)
      ci_vlcom=(ci_vlcom+vlrcom)
   else
      ci_iteco++
      ci_vlrco=(ci_vlrco+pretot)
   end
   skip
end
sele AL_PEDID
DBSETORDER(1)
if DBSEEK(v_carg+v_codp)
   RECLOCK(10)
   repl qtdite with ci_itens
   repl vlrtot with ci_valor
   repl descpr with ci_valod
   repl qtdcan with ci_iteco
   repl vlrcan with ci_vlrco
   repl vlrcom with ci_vlcom
   DBCOMMIT()
   DBUNLOCK()
end
RETURN NIL
*************************************************************************
STATIC FUNCTION PEGA_CLI
xPED[9]:=AL_CLIEN->condpa
xPED[18]:=AL_CLIEN->tipopg
RETURN .T.
************************************************************************
STATIC FUNCTION EXCLUIPED()
LOCAL resp:=.f.
if psenha=" "
   MENSAGEM("Algo errado com a senha, verifique!",5)
   retu
end
IF PERGUNTA("Tem certeza que deseja apagar o pedido ?") == "S"
   sele AL_ITPED
   DBSETORDER(1)
   // Limpa filtro
   ORDSCOPE(0,nil); ORDSCOPE(1,nil)

   // Refaz o filtro novamente
   ORDSCOPE(0,v_carg+v_codp)
   ORDSCOPE(1,v_carg+v_codp)
   DBGOTOP()
   do whil (!EOF() .and. ncarga=v_carg .and. codped=v_codp)
      RECLOCK()
      repl delete with pSenha
      DBCOMMIT()
      DBUNLOCK()
      //
      RECLOCK()
      DBDELETE()
      DBCOMMIT()
      DBUNLOCK()
      //
      sele AL_ITPED
      DBSETORDER(1)
      // Limpa filtro
      ORDSCOPE(0,nil); ORDSCOPE(1,nil)

      // Refaz o filtro novamente
      ORDSCOPE(0,v_carg+v_codp)
      ORDSCOPE(1,v_carg+v_codp)
      DBGOTOP()
   end
   // Confere de todos os itens foram excluidos!
   sele AL_ITPED
   DBSETORDER(1)
   sele AL_ITPED
   DBSETORDER(1)
   // Limpa filtro
   ORDSCOPE(0,nil); ORDSCOPE(1,nil)

   // Refaz o filtro novamente
   ORDSCOPE(0,v_carg+v_codp)
   ORDSCOPE(1,v_carg+v_codp)
   DBGOTOP()
   IF !EOF()
      MENSAGEM("Atencao, nao foram excluidos todos os itens do pedido!",5)
      CALC(v_carg,v_codp)
   else
      // Se confirmado que todos os itens foram excluidos, apagar o pedido.
      sele AL_PEDID
      RECLOCK()
      DBDELETE()
      DBCOMMIT()
      DBUNLOCK()
   end
   resp=.T.
ENDIF
RETURN(resp)

STATIC FUNCTION FALSAMEN(cTexto,cTempo)
if PERGUNTA(cTexto)="S"
   RETURN(.T.)
end
RETURN(.F.)
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
jelias
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 249
Data de registro: 27 Ago 2008 11:32
Cidade/Estado: Minas Gerais
Curtiu: 0 vez
Mens.Curtidas: 16 vezes



Retornar para Banco de Dados

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro