    cranatu_db(00,00,24,79)      && chama dbedit()

close database

return



function cranatu_db   && funcao p/ manipular registros do arquivo
**************************************************************************

parameters    li, ci, lf, cf, gtela

set color to &pdbed_1

@ li,ci,lf,cf box frame5

do while  .t.

   if eof() .or. bof() .or. !found()
      keyboard chr(22)  && forca tecla INS
   endif

   set color to &pdbed_2

   @ li+1,02                                    say [DB / DC Soft House]
   @ li+1,23+int((50-len(trim(pnomecli)))/2)    say trim(pnomecli)
   @ li+1,71                                    say pdata
   @ li+2,02                                    say pprograma
   @ li+2,23+int((50-len(trim(pnomeapl)))/2)    say trim(pnomeapl)
   @ li+2,71                                    say pusuario

   set color to &pdbed_3

** prepara vetor usado em dbedit()

   public vetor1[39]
   public cabec1[39]

   xbrowser  = 1
   vetor1[xbrowser]='codigo'
   cabec1[xbrowser]='Cdigo'
   xbrowser  = xbrowser  + 1
   vetor1[xbrowser]='nc'
   cabec1[xbrowser]='NC'
   xbrowser  = xbrowser  + 1
   vetor1[xbrowser]='nome'
   cabec1[xbrowser]='Nome'
   xbrowser  = xbrowser  + 1
   vetor1[xbrowser]='nomeo'
   cabec1[xbrowser]='Nome Of'
   xbrowser  = xbrowser  + 1
   vetor1[xbrowser]='fazenda'
   cabec1[xbrowser]='Nvel'
   xbrowser  = xbrowser  + 1
   vetor1[xbrowser]='estoque'
   cabec1[xbrowser]='Estoq'
   xbrowser  = xbrowser  + 1
   vetor1[xbrowser]='duplicata'
   cabec1[xbrowser]='Finan'
   if  tem_apura           =   .t.
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='apura'
       cabec1[xbrowser]='Apura'
   endif
   xbrowser  = xbrowser  + 1
   vetor1[xbrowser]='tef'
   cabec1[xbrowser]='Tef'
   if  tem_grupo           =   .t.
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='grupo'
       cabec1[xbrowser]='grupo'
   endif
   if  tem_piscofins
       if  tregime_pis_cofins  =  [1] .or. ;
           tregime_pis_cofins  =  [2]
           xbrowser  = xbrowser  + 1
           vetor1[xbrowser]='piscofins'
           cabec1[xbrowser]='Pis/cof'
           xbrowser  = xbrowser  + 1
           vetor1[xbrowser]='cst_pis'
           cabec1[xbrowser]='PIS'
           xbrowser  = xbrowser  + 1
           vetor1[xbrowser]='cst_cofins'
           cabec1[xbrowser]='COFINS'
       endif
   endif
   if  ptipo_desconto = [N]
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='desc'
       cabec1[xbrowser]='%Desc'
   endif

   if  existe_crnatu_c176  = .t.
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='c176'
       cabec1[xbrowser]='rST'
   endif

   if  tem_fechacx          =   .t.
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='fechacx'
       cabec1[xbrowser]='fechacx'
   endif

   if  tem_nome_ecf         =   .t.
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='nome_ecf'
       cabec1[xbrowser]='NOME no Frente'
   endif

   if  tem_nome_ecf         =   .t.
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='codi_ecf'
       cabec1[xbrowser]='CODIGO'
   endif

   if  tem_nome_ecf         =   .t.
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='nome_if'
       cabec1[xbrowser]='NOME na IF'
   endif
   if  tem_ibpt            = .t.
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='ibpt'
       cabec1[xbrowser]='Imposto'
   endif


   if  pnivel > [8]  .or. ;
       psuporte = [S]
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='usuario'
       cabec1[xbrowser]='Usuario'
       xbrowser  = xbrowser  + 1
       vetor1[xbrowser]='Manutencao'
       cabec1[xbrowser]='Mautencao'
   endif


*  dbedit(li+4,ci+1,lf-3,cf-1,vetor1,"db_cranatu",,cabec1,"","","")
 oadbedit(li+4,ci+1,lf-3,cf-1,vetor1,"db_cranatu",,cabec1,"","","")

   exit

enddo
_okkdd()
set cursor on

release vetor1

return("")



**************************************************************************
function db_cranatu    && funcao p/ auxiliar a debdit()
**************************************************************************

parameters modo

_okkdd()
if modo <= 4           && tecla de execao

   if lastkey()  == 13   .or. ;  && enter
      lastkey()  == 1006 .or. ;  && Duploc Click
      lastkey()  == 7    .or. ;  && del
      lastkey()  == 1            && home

      if bof() .and. eof()   && testa se arquivo esta vazio

         pmsg = [cranatu - Arquivo vazio, operacao impossivel !!!.]
         ftempo(5)
             prodecide()
         return(1)          && continua dbedit()

      endif

   endif

endif

do case

   case modo < 4           && dbedit() nao reconhece as teclas.

        if   lastkey()  == 1     && home   ** teste aqui porque home e usado
             do cranatu_pr with 1        && consulta
                 prodecide()
             return(2)                    && refresh na tela
        endif

        if empty(empresa)
           set cursor on
           do cranatu_pr with 2          && inclusao
           set cursor off
           prodecide()
           return(2)                       && refresh na tela
        endif

        prodecide()
        return(1)                       && continuar dbedit()

   case lastkey()  == 27   && esc

        set cursor on

        return(0)                       && encerrar dbedit()

   case lastkey()  == 22   && ins

        set cursor on

        do cranatu_pr with 2        && inclusao

        set cursor off
            prodecide()
        return(2)                       && refresh na tela

   case lastkey()  == 13     .or. ;   && enter
        lastkey()  == 1006            && Duploc Click

        set cursor on

        if prolock() = .t.
           do cranatu_pr with 3        && alteracao
           prounlock()
        endif

        set cursor off

            prodecide()
        return(2)                       && refresh na tela

   case lastkey()  == 7    && del

        if prolock() = .t.
           do cranatu_pr with 4        && exclusao
           prounlock()
        endif

        clear typeahead                 && limpa buffer do teclado

            prodecide()
        return(2)                       && refresh na tela


   case lastkey() == 47

        **** recebe func    p/ seek

        do while .t.
           tcli1 = [      ]
           @ lf-1,02 say space(77)
           @ lf-1,02 say  "COD.:"
           @ lf-1,09 get tcli1 pict '@K 999999'
           set cursor on
           Wread(Njanela)
           set cursor off
           if lastkey() == 27
                  prodecide()
              return(1)
           endif
           if empty(tcli1)
              pmsg = "CRANATU - Este campo deve conter Dados."
              ftempo(5)
              loop
           else
              tcli1 = strzero(val(tcli1),6)
              @ lf-1,09 say tcli1
           endif
           vpos_ant = recno()


           set order to 1
           seek pempresa+pfilial+tcli1
           if !found()
              go vpos_ant
              pmsg = [CRANATU - Codigo nao encontrado, verifique.]
              ftempo(5)
              if  upper(alltrim(pnomepre)) = [CASA]
              else
                  if  pcgc  =  [01.128.560/0001-99]              && madereira
                      set order to 2
                  endif
              endif
              loop
           endif

           if  upper(alltrim(pnomepre)) = [CASA]
           else
               if  pcgc  =  [01.128.560/0001-99]              && madereira
                   set order to 2
               endif
           endif
           exit
        enddo

        clear typeahead                 && limpa buffer do teclado

            prodecide()
        return(2)                       && refresh na tela

   case lastkey() = 513  && Control + a Help do Natureza

        save screen
        a = [\dbdc\]+[f]+crnatu->codigo+".hlp"
        if !file(a)
           a_I = crnatu->codigo+[ - ]+crnatu->nome
           MemoWrit( a, a_i )
        endif
        edicao(a)


        clear typeahead    && limpa buffers do teclado
        restore screen
        prodecide()
        return(2)                    && refresh na tela

   case lastkey() > 31 .and. lastkey() < 127

        **** posiciona no registro cuja primeira letra coincida

        vpos_ant = recno()

        seek pempresa+pfilial+upper(chr(lastkey()))

        if !found()

           go vpos_ant

               prodecide()
           return(2)

        endif

        clear typeahead                 && limpa buffer do teclado

            prodecide()
        return(2)                       && refresh na tela

   otherwise

        clear typeahead

            prodecide()
        return(2)                       && continua a execucao

endcase

    prodecide()
return("")




#define x_BLUE       16711680
#define x_DARKBLUE   10027008
#define x_WHITE      16777215
#define x_CYAN       16776960
#define x_BLACK             0
#define x_RED             255
#define x_GREEN         32768
#define x_GRAY        8421504
#define x_YELLOW        65535

*--------------------------------------------------------------------------------------------------------*
FUNCTION oaDBEdit(nLI, nCI, nLF, nCF, aCpos, cFunc, aPic, aTit, cHeader, cColuna, cRodape, cColunaRodape )
*--------------------------------------------------------------------------------------------------------*
*  oaDbEdit(li+4,ci+1,lf-3,cf-1,vetor1,"db_craclie",,cabec1,"","","")
   LOCAL aob := {}
   LOCAL i,X
   LOCAL nReturn, nPic
   LOCAL oB
   LOCAL nMode  := 0
   LOCAL oCursor:=SetCursor()
   LOCAL cFilOld:=DBFILTER()

  *msgstop("oadbedit")

   If ( cFunc = NIL )
      cFunc   := 'FnTecla'
   EndIf
   If ( aTit = NIL )
      aTit    := aCPos
   Endif
   If ( cHeader = NIL )
      cHeader := "" && MY_HSEP
   EndIf
   If ( cColuna = NIL )
      cColuna := "  " && MY_CSEP
   EndIf
   If ( cRodape = NIL )
      cRodape := ''
   EndIf
   If ( cColunaRodape = NIL )
      cColunaRodape := ''
   EndIf
   For i := 1 to Len( aCpos )
      if  !empty(aTit[ I ])
          If aPic = NIL
             AAdd( aoB, { aCpos[ I ], aTit[ I ] } )
          Else
             If SubStr( aPic[ I ], 1, 1 ) = '@'
                cPic := &(aCpos[ i ])
                if type("cPic")="C"
                   nPic := Len( cPic )
                else
                   nPic := 0
                   For X := 1 to Len( aPic[ I ] )
                      If SubStr( aPic[I], x, 1 ) = ' '
                         nPic := Len( aPic[ I ] ) - X
                      ElseIf nPic > 0
                         Exit
                      EndIf
                   Next X
                endif
             Else
                nPic := Len( aPic[ I ] )
             EndIf
             If ( Len( aTit[ I ] ) > nPic )
                AAdd( aoB, { aCpos[ I ], aTit[ I ], Len( aTit[ I ] ), aPic[ I ] } )
             Else
                AAdd( aoB, { aCpos[ I ], aTit[ I ], nPic, aPic[ I ] } )
             EndIf
          EndIf
      EndIf
   Next I
   oB:= oaTBrowseDB( nLI, nCI, nLF, nCF, aoB )
   oB:freeze    := 0
 * oB:ColorSpec := SetColor()
   oB:ColorSpec := "N/W,N/BG,B/W,B/BG,B/W,B/BG,R/W,B/R"


   oB:ColSep    := cColuna
   oB:FootSep   := cRodape
   oB:HeadSep   := cHeader
   SetCursor(0) // Desliga cursor
   nMode := 0
   cFunc := '{ |x,y| ' + AllTrim( cFunc ) + '( x, y ) }'
   nReturn :=  EVal( &cFunc., nMode, oB:ColPos )

   nKey := 0
   Do While .T.

        p_t_date = date()
        p_t_time = time()

      If ( oB:ColPos <= oB:Freeze )
         oB:ColPos := oB:Freeze + 1
      EndIf
      //- - - -> Pinta Todas as Celulas da tela
      oB:ColorRect( { oB:RowPos, 1, oB:RowPos, oB:ColCount }, { 1, 1 } )
      ForceStable( oB )
      //- - - -> Pinta a Celula que esta o cursor
      oB:colorRect( { oB:RowPos, 1, oB:RowPos, oB:ColCount }, { 5, 2 } )
      OB:colorrect({ob:rowpos,ob:LeftVisible,ob:rowpos,ob:Rightvisible},{9,2}) && BLACK

      oB:Hilite()
      If ( RecCount() = 0)
         If nMode = 0
            nMode := 3
            nKey := 1
         EndIf
      EndIf
      If ( oB:HitTop )
         If nMode = 0
            nMode := 1
         EndIf
      EndIf
      If ( oB:HitBottom )
         If nMode = 0
            nMode := 2
         EndIf
      EndIf
      If !( nKey = 0 )
         If (SetKey( nKey ) == NIL)
            nReturn :=  EVal( &cFunc., nMode, oB:ColPos )
            If ( nReturn = 0 )   && erro aqui    fm
               Exit
            EndIf
            If ( nReturn = 1 )
               oB:RefreshAll()
               nKey := nMode := 0
               Loop
            Endif
            If ( nReturn = 2 )
               If Deleted()
                  DbSkip()
               EndIf
               oB:RefreshAll()
               nKey := nMode := 0
               Loop
            EndIf
         Else
            EVal( SetKey( nKey ) )
            If Deleted()
               DbSkip()
            EndIf
            oB:RefreshAll()
            nKey := nMode := 0
            Loop
         EndIf
      EndIf
      nMode := 0
      nKey  := Inkey(0) // MyInkey(0) oaoaoa
      If !TBMoveCursor( oB, nKey )
         nMode := 4
      EndIf
   EndDo
   SETCURSOR(oCursor)
   if !Empty(cFilOld)
      Set Filter To &cFilOld  // volta filtro original
   else
      Set Filter To
   endif
RETURN NIL
// funcao para criar objeto TBrowse //
Static Function oaTBrowseDB( nTop, nLeft, nBottom, nRight, tb )
   LOCAL i, o, Column

  *msgstop("inicio oatbrowsedb")

   If Len( tb ) = 0
     *Mensagem("Erro de Parametro: Objetos do TBrowse Vazio.")
      Return( Nil )
   EndIf
   o := TBrowseDB( nTop, nLeft, nBottom, nRight )
   For i = 1 To Len( tb )

       *msgstop("for ")


      If Len( AllTrim( tb[ i,1] ) ) = 0
        *Mensagem("Tabela do Browse Invalida: Existe um Campo Vazio na Tabela do Browse.")
         Return( Nil )
      EndIf
      If Len( AllTrim( tb[ i, 2] ) ) = 0
         tb[ i, 2 ] := tb[ i, 1 ]
      EndIf
      If Len( tb[ i ] ) >= 3 .And. ValType( tb[ i, 3 ] ) != 'N'
        *Mensagem( "Tamanho Invlido: Existe um Item com o Campo Tamanho Invalido.")
         Return( Nil )
      EndIf
      Column := TBColumnNew()
      Column:Heading := tb[ i, 2 ]
      If Len( tb[ i ] ) >= 4
         Column:Block   := &( " { || Transform( " + tb[ i, 1 ] + ",'" + StrTran( tb[ i, 4 ], '"', " " ) + "' ) } " )
         Column:Cargo   := { FieldBlock( '"' + tb[ i, 1 ] + '"' ), '"' + tb[i, 4 ] + '"'}
      Else
         Column:Cargo   := { FieldBlock( '"' + tb[ i, 1 ] + '"' ), "" }
         Column:Block   := &( " { || " + tb[ i, 1 ] + " } " )
      EndIf
      If Len( tb[ i ] ) >= 3
         Column:Width := tb[ i, 3 ]
      EndIf

*bbbbbbbbbbbbb
  *   column:colorBlock := {||IF(int((ordkeyno()%2))=0,{1,3},{2,5})}
  *   column:colorBlock := {||IF(int((ordkeyno()%2))=0,CLR_LGREEN, CLR_LGRAY)}
  *   column:colorBlock := {||IF(int((ordkeyno()%2))=0,{xtcpa1,xtcpa2},{xtcce1,xtcce2})}
  *   column:colorBlock := {||IF(int((ordkeyno()%2))=0,{1,3},{5,6})}  && preto    azul   5

*    msgstop(upper(pprograma))

      do case
         case  upper(pprograma)  = [CCACLAS]
               column:colorBlock := {||IF(substr(codigo,9,2) = [00],{7,8},{5,6})}  && VERMELHO AZUL   9
         case  upper(pprograma)  = [CRANCM]
               if   p_existe_ibpt   =  .t.
                    column:colorBlock := {||IF(empty(ibpt->ncm),{7,8},{5,6})}  && VERMELHO AZUL   9
               else
                    column:colorBlock := {||IF(int((ordkeyno()%2))=0,{7,8},{5,6})}  && VERMELHO AZUL   9
               endif
         case  upper(pprograma)  = [CRAIBPT]
               if   p_existe_ibpt   =  .t.
                    column:colorBlock := {||IF(empty(ncm->n3),{7,8},{5,6})}  && VERMELHO AZUL   9
               else
                    column:colorBlock := {||IF(int((ordkeyno()%2))=0,{7,8},{5,6})}  && VERMELHO AZUL   9
               endif
         case  upper(pprograma)  = [GMAFORN]
               column:colorBlock := {||IF(uf <> puf,{7,8},{5,6})}  && VERMELHO AZUL   9
         case  upper(pprograma)  = [CBAMOVI]
               column:colorBlock := {||if(codigo = [NEGOCIADOA],{7,8},if(codigo = [NEGOCIADOD],{5,6},IF(operacao = [D],{7,8},{5,6})))}  && VERMELHO AZUL   9
         case  upper(pprograma)  = [CBAMOVI]  .or. ;
               upper(pprograma)  = [CBAQDOC]  .or. ;
               upper(pprograma)  = [CBAMVOL]
               column:colorBlock := {||IF(operacao = [D],{7,8},{5,6})}  && VERMELHO AZUL   9
         case  upper(pprograma)  = [GMAPRODD]
               column:colorBlock := {||IF(empresa = [ALD] .or. empresa = [AUD],{7,8},{5,6})}  && VERMELHO AZUL   9

         case  upper(pprograma)  = [GMAPROD]  .or. ;
               upper(pprograma)  = [GMXPROD]  .or. ;
               upper(pprograma)  = [CRPPEDA]
               if  pcgc  =  [11.722.250/0001-51]              && Santana
                   column:colorBlock := {||IF(pr_promo > 0.00,{7,8},{5,6})}  && VERMELHO AZUL   9
               else
                   if  quer_ESTOQUE_MINIMO = .T.
                       column:colorBlock := {||IF(qt_estoque < est_minimo,{2,5},IF(qt_estoque = 0,{7,8},{5,6}))}  && VERMELHO AZUL   9
                   else
                       column:colorBlock := {||IF(qt_estoque = 0,{7,8},{5,6})}  && VERMELHO AZUL   9
                   endif
               endif

         case  upper(pprograma)  = [GMAGRUP]
               if  ppermite_estoque_negativo_grupo = [S]
                   column:colorBlock := {||IF(negativo = [S],{7,8},{5,6})}  && VERMELHO AZUL   9
               else
                   column:colorBlock := {||IF(int((ordkeyno()%2))=0,{7,8},{5,6})}  && VERMELHO AZUL   9
               endif

         case  upper(pprograma)  = [CBACHEQ]
               column:colorBlock := {||IF(class = [CCHDB     ],{7,8},{5,6})}  && VERMELHO AZUL   9
         case  upper(pprograma)  = [GMAOS]
               column:colorBlock := {||IF(empty(horaf),{7,8},{5,6})}  && VERMELHO AZUL   9
         otherwise
               column:colorBlock := {||IF(int((ordkeyno()%2))=0,{7,8},{5,6})}  && VERMELHO AZUL   9
      endcase

      o:AddColumn( Column )
   Next i

  *msgstop("final   oatbrowsedb")

Return( o )
// funcao para estabilizar objeto TBrowse //
Static Function ForceStable( obj )
   DispBegin()
   obj:ForceStable()
   DispEnd()
Return
// funcao para mudar cursor de posio do objeto TBrowse //
Static Function TBMoveCursor( o, nKey )
   LOCAL nFound
   nFound := o:ApplyKey( nKey )
  *msgstop("muda cursor")
Return( nFound = 0 )

