;** Bib_Vend *******************************************************************
;*  Biblioteca de Rotinas Comum modulo de vendas                               *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)               
;Desenvolvido    : 07/12/2015 por Anivel Augusto Rodrigues
;Ultima Alteracao: 10/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Biblioteca Bib_Ven                  
;Ultima Alteracao: 06/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VrTCCredito_Show()
;Ultima Alteracao: 29/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao PegaCondicaoeFormaPagamento()
;Ultima Alteracao: 30/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao ModoLocalizarItem()            
;Ultima Alteracao: 06/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao SomatoriaDosItens()            
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao SomatoriaDosItensTroca()            
;Ultima Alteracao: 10/05/2016 por Bruno Carvalho
;Motivo Alteracao: Movido da bilbioteca BIB_VEND a proc ModoLocalizarItem() para a bilbioteca BIBLIOT
;Ultima Alteracao: 13/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao LiberaCondicaoeFormaPagamento() e ajustes PegaCondicaoeFormaPagamento()
;Ultima Alteracao: 14/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado Enderecos() e Adicionado ShowDialog_Endereco,Grava_Enderecos,Carrega_Endereco,Endereco_Dialog
;Ultima Alteracao: 15/06/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado Pega_Endereco_Fatura()
;Ultima Alteracao: 11/07/2016 por Bruno Carvalho
;Motivo Alteracao: Add Verifica_Representante()
;Ultima Alteracao: 28/11/2016 por Bruno Carvalho
;Motivo Alteracao: Setando vari veis iniciais padrÆo -> Enderecos()
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao JC_Digita, JC_Show(), JC_Dialog - Justificativa Contingencia 
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Enderecos
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PegaCondicaoeFormaPagamento - Verificar
;Ultima Alteracao: 22/06/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Digita_Frete(),Digita_Cartao(),Digita_Descto(),Datas_Of(),Ordem_Compra_Publica(),Digita_Obs() FATURA -> BIB_VEND
;Ultima Alteracao: 23/06/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Digita_Cheque(),Digita_Cartao(),Digita_Descto(),Ordem_Compra_Publica(),Digita_Obs() NOTA -> BIB_VEND
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 14/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes "NotaOcP" -> "NotaCC"
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor IR] -> [Valor DebitoCredito] e [Valor INSS] -> [Valor TC]                  
;Ultima Alteracao: 09/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao PegaContaCaixaUsuario()
;Ultima Alteracao: 18/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao PegaContaCaixaUsuario()
;Ultima Alteracao: 18/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao DigitaDescto_Item()
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 06/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ICMS ST FEM
;Ultima Alteracao: 13/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao IndicadorPresenca()
;Ultima Alteracao: 21/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checa_Comissao() -> GetRecord para CODIGO_MARCA
;Ultima Alteracao: 22/09/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Bib_Bal p/ Bib_Vend -> LOC_TAB_PRECO() *Utiliza‡Æo no Fatura e BalcÆo
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado Checa_MVA()
;Ultima Alteracao: 26/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novos calculos da nota
;Ultima Alteracao: 26/09/2017 por Bruno Carvalho
;Motivo Alteracao: Add IPI_DevolucaoCompra,IPI_DevolucaoCompra_Show,Digita_Frete_Dialog
;Ultima Alteracao: 27/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_MVA()
;Ultima Alteracao: 03/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TirarMensagemObs()
;Ultima Alteracao: 21/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_AliqIBPT             
;Ultima Alteracao: 30/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes sem showdialog ipi devolvido
;Ultima Alteracao: 05/12/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes DigitaDesctoItem_Dialog() -> SYS_APLICATIVO  = "PEDIDO"  
;Ultima Alteracao: 15/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes st e FCP michelee nfe4.0  
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() 
;Ultima Alteracao: 25/06/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes itens mercadoria/servico
;Ultima Alteracao: 04/07/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Numero Frete Cotacao] no Digita_Frete()
;Ultima Alteracao: 06/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes no Layout do Digita_Frete()
;Ultima Alteracao: 10/07/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CalcularPrecoTotal_Item()
;Ultima Alteracao: 11/07/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Pega_AliqIBPT()
;Ultima Alteracao: 03/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao PARAM_VERSAODANFE
;Ultima Alteracao: 04/09/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado Digita_Troco()
;Ultima Alteracao: 10/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Ordem_Compra_Publica_Show()
;Ultima Alteracao: 14/09/2018 por Bruno Carvalho
;Motivo Alteracao: Digita_Troco() -> Estava com release nas vari veis VrTroco,VSD_VrTroco,TR e foi removido
;Ultima Alteracao: 24/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes conta corrente cheque            
;Ultima Alteracao: 25/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0168 ST E FCP
;Ultima Alteracao: 26/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NCMUF             
;Ultima Alteracao: 08/04/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes vrdescontounitario #0431
;Ultima Alteracao: 29/04/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Enderecos           
;Ultima Alteracao: 30/04/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TirarMensagemObs           
;Ultima Alteracao: 05/06/2019 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado CALC_VOLUMES() 

@ 22,28 ?? "Gerando Biblioteca Bib_vend.Lib"
Style Blink                   
?? "... "

If IsFile("\\Sistemas\\Vendas\\Bib_vend.Lib")
   Then Run NoRefresh "Del \\Sistemas\\Vendas\\Bib_vend.Lib>Nul"
EndIf
CreateLib "\\Sistemas\\Vendas\\Bib_vend"   Size 100

;------- TCGerado --------------------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc VrTCCredito_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp  
Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="I_VrTCCredito"    : CancelDialog
           EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
              Case Campo="I_VrTCCredito" :
                   VSD_VrTCCredito=ControlValue("I_VrTCCredito")
                   AcceptDialog
           EndSwitch
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP
EndProc     ;  (VrTCCredito_Dialog)

;*******************************************************************************
;* Show Dialog VrTCCredito                                                     *
;*******************************************************************************
Proc VrTCCredito_Show()

switch 
  case table()="Bxautc": VSD_VrTCCredito=[Valor_TCGerado]
  otherwise            : VSD_VrTCCredito=[Valor TC      ]
endswitch 

Echo Normal
Echo Off

while true

  Showdialog "T¡tulo de Cr‚dito a gerar" Proc "VrTCCredito_Dialog"
     Trigger "OPEN","ARRIVE"
      Key "F1","TAB","ENTER","ESC"
       @ 07,22 height 04 width 35
  
     Label  @ 0,12 "Valor" For "I_VrTCCredito"
     Accept @ 1,10 Width 13 "$" picture "#*#.[##]" Tag "I_VrTCCredito" to VSD_VrTCCredito
  
  
  Enddialog
  If not retval
     then quitloop
     else 
     
          switch 
            case table()="Bxautc": 
              [Valor_TCGerado]=VSD_VrTCCredito
              if [Valor_TCGerado]=0 then [Valor_TCGerado]=blanknum() endif
              
            otherwise            : 
              [Valor TC]=VSD_VrTCCredito
              if [Valor TC]=0 then [Valor TC]=blanknum() endif
          endswitch 
     
          quitloop 
  endif

endwhile
   
Echo Off
Mouse Show

EndProc    ;  (VrTCCredito_Show)

;*******************************************************************************
;* Digitacao dos Dados Titulo de Credito                                       *
;*******************************************************************************
Proc VrTCCredito_Digita()
Private ncampo

ncampo=Field()

If Not IsAssigned(PARAM_TITCRED)  Then PARAM_TITCRED=""  EndIf

If PARAM_TITCRED="T"
   then 
        VrTCCredito_Show()
endif   

Moveto Field ncampo

release procs VrTCCredito_Dialog, VrTCCredito_Show
EndProc    ;  (Digita_VrTCCredito)

;-------------------------------------------------------------------------------


;------- VrEntrada -------------------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc VrEntrada_Dialog(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento, Temp
  
Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="I_VrEntrada"    : CancelDialog
           EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
              Case Campo="I_VrEntrada" :
                   VSD_VrEntrada=ControlValue("I_VrEntrada")
                   AcceptDialog
           EndSwitch
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP
EndProc     ;  (VrEntrada_Dialog)

;*******************************************************************************
;* Show Dialog VrEntrada                                                       *
;*******************************************************************************
Proc VrEntrada_Show()
private vrbaseoperacao

vrbaseoperacao=[Valor Nota Fiscal]
if not isblank([Valor DebitoCredito])
   then
        if [Valor DebitoCredito]<0 then vrbaseoperacao=[Valor DebitoCredito]*-1 endif 
        if [Valor DebitoCredito]>0 then vrbaseoperacao=[Valor DebitoCredito]    endif 
endif

VSD_VrEntrada=BlankNum()

Echo Normal
Echo Off

while true

  Showdialog TIT_ENTRADA Proc "VrEntrada_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "TAB","ENTER","ESC"
     @ 09,14 height 06 width 54

  Label  @ 1,01 "Informe o Valor d"+Rtrim(SubStr(TIT_ENTRADA,17,12))+": " for "I_VrEntrada"
  Accept @ 1,30+COL_ENTRADA  Width 12 "$" picture "#*#.[##]" Tag "I_VrEntrada" to VSD_VrEntrada
  @ 03,02 ?? "** Em Branco = Todas as parcelas ser„o iguais"
  
  Enddialog
  If Not RetVal 
     Then VSD_VrEntrada=BlankNum() 
          QuitLoop
  Endif   
                       
  Switch
    Case VSD_VrEntrada > vrbaseoperacao : 
         Mensagem("O Valor digitado para entrada ‚ maior que o valor da Nota Fiscal !")
         Loop
    Case VSD_VrEntrada = vrbaseoperacao : 
         Mensagem("O Valor digitado para entrada ‚ o mesmo valor da Nota Fiscal !")
         Loop 
    Case not isblank(VSD_VrEntrada) and VSD_VrEntrada <=0 :
         Mensagem("O Valor digitado para entrada deve ser maior que 0 !")
         Loop 
    OtherWise                                :
         QuitLoop
  EndSwitch       

endwhile
   
Echo Off
Mouse Show

EndProc    ;  (VrEntrada_Show)

;*******************************************************************************
;* Digitacao dos Dados VrEntrada                                               *
;*******************************************************************************
Proc VrEntrada_Digita()

ncampo=Field()

If Not IsAssigned(PARAM_UTILIZA_ENTRADA)  Then PARAM_UTILIZA_ENTRADA="2"  EndIf

If PARAM_UTILIZA_ENTRADA="1" Or 
   ( PARAM_UTILIZA_ENTRADA="2" And 
    ( SubStr([Composicao de Dias],1,2)="0/" Or SubStr([Composicao de Dias],1,3)="00/" Or [Composicao de Dias]="0" ) ) 
   And [Numero de Parcelas]>1
  Then 
       Switch
         Case PARAM_UTILIZA_ENTRADA="2" Or SubStr([Composicao de Dias],1,2)="0/" Or SubStr([Composicao de Dias],1,3)="00/" Or [Composicao de Dias]="0" :
              TIT_ENTRADA="Valor Referente a Entrada"
              COL_ENTRADA=0
         Case PARAM_UTILIZA_ENTRADA="1" :
              TIT_ENTRADA="Valor Referente a 1¦ Parcela"
              COL_ENTRADA=3
       EndSwitch

       VrEntrada_Show()
                  
endif

Moveto Field ncampo

release vars TIT_ENTRADA, COL_ENTRADA
release procs VrEntrada_Dialog, VrEntrada_Show   
EndProc    ;  (VrEntrada_Digita)

;-------------------------------------------------------------------------------



;*******************************************************************************
;* Soma Vencimentos para variavel VVRVENCTOS no form                           *
;*******************************************************************************
Proc SomaVenctos(tabform, tabvenctos)
private tabform, tabvenctos
 
Moveto tabvenctos
Moveto [Valor   ]   VSVRVENCTOS=ImageCSum()

Moveto tabform
EndProc ;(SomaVenctos)

                                                           
;*******************************************************************************
;* Rotina para Checagem de Composicao de Dias                                  *
;*******************************************************************************
Proc Checa_CompDias(Texto)
Private Texto,Contador_Repeticao,ncc

Contador_Repeticao=0
For ncc From 1 To Len(Texto)
    If Asc(SubStr(Texto,ncc,1))<47 Or
       Asc(SubStr(Texto,ncc,1))>57
       Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
            Return False
       Else If SubStr(Texto,ncc,1)="/"
               Then Contador_Repeticao=Contador_Repeticao+1
               Else Contador_Repeticao=0
            EndIf
            If Contador_Repeticao>1 Or
               SubStr(Texto,1,1)="/" Or
               SubStr(Texto,Len(Texto),1)="/"
               Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
                    Return False
            EndIf
    EndIf
EndFor

Return True
EndProc
 
;*******************************************************************************
;* Rotina pega condicao e forma de pagamento do cliente                        *
;*******************************************************************************
Proc PegaCondicaoeFormaPagamento(tipo, codigo)
Private tipo, codigo, regdestinat

If (PARAM_CONDPAGTO="S" Or (SYS_CODIGO_CLIENTE="0377" And PARAM_CONDPAGTO="N")) And
   [FaturaC->Tipo Movimento Estoque]="S" And 
   Search("VEND",[FaturaC->Descricao da Destinacao])>0
   then
        getrecord "\\sistemas\\cadastro\\destinat" codigo to regdestinat
        if retval
           then
                if not isblank(regdestinat["CondPagto Cliente"])
                   then 
                        if UPPER(tipo)="PEGAR"
                           then
                                [Condicao de Pagamento]=regdestinat["CondPagto Cliente"      ]

                                if not isblank(regdestinat["Forma Pagamento Cliente"])
                                   then [Forma de Pagamento   ]=regdestinat["Forma Pagamento Cliente"]
                                endif   
                
                                If regdestinat["Tipo Assistencia"      ]="RECEBEDIAFIXO"   And
                                   regdestinat["Dia_Vencimento_Notinha"]>""       
                                   Then [Composicao de Dias]=StrVal((Ultimo_Dia_Data([FaturaC->Data de Emissao])+
                                                                     NumVal(regdestinat["Dia_Vencimento_Notinha"]))-[FaturaC->Data de Emissao])           
                                endIf
                        endIf

                        if UPPER(tipo)="VERIFICAR"
                           then
                                If [Condicao de Pagamento]=regdestinat["CondPagto Cliente"      ]
                                   then
                                        If regdestinat["Tipo Assistencia"      ]="RECEBEDIAFIXO"   And
                                           regdestinat["Dia_Vencimento_Notinha"]>""       
                                           Then [Composicao de Dias]=StrVal((Ultimo_Dia_Data([FaturaC->Data de Emissao])+
                                                                             NumVal(regdestinat["Dia_Vencimento_Notinha"]))-[FaturaC->Data de Emissao])           
                                        endIf
                                endif
                        endIf

                         
                        if PARAM_CONDPAGTO="S" And
                           SYS_NIVEL_USUARIO="P" ; particular
                          then return true  
                        endif
                EndIf
        EndIf   
EndIf

Return False 
EndProc

;*******************************************************************************
;* Rotina Libera condicao e forma de pagamento do cliente                      *
;*******************************************************************************
Proc LiberaCondicaoeFormaPagamento()
Private regdestinat, regcondpgto, ok, msg,ndias

 ok=true
msg=""

while true
  getrecord "\\sistemas\\cadastro\\destinat" [FaturaC->codigo] to regdestinat
  if not retval
     then msg="Pessoa nÆo cadastrada, "+[FaturaC->codigo]+"\\LiberaCondicaoeFormaPagamento !"
          quitloop
  endif
     
  getrecord "\\sistemas\\Vendas\\condpgto" regdestinat["CondPagto Cliente"] to regcondpgto
  if not retval
     then msg="Condi‡Æo Pagto nÆo cadastrada, "+regdestinat["CondPagto Cliente"]+"\\LiberaCondicaoeFormaPagamento !"
          quitloop
  endif

  if [FaturaC->Condicao de Pagamento]=regdestinat["CondPagto Cliente"] 
     then
          if [FaturaC->Tipo de Pagamento]<>regcondpgto["Tipo de Pagamento"]
             then msg="Cliente com condi‡Æo de pagamento ["+regdestinat["CondPagto Cliente"]+","+regcondpgto["Tipo de Pagamento"]+"] pr‚-definida !"
                  quitloop
          endif     
  endif
  
  if [FaturaC->Condicao de Pagamento]<>regdestinat["CondPagto Cliente"] 
     then
          if regcondpgto["Tipo de Pagamento"]="P" and [FaturaC->Tipo de Pagamento]="P"
             then msg="Cliente com condi‡Æo de pagamento ["+regdestinat["CondPagto Cliente"]+"] pr‚-definida !"
                  quitloop
          endif     
          if regcondpgto["Tipo de Pagamento"]="P" and [FaturaC->Tipo de Pagamento]="O"
             then msg="Cliente com permissÆo de venda a Prazo,\\caso contr rio s¢ a Vista !"
                  quitloop
          endif     
          if regcondpgto["Tipo de Pagamento"]="V" and [FaturaC->Tipo de Pagamento]<>"V"
             then msg="Cliente com permissÆo de venda somente a Vista !"
                  quitloop
          endif
  endif
  
  
  if regcondpgto["Tipo de Pagamento"]="P" and [FaturaC->Tipo de Pagamento]="V"
     then 
          moveto "Faturav"
          scan
            if search([FaturaV->Forma de Pagamento],"DN,CT,CD,CL,TC")=0
               then msg="Cliente com permissÆo de venda a Vista para forma de pagamento [DN/CT/CD/CL/TC] !"
                    quitloop
            endif
          endscan
          moveto "Faturac"
  endif     
  
  if regcondpgto["Tipo de Pagamento"]="V" and [FaturaC->Tipo de Pagamento]="V"
     then
          moveto "Faturav"
          scan
            if [FaturaV->Forma de Pagamento]<>regdestinat["Forma Pagamento Cliente"]
               then if search([FaturaV->Forma de Pagamento],"DN,CT,CD,CL,TC")=0
                       then msg="Cliente com permissÆo de venda a Vista para forma de pagamento [DN/CT/CD/CL] !"
                            quitloop
                    endif
            endif
          endscan
          moveto "Faturac"
  endif     

  if regcondpgto["Tipo de Pagamento"]="P" and [FaturaC->Tipo de Pagamento]="P"
     then
          If regdestinat["Tipo Assistencia"      ]="RECEBEDIAFIXO"   And
             regdestinat["Dia_Vencimento_Notinha"]>""       
             Then ndias=strVal((Ultimo_Dia_Data([Data de Emissao])+NumVal(regdestinat["Dia_Vencimento_Notinha"]))-[FaturaC->Data de Emissao])     
                  if [FaturaC->Composicao de Dias]<>ndias
                     then msg="Composi‡Æo de Dias fora da permissÆo de venda para o Cliente ["+strval(ndias)+"] !"
                          quitloop
                  endif
          endIf
     
          moveto "Faturav"
          scan
            if [FaturaV->Forma de Pagamento]<>regdestinat["Forma Pagamento Cliente"] 
               then msg="Cliente com permissÆo de venda para forma de pagamento ["+regdestinat["Forma Pagamento Cliente"]+"] !"
                    quitloop
            endif
          endscan
          moveto "Faturac"
  endif     

  quitloop
endwhile

if msg<>""
   then mensagem(msg)
        return false 
endif

return true   
EndProc

;*******************************************************************************
;* Somatoria de valores dos itens para variaveis do FORM Fatura                *
;*******************************************************************************
Proc SomatoriaDosItens()

VSVRMERC = 0
VSQTDE   = 0
VCITENS  = 0

scan
  VSVRMERC = VSVRMERC + [Preco Total   ]
  VSQTDE   = VSQTDE   + [Quantidade    ]
  VCITENS  = VCITENS  + 1
endscan

endproc 

;*******************************************************************************
;* Somatoria de valores dos itens para variaveis do FORM Fatura - TROCA        *
;*******************************************************************************
Proc SomatoriaDosItensTroca()

switch
  case table()="Faturai"  :
    SVSVRMERC = 0
    SVSQTDE   = 0
    SVCITENS  = 0

    scan
      SVSVRMERC = SVSVRMERC + [Preco Total   ]
      SVSQTDE   = SVSQTDE   + [Quantidade    ]
      SVCITENS  = SVCITENS  + 1
    endscan

  case table()="Faturaid" :
    EVSVRMERC = 0
    EVSQTDE   = 0
    EVCITENS  = 0

    scan
      EVSVRMERC = EVSVRMERC + [Preco Total   ]
      EVSQTDE   = EVSQTDE   + [Quantidade    ]
      EVCITENS  = EVCITENS  + 1
    endscan

endswitch

endproc 

;------- Endere‡oes Entrega/Cobran‡a/Retirada ----------------------------------

;*******************************************************************************
;* Rotina para Impressao do Cabecalho                                          *
;*******************************************************************************
Proc Pega_Endereco_Fatura(PARAM)
Private PARAM

VSD_E_Endereco=""
VSD_E_Bairro  =""
VSD_E_CEP     =""
VSD_E_Cidade  =""
VSD_E_UF      =""

VSD_C_Endereco=""
VSD_C_Bairro  =""
VSD_C_CEP     =""
VSD_C_Cidade  =""
VSD_C_UF      =""    

GetRecord "\\Sistemas\\Vendas\\FaturaCC" PARAM To REG_ENTCOB
If RetVal
   Then VSD_E_Endereco=REG_ENTCOB["Endereco de Entrega"]
        VSD_E_Bairro  =REG_ENTCOB["Bairro de Entrega"]
        VSD_E_CEP     =REG_ENTCOB["CEP de Entrega"]
        VSD_E_Cidade  =REG_ENTCOB["Cidade de Entrega"]
        VSD_E_UF      =REG_ENTCOB["UF de Entrega"]

        VSD_C_Endereco=REG_ENTCOB["Endereco de Cobranca"]
        VSD_C_Bairro  =REG_ENTCOB["Bairro de Cobranca"]
        VSD_C_CEP     =REG_ENTCOB["CEP de Cobranca"]
        VSD_C_Cidade  =REG_ENTCOB["Cidade de Cobranca"]
        VSD_C_UF      =REG_ENTCOB["UF de Cobranca"]
   
   Else DynArray REG_ENTCOB[]
        REG_ENTCOB["Endereco de Entrega"] = "" 
        REG_ENTCOB["Bairro de Entrega"]   = "" 
        REG_ENTCOB["CEP de Entrega"]      = ""
        REG_ENTCOB["Cidade de Entrega"]   = ""
        REG_ENTCOB["UF de Entrega"]       = ""

        REG_ENTCOB["Endereco de Cobranca"]= ""
        REG_ENTCOB["Bairro de Cobranca"]  = ""
        REG_ENTCOB["CEP de Cobranca"]     = ""
        REG_ENTCOB["Cidade de Cobranca"]  = ""
        REG_ENTCOB["UF de Cobranca"]      = ""         
EndIf   
 
EndProc ;Pega_Endereco_Fatura() 

;*******************************************************************************
;* Rotina para Localizar Enderecos                                             *
;*******************************************************************************
Proc Closed Enderecos()
UseVars AutoLib, ErrorProc, VSDGENDENT, VSDGENDCOB, VSDGENDRET, regdestinat

Private NCAMPO

VSD_E_Endereco=""
VSD_E_Bairro  =""
VSD_E_Cidade  =""
VSD_E_UF      =""
VSD_E_CEP     =""
VSD_E_CNPJ_CPF=""
VSD_E_Razao   =""
VSD_E_Fone    =""
VSD_E_Email   =""
VSD_E_IE      =""

VSD_R_Endereco=""
VSD_R_Bairro  =""
VSD_R_Cidade  =""
VSD_R_UF      =""
VSD_R_CEP     =""
VSD_R_CNPJ_CPF=""
VSD_R_Razao   =""
VSD_R_Fone    =""
VSD_R_Email   =""
VSD_R_IE      =""

VSD_C_Endereco=""
VSD_C_Bairro  =""
VSD_C_Cidade  =""
VSD_C_UF      =""
VSD_C_CEP     =""

VSDGENDENT    =""
VSDGENDCOB    =""
VSDGENDRET    =""

NCAMPO=Field()

NUMERO_OF =[Faturac->Numero da Of]
GetRecord "\\Sistemas\\Cadastro\\End_Cob" [FaturaC->Codigo] To reg_end_cob
If RetVal
   Then 
        Moveto "FaturaCC"
        
        [Endereco de Entrega   ]=reg_end_cob["Endereco de Entrega" ]
        [Bairro de Entrega     ]=reg_end_cob["Bairro de Entrega"   ]
        [CEP de Entrega        ]=reg_end_cob["CEP de Entrega"      ]
        [Cidade de Entrega     ]=reg_end_cob["Cidade de Entrega"   ]
        [UF de Entrega         ]=reg_end_cob["UF de Entrega"       ]
        [CGC Recebedor         ]=[FaturaC->CGC]
        [Razao Social Recebedor]=[FaturaC->Razao Social]
        [Telefone Recebedor    ]=[FaturaC->Telefone]
        [IE Recebedor          ]=[FaturaC->IE]

        GetRecord "\\Sistemas\\Cadastro\\Destinat" [FaturaC->Codigo] To regdestinat
        If RetVal
           Then [Email Recebedor]=regdestinat["Endereco_Eletronico"]
        endif

        [Endereco de Cobranca]=reg_end_cob["Endereco de Cobranca"]
        [Bairro de Cobranca  ]=reg_end_cob["Bairro de Cobranca"  ]
        [CEP de Cobranca     ]=reg_end_cob["CEP de Cobranca"     ]
        [Cidade de Cobranca  ]=reg_end_cob["Cidade de Cobranca"  ]
        [UF de Cobranca      ]=reg_end_cob["UF de Cobranca"      ]
        
        If IsBlank([Endereco de Entrega])
           Then [Endereco de Entrega ]="O MESMO"
        EndIf
        If IsBlank([Endereco de Retirada])
           Then [Endereco de Retirada]="O MESMO"
        EndIf
        If IsBlank([Endereco de Cobranca])
           Then [Endereco de Cobranca]="O MESMO"
        EndIf  
        UnlockRecord

        VSD_E_Endereco=[Endereco de Entrega   ]
        VSD_E_Bairro  =[Bairro de Entrega     ]
        VSD_E_CEP     =[CEP de Entrega        ]
        VSD_E_Cidade  =[Cidade de Entrega     ]
        VSD_E_UF      =[UF de Entrega         ]
        VSD_E_CNPJ_CPF=[CGC Recebedor         ]
        VSD_E_Razao   =[Razao Social Recebedor]
        VSD_E_Fone    =[Telefone Recebedor    ]
        VSD_E_Email   =[Email Recebedor       ]
        VSD_E_IE      =[IE Recebedor          ]

        VSD_R_Endereco=[Endereco de Retirada  ]

        VSD_C_Endereco=[Endereco de Cobranca  ]
        VSD_C_Bairro  =[Bairro de Cobranca    ]
        VSD_C_CEP     =[CEP de Cobranca       ]
        VSD_C_Cidade  =[Cidade de Cobranca    ]
        VSD_C_UF      =[UF de Cobranca        ]
        
        
        Carrega_Endereco("ATUALIZA")
        
        Release Vars VSD_E_Endereco,VSD_E_Bairro,VSD_E_CEP,  VSD_E_Cidade,VSD_E_UF,
                     VSD_E_CNPJ_CPF,VSD_E_Razao,  VSD_E_Fone,VSD_E_Email, VSD_E_IE,

                     VSD_R_Endereco,VSD_R_Bairro,VSD_R_CEP, VSD_R_Cidade,VSD_R_UF,
                     VSD_R_CNPJ_CPF,VSD_R_Razao, VSD_R_Fone,VSD_R_Email, VSD_R_IE,

                     VSD_C_Endereco,VSD_C_Bairro,VSD_C_CEP,VSD_C_Cidade,VSD_C_UF

        Moveto "FaturaC"

EndIf

Moveto Field NCAMPO

Release Procs Carrega_Endereco 
EndProc ; (Enderecos)

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *   
;*******************************************************************************   
Proc Endereco_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp, cidufok, REG_UF, REG_CIDADE, wok  

TECLA   =""
MSGCAMPO=""
Temp=True

If Disparo="OPEN"
   then
        TiraSombraShowDialog()

        switch
          case ShowDialog_EnderecoTipo="ENTREGA" :
            if isblank(VSD_E_CEP)
               then Campo="E_CEP"
               else Campo="E_Endereco"
            endif            
           
          case ShowDialog_EnderecoTipo="RETIRADA":
            if isblank(VSD_R_CEP)
               then Campo="R_CEP"
               else Campo="R_Endereco"
            endif            
           
          case ShowDialog_EnderecoTipo="COBRANCA":
            if isblank(VSD_C_CEP)
               then Campo="C_CEP"
               else Campo="C_Endereco"
            endif            
          
        endswitch
endif    

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9 Or
           Evento["KeyCode"] = -15:
           Temp=False
      Case Evento["KeyCode"] = -59:
           If Campo="E_Cidade" Or
              Campo="E_UF"     Or
              Campo="C_Cidade" Or
              Campo="C_UF"     Or
              Campo="R_Cidade" Or
              Campo="R_UF"
              Then 
                   Dynarray WinArray5[]
                   Window Handle Dialog to JANELA
                   Window GetAttributes JANELA To WinArray5
                   WinArray5["FLOATING"]=False
                   Window SetAttributes JANELA From WinArray5

                   If Campo="E_Cidade" Then Moveto [Cidade de Entrega ] EndIf
                   If Campo="E_UF"     Then Moveto [UF de Entrega     ] EndIf
                   If Campo="C_Cidade" Then Moveto [Cidade de Cobranca] EndIf
                   If Campo="C_UF"     Then Moveto [UF de Cobranca    ] EndIf
                   If Campo="R_Cidade" Then Moveto [Cidade de Retirada] EndIf
                   If Campo="R_UF"     Then Moveto [UF de Retirada    ] EndIf

                   if ConsultaF1()
                      then
                           Switch
                             Case Campo="E_Cidade": VSD_E_Cidade=Reg_ConsultaF1["Cidade"]
                                                    VSD_E_UF    =Reg_ConsultaF1["UF"    ]

                             Case Campo="E_UF"    : VSD_E_UF    =Reg_ConsultaF1["UF"    ]
                             
                             Case Campo="C_Cidade": VSD_C_Cidade=Reg_ConsultaF1["Cidade"]
                                                    VSD_C_UF    =Reg_ConsultaF1["UF"    ]
                                                    
                             Case Campo="C_UF"    : VSD_C_UF    =Reg_ConsultaF1["UF"    ]

                             Case Campo="R_Cidade": VSD_R_Cidade=Reg_ConsultaF1["Cidade"]
                                                    VSD_R_UF    =Reg_ConsultaF1["UF"    ]

                             Case Campo="R_UF"    : VSD_R_UF    =Reg_ConsultaF1["UF"    ]
                             
                           EndSwitch
                   endif   

                   Window Select JANELA
                   WinArray5["FLOATING"]=True
                   Window SetAttributes JANELA From WinArray5

                   Echo Normal
                   Echo Off
           EndIf
      Case Evento["KeyCode"] = -81:
           switch
              case ShowDialog_EnderecoTipo="ENTREGA" : 
                Switch
                   Case Campo="E_Endereco":  VSD_E_Endereco=ControlValue("E_Endereco")
                   Case Campo="E_CEP"     :  VSD_E_CEP     =ControlValue("E_CEP")
                   Case Campo="E_Bairro"  :  VSD_E_Bairro  =ControlValue("E_Bairro")
                   Case Campo="E_Cidade"  :  VSD_E_Cidade  =ControlValue("E_Cidade")
                   Case Campo="E_UF"      :  VSD_E_UF      =ControlValue("E_UF")
                   Case Campo="E_CNPJ_CPF":  VSD_E_CNPJ_CPF=ControlValue("E_CNPJ_CPF")
                   Case Campo="E_Razao"   :  VSD_E_Razao   =ControlValue("E_Razao")
                   Case Campo="E_IE"      :  VSD_E_IE      =ControlValue("E_IE")
                   Case Campo="E_Fone"    :  VSD_E_Fone    =ControlValue("E_Fone")
                   Case Campo="E_Email"   :  VSD_E_Email   =ControlValue("E_Email")
                endSwitch

              case ShowDialog_EnderecoTipo="RETIRADA":  
                Switch
                   Case Campo="R_Endereco":  VSD_R_Endereco=ControlValue("R_Endereco")
                   Case Campo="R_CEP"     :  VSD_R_CEP     =ControlValue("R_CEP")
                   Case Campo="R_Bairro"  :  VSD_R_Bairro  =ControlValue("R_Bairro")
                   Case Campo="R_Cidade"  :  VSD_R_Cidade  =ControlValue("R_Cidade")
                   Case Campo="R_UF"      :  VSD_R_UF      =ControlValue("R_UF")
                   Case Campo="R_CNPJ_CPF":  VSD_R_CNPJ_CPF=ControlValue("R_CNPJ_CPF")
                   Case Campo="R_Razao"   :  VSD_R_Razao   =ControlValue("R_Razao")
                   Case Campo="R_IE"      :  VSD_R_IE      =ControlValue("R_IE")
                   Case Campo="R_Fone"    :  VSD_R_Fone    =ControlValue("R_Fone")
                   Case Campo="R_Email"   :  VSD_R_Email   =ControlValue("R_Email")
                endSwitch

              case ShowDialog_EnderecoTipo="COBRANCA": 
                Switch
                   Case Campo="C_Endereco":  VSD_C_Endereco=ControlValue("C_Endereco")
                   Case Campo="C_CEP"     :  VSD_C_CEP     =ControlValue("C_CEP")
                   Case Campo="C_Bairro"  :  VSD_C_Bairro  =ControlValue("C_Bairro")
                   Case Campo="C_Cidade"  :  VSD_C_Cidade  =ControlValue("C_Cidade")
                   Case Campo="C_UF"      :  VSD_C_UF      =ControlValue("C_UF")
                endSwitch

           EndSwitch
           AcceptDialog

      Case Evento["KeyCode"] = -73:
            switch
              case ShowDialog_EnderecoTipo="RETIRADA": CancelDialog 
              case ShowDialog_EnderecoTipo="COBRANCA": CancelDialog
            endswitch

      Case Evento["KeyCode"] = -66:
           If Campo="E_CEP"
              Then VSD_E_Endereco= "O MESMO"
                   VSD_E_Bairro  = ""
                   VSD_E_Cidade  = ""
                   VSD_E_UF      = ""
                   VSD_E_CEP     = ""
                   VSD_E_CNPJ_CPF=""
                   VSD_E_Razao   =""
                   VSD_E_Fone    =""
                   VSD_E_Email   =""
                   VSD_E_IE      =""
           EndIf
           If Campo="R_CEP"
              Then VSD_R_Endereco= "O MESMO"
                   VSD_R_Bairro  = ""
                   VSD_R_Cidade  = ""
                   VSD_R_UF      = ""
                   VSD_R_CEP     = ""
                   VSD_R_CNPJ_CPF=""
                   VSD_R_Razao   =""
                   VSD_R_Fone    =""
                   VSD_R_Email   =""
                   VSD_R_IE      =""
           EndIf
           If Campo="C_CEP"
              Then VSD_C_Endereco = "O MESMO"
                   VSD_C_Bairro   = ""
                   VSD_C_Cidade   = ""
                   VSD_C_UF       = ""
                   VSD_C_CEP      = ""
           EndIf
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="E_CEP"     :   Carrega_Endereco("ATUALIZA")
                                        CancelDialog
             Case Campo="E_Endereco":   Campo="E_CEP"
             Case Campo="E_Bairro"  :   Campo="E_Endereco"
             Case Campo="E_Cidade"  :   Campo="E_Bairro"
             Case Campo="E_UF"      :   Campo="E_Cidade"
             Case Campo="E_CNPJ_CPF":   Campo="E_UF"
             Case Campo="E_Razao"   :   Campo="E_CNPJ_CPF"
             Case Campo="E_IE"      :   Campo="E_Razao"
             Case Campo="E_Fone"    :   Campo="E_IE"
             Case Campo="E_Email"   :   Campo="E_Fone"

             Case Campo="R_CEP"     :   CancelDialog
             Case Campo="R_Endereco":   Campo="R_CEP"
             Case Campo="R_Bairro"  :   Campo="R_Endereco"
             Case Campo="R_Cidade"  :   Campo="R_Bairro"
             Case Campo="R_UF"      :   Campo="R_Cidade"
             Case Campo="R_CNPJ_CPF":   Campo="R_UF"
             Case Campo="R_Razao"   :   Campo="R_CNPJ_CPF"
             Case Campo="R_IE"      :   Campo="R_Razao"
             Case Campo="R_Fone"    :   Campo="R_IE"
             Case Campo="R_Email"   :   Campo="R_Fone"

             Case Campo="C_CEP"     :   CancelDialog
             Case Campo="C_Endereco":   Campo="C_CEP"
             Case Campo="C_Bairro"  :   Campo="C_Endereco"
             Case Campo="C_Cidade"  :   Campo="C_Bairro"
             Case Campo="C_UF"      :   Campo="C_Cidade"

           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch

             ;-- Entrega -------------------------------------------------------
             Case Campo="E_CEP": 
                  VSD_E_CEP=ControlValue("E_CEP")
                  If IsBlank(VSD_E_Endereco) And
                     IsBlank(VSD_E_Bairro)   And
                     IsBlank(VSD_E_Cidade)   And
                     IsBlank(VSD_E_UF)
                     Then ALTERA_ENDERECO = True
                     ELse ALTERA_ENDERECO = False
                  EnDIf
                  If Not ALTERA_ENDERECO
                     Then ConfGeral("Deseja carregar o endere‡o p/ o CEP informado?")
                          If Ok="S"
                             Then ALTERA_ENDERECO = True
                          EndIf
                  EndIf
                  If Not Isblank(VSD_E_CEP) And ALTERA_ENDERECO
                     Then
                          Busca_Cep(VSD_E_CEP)
                          VSD_E_Endereco = BUSCA_CEP_ENDERECO
                          VSD_E_Bairro   = BUSCA_CEP_BAIRRO
                          VSD_E_Cidade   = BUSCA_CEP_CIDADE
                          VSD_E_UF       = BUSCA_CEP_UF
                          Release Vars BUSCA_CEP_ENDERECO, BUSCA_CEP_BAIRRO, BUSCA_CEP_CIDADE, BUSCA_CEP_UF, BUSCA_CEP_PAIS
                  EndIf
                  Campo="E_Endereco"
             Case Campo="E_Endereco":
                  VSD_E_Endereco=ControlValue("E_Endereco")
                  Campo="E_Bairro"
             Case Campo="E_Bairro":
                  VSD_E_Bairro=ControlValue("E_Bairro")
                  Campo="E_Cidade"
             Case Campo="E_Cidade": Campo="E_UF"
                  VSD_E_Cidade=ControlValue("E_Cidade")
             Case Campo="E_UF":
                  VSD_E_UF=ControlValue("E_UF")
                  
                  cidufok=true
                  If Not IsBlank(VSD_E_UF)
                     Then GetRecord "\\Sistemas\\Vendas\\Estados" VSD_E_UF To REG_UF
                          If Not RetVal
                             Then fastmsg("UF invalida !")
                                  cidufok=false
                             Else If Not IsBlank(VSD_E_Cidade)
                                     Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_E_Cidade,VSD_E_UF To REG_CIDADE 
                                          If Not RetVal
                                             Then fastmsg("Cidade/UF invalida!")
                                                  cidufok=false
                                          EndIf
                                  EndIf
                          EndIf
                  EndIf
                  if cidufok
                     then Campo="E_CNPJ_CPF"      
                  EndIf

             Case Campo="E_CNPJ_CPF":
                  VSD_E_CNPJ_CPF=ControlValue("E_CNPJ_CPF")
                  wok=true
                  If Not IsBlank(VSD_E_CNPJ_CPF)
                     Then If Tipo_CGC_CPF(VSD_E_CNPJ_CPF)<>"CGC" And
                             Tipo_CGC_CPF(VSD_E_CNPJ_CPF)<>"CPF"
                             Then Mensagem("CNPJ/CPF Inv lido !")
                                  wok=false
                          EndIf
                  EndIf
                  If wok
                     then Campo="E_Razao"
                  endif

             Case Campo="E_Razao":
                  VSD_E_Razao=ControlValue("E_Razao")
                  Campo="E_IE"

             Case Campo="E_IE":
                  VSD_E_IE=ControlValue("E_IE")
                  Campo="E_Fone"

             Case Campo="E_Fone":
                  VSD_E_Fone=ControlValue("E_Fone")
                  Campo="E_Email"

             Case Campo="E_Email":
                  VSD_E_Email=ControlValue("E_Email")
                  AcceptDialog


             ;-- Retirada ------------------------------------------------------
             Case Campo="R_CEP": 
                  VSD_R_CEP=ControlValue("R_CEP")
                  If IsBlank(VSD_R_Endereco) And
                     IsBlank(VSD_R_Bairro)   And
                     IsBlank(VSD_R_Cidade)   And
                     IsBlank(VSD_R_UF)
                     Then ALTERA_ENDERECO = True
                     ELse ALTERA_ENDERECO = False
                  EnDIf
                  If Not ALTERA_ENDERECO
                     Then ConfGeral("Deseja carregar o endere‡o p/ o CEP informado?")
                          If Ok="S"
                             Then ALTERA_ENDERECO = True
                          EndIf
                  EndIf
                  If Not Isblank(VSD_R_CEP) And ALTERA_ENDERECO
                     Then Busca_Cep(VSD_R_CEP)
                          VSD_R_Endereco = BUSCA_CEP_ENDERECO
                          VSD_R_Bairro   = BUSCA_CEP_BAIRRO
                          VSD_R_Cidade   = BUSCA_CEP_CIDADE
                          VSD_R_UF       = BUSCA_CEP_UF
                          Release Vars BUSCA_CEP_ENDERECO, BUSCA_CEP_BAIRRO, BUSCA_CEP_CIDADE, BUSCA_CEP_UF, BUSCA_CEP_PAIS
                  EndIf
                  Campo="R_Endereco"
             Case Campo="R_Endereco":
                  VSD_R_Endereco=ControlValue("R_Endereco")
                  Campo="R_Bairro"
             Case Campo="R_Bairro":
                  VSD_R_Bairro=ControlValue("R_Bairro")
                  Campo="R_Cidade"
             Case Campo="R_Cidade": Campo="R_UF"
                  VSD_R_Cidade=ControlValue("R_Cidade")
             Case Campo="R_UF":
                  VSD_R_UF=ControlValue("R_UF")
                  
                  cidufok=true
                  If Not IsBlank(VSD_R_UF)
                     Then GetRecord "\\Sistemas\\Vendas\\Estados" VSD_R_UF To REG_UF
                          If Not RetVal
                             Then fastmsg("UF invalida !")
                                  cidufok=false
                             Else If Not IsBlank(VSD_R_Cidade)
                                     Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_R_Cidade,VSD_R_UF To REG_CIDADE 
                                          If Not RetVal
                                             Then fastmsg("Cidade/UF invalida!")
                                                  cidufok=false
                                          EndIf
                                  EndIf
                          EndIf
                  EndIf
                  if cidufok
                     then Campo="R_CNPJ_CPF"      
                  EndIf

             Case Campo="R_CNPJ_CPF":
                  VSD_R_CNPJ_CPF=ControlValue("R_CNPJ_CPF")
                  wok=true
                  If Not IsBlank(VSD_R_CNPJ_CPF)
                     Then If Tipo_CGC_CPF(VSD_R_CNPJ_CPF)<>"CGC" And
                             Tipo_CGC_CPF(VSD_R_CNPJ_CPF)<>"CPF"
                             Then Mensagem("CNPJ/CPF Inv lido !")
                                  wok=false
                          EndIf
                  EndIf
                  If wok
                     then Campo="R_Razao"
                  endif

             Case Campo="R_Razao":
                  VSD_R_Razao=ControlValue("R_Razao")
                  Campo="R_IE"

             Case Campo="R_IE":
                  VSD_R_IE=ControlValue("R_IE")
                  Campo="R_Fone"

             Case Campo="R_Fone":
                  VSD_R_Fone=ControlValue("R_Fone")
                  Campo="R_Email"

             Case Campo="R_Email":
                  VSD_R_Email=ControlValue("R_Email")
                  AcceptDialog


             ;-- Cobran‡a ------------------------------------------------------
             Case Campo="C_CEP":
                  VSD_C_CEP=ControlValue("C_CEP")
                  If IsBlank(VSD_C_Endereco) And
                     IsBlank(VSD_C_Bairro)   And
                     IsBlank(VSD_C_Cidade)   And
                     IsBlank(VSD_C_UF)
                     Then ALTERA_ENDERECO = True
                     ELse ALTERA_ENDERECO = False
                  EnDIf
                  If Not ALTERA_ENDERECO
                     Then ConfGeral("Deseja carregar o endere‡o p/ o CEP informado?")
                          If Ok="S"
                             Then ALTERA_ENDERECO = True
                          EndIf
                  EndIf
                  If Not Isblank(VSD_C_CEP) And ALTERA_ENDERECO
                     Then Busca_Cep(VSD_C_CEP)
                          VSD_C_Endereco = BUSCA_CEP_ENDERECO
                          VSD_C_Bairro   = BUSCA_CEP_BAIRRO
                          VSD_C_Cidade   = BUSCA_CEP_CIDADE
                          VSD_C_UF       = BUSCA_CEP_UF
                          Release Vars BUSCA_CEP_ENDERECO, BUSCA_CEP_BAIRRO, BUSCA_CEP_CIDADE, BUSCA_CEP_UF, BUSCA_CEP_PAIS
                  EndIf
                  Campo="C_Endereco"                 
             Case Campo="C_Endereco":
                  VSD_C_Endereco=ControlValue("C_Endereco")
                  Campo="C_Bairro"     
             Case Campo="C_Bairro":
                  VSD_C_Bairro=ControlValue("C_Bairro")
                  Campo="C_Cidade"
             Case Campo="C_Cidade":
                  VSD_C_Cidade=ControlValue("C_Cidade")
                  Campo="C_UF"
             Case Campo="C_UF":
                  VSD_C_UF=ControlValue("C_UF")
                  
                  cidufok=true
                  If Not IsBlank(VSD_C_UF)
                     Then GetRecord "\\Sistemas\\Vendas\\Estados" VSD_C_UF To REG_UF
                          If Not RetVal
                             Then fastmsg("UF invalida !")
                                  cidufok=false
                             Else If Not IsBlank(VSD_C_Cidade)
                                     Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_C_Cidade,VSD_C_UF To REG_CIDADE 
                                          If Not RetVal
                                             Then fastmsg("Cidade/UF invalida!")
                                                  cidufok=false
                                          EndIf
                                  EndIf
                          EndIf
                  EndIf
                  
                  if cidufok
                     then AcceptDialog      
                  EndIf
           EndSwitch
   EndSwitch
EndIf
RefreshDialog
SelectControl Campo

TECLA="Esc=Retornar  "
MSGCAMPO=MSGCAMPO+rtrim(substr(Campo,3,30))

If Campo="E_Endereco" Or
   Campo="R_Endereco" Or
   Campo="C_Endereco"
   Then 
        MSGCAMPO=MSGCAMPO+" = Logradouro, N£mero, Complemento"
EndIf

If Campo="E_Cidade" Or
   Campo="E_UF"     Or
   Campo="R_Cidade" Or
   Campo="R_UF"     Or
   Campo="C_Cidade" Or
   Campo="C_UF"
   Then 
        MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
EndIf

If Campo="E_CEP" Or
   Campo="R_CEP" Or
   Campo="C_CEP"
   Then 
        MSGCAMPO=MSGCAMPO+", [F8]=\"O Mesmo\""
EndIf

switch
  case ShowDialog_EnderecoTipo="ENTREGA" : TECLA=TECLA+"                                                 PgDn=[Retirada]"
  case ShowDialog_EnderecoTipo="RETIRADA": TECLA=TECLA+"                                 PgUp=[Entrega]  PgDn=[Cobran‡a]"
  case ShowDialog_EnderecoTipo="COBRANCA": TECLA=TECLA+"                                 PgUp=[Retirada] PgDn=Finalizar "
endswitch

MontaRodapeSD(MSGCAMPO, TECLA)

Mouse Hide
RefreshDialog
Return Temp

EndProc   ; (Endereco_Dialog)

;*******************************************************************************
;* Carrega Enderecos                                                           *
;*******************************************************************************
Proc Carrega_Endereco(PARAM)
Private PARAM, regdestinat, REG_ENDCOB

switch
  case PARAM="CARREGA":
    VSD_E_Endereco=""
    VSD_E_Bairro  =""
    VSD_E_Cidade  =""
    VSD_E_UF      =""
    VSD_E_CEP     =""
    VSD_E_CNPJ_CPF=""
    VSD_E_Razao   =""
    VSD_E_Fone    =""
    VSD_E_Email   =""
    VSD_E_IE      =""
    
    VSD_R_Endereco=""
    VSD_R_Bairro  =""
    VSD_R_Cidade  =""
    VSD_R_UF      =""
    VSD_R_CEP     =""
    VSD_R_CNPJ_CPF=""
    VSD_R_Razao   =""
    VSD_R_Fone    =""
    VSD_R_Email   =""
    VSD_R_IE      =""
    
    VSD_C_Endereco=""
    VSD_C_Bairro  =""
    VSD_C_Cidade  =""
    VSD_C_UF      =""
    VSD_C_CEP     =""

    VSDGENDENT    =""
    VSDGENDCOB    =""
    VSDGENDRET    =""
    
    If CHAVEC=1
       Then GetRecord "\\Sistemas\\Cadastro\\End_Cob" [FaturaC->Codigo] To REG_ENDCOB
            If RetVal
               Then 
                    VSD_E_Endereco=REG_ENDCOB["Endereco de Entrega"]
                    VSD_E_Bairro  =REG_ENDCOB["Bairro de Entrega"]
                    VSD_E_CEP     =REG_ENDCOB["CEP de Entrega"]
                    VSD_E_Cidade  =REG_ENDCOB["Cidade de Entrega"]
                    VSD_E_UF      =REG_ENDCOB["UF de Entrega"]

                    VSD_E_CNPJ_CPF=[FaturaC->CGC]
                    VSD_E_Razao   =[FaturaC->Razao Social]
                    VSD_E_Fone    =[FaturaC->Telefone]
                    VSD_E_IE      =[FaturaC->IE]

                    GetRecord "\\Sistemas\\Cadastro\\Destinat" [FaturaC->Codigo] To regdestinat
                    If RetVal
                       Then VSD_E_Email   =regdestinat["Endereco_Eletronico"]
                    endif
            
                    VSD_C_Endereco=REG_ENDCOB["Endereco de Cobranca"]
                    VSD_C_Bairro  =REG_ENDCOB["Bairro de Cobranca"]
                    VSD_C_CEP     =REG_ENDCOB["CEP de Cobranca"]
                    VSD_C_Cidade  =REG_ENDCOB["Cidade de Cobranca"]
                    VSD_C_UF      =REG_ENDCOB["UF de Cobranca"]
            EndIf
       Else GetRecord "\\Sistemas\\Vendas\\FaturaCC" [FaturaC->Numero da OF] To REG_ENDCOB
            If RetVal
               Then 
                    VSD_E_Endereco=REG_ENDCOB["Endereco de Entrega"]
                    VSD_E_Bairro  =REG_ENDCOB["Bairro de Entrega"]
                    VSD_E_CEP     =REG_ENDCOB["CEP de Entrega"]
                    VSD_E_Cidade  =REG_ENDCOB["Cidade de Entrega"]
                    VSD_E_UF      =REG_ENDCOB["UF de Entrega"]
                    VSD_E_CNPJ_CPF=REG_ENDCOB["CGC Recebedor"]
                    VSD_E_Razao   =REG_ENDCOB["Razao Social Recebedor"]
                    VSD_E_Fone    =REG_ENDCOB["Telefone Recebedor"]
                    VSD_E_Email   =REG_ENDCOB["Email Recebedor"]
                    VSD_E_IE      =REG_ENDCOB["IE Recebedor"]
            
                    VSD_R_Endereco=REG_ENDCOB["Endereco de Retirada"]
                    VSD_R_Bairro  =REG_ENDCOB["Bairro de Retirada"]
                    VSD_R_CEP     =REG_ENDCOB["CEP de Retirada"]
                    VSD_R_Cidade  =REG_ENDCOB["Cidade de Retirada"]
                    VSD_R_UF      =REG_ENDCOB["UF de Retirada"]
                    VSD_R_CNPJ_CPF=REG_ENDCOB["CGC Expedidor"]
                    VSD_R_Razao   =REG_ENDCOB["Razao Social Expedidor"]
                    VSD_R_Fone    =REG_ENDCOB["Telefone Expedidor"]
                    VSD_R_Email   =REG_ENDCOB["Email Expedidor"]
                    VSD_R_IE      =REG_ENDCOB["IE Expedidor"]
            
                    VSD_C_Endereco=REG_ENDCOB["Endereco de Cobranca"]
                    VSD_C_Bairro  =REG_ENDCOB["Bairro de Cobranca"]
                    VSD_C_CEP     =REG_ENDCOB["CEP de Cobranca"]
                    VSD_C_Cidade  =REG_ENDCOB["Cidade de Cobranca"]
                    VSD_C_UF      =REG_ENDCOB["UF de Cobranca"]
            EndIf 
    EndIf  
    
  otherwise           :
    VSDGENDCOB    =Format("W43",VSD_C_Endereco)+        VSD_C_Bairro +"\n"+
                   Format("W13",VSD_C_CEP)+Format("W23",VSD_C_Cidade +"/"+VSD_C_UF)
    
    VSDGENDENT    =Format("W43",VSD_E_Endereco)+        VSD_E_Bairro +"\n"+
                   Format("W13",VSD_E_CEP)+Format("W23",VSD_E_Cidade +"/"+VSD_E_UF)+"       "+VSD_E_Razao
    
    VSDGENDRET    =Format("W43",VSD_R_Endereco)+        VSD_R_Bairro +"\n"+
                   Format("W13",VSD_R_CEP)+Format("W23",VSD_R_Cidade +"/"+VSD_R_UF)+"       "+VSD_R_Razao
    
endswitch

EndProc ;Carrega_Endereco()
                  
;*******************************************************************************
;* Digitacao de Enderecos - Cobranca                                           *
;*******************************************************************************
Proc ShowDialog_EnderecoEntrega()
Private ATUALIZA_ENDERECO

MSGCAMPO=""

Showdialog "Endere‡os Complementares" Proc "Endereco_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","PGDN",-81,"F8"
     @ 09,0 height 14 width 80

   @ 0,0 ?? "[Entrega] [Retirada] [Cobran‡a]"
   paintcanvas attribute 26 0, 0, 0, 8 

   @ 1,1 ?? "Local de Entrega/Recebedor"
   paintcanvas attribute 26 1,0, 1, 77
   
   Label  @ 02,12 "CEP" for "E_CEP"
   Accept @ 03,12  Width 13 "A10" picture "##.###-###" Tag "E_CEP" to VSD_E_CEP
   Label  @ 02,26 "Endere‡o" for "E_Endereco"
   Accept @ 03,26  Width 43 "A40" picture "!*!" Tag "E_Endereco" to VSD_E_Endereco

   Label  @ 04,02 "Bairro" for "E_Bairro"
   Accept @ 05,02  Width 23 "A20" picture "!*!" Tag "E_Bairro" to VSD_E_Bairro
   Label  @ 04,26 "Cidade" for "E_Cidade"
   Accept @ 05,26  Width 23 "A20" picture "!*!" Tag "E_Cidade" to VSD_E_Cidade
   Label  @ 04,50 "UF" for "E_UF"
   Accept @ 05,50  Width 05 "A2" picture "!*!" Tag "E_UF" to VSD_E_UF

   Label  @ 06,04 "CNPJ/CPF" for "E_CNPJ_CPF"
   Accept @ 07,04  Width 21 "A18" picture "##[.]###.###/####-##,###.###.###-##" Tag "E_CNPJ_CPF" to VSD_E_CNPJ_CPF

   Label  @ 06,26 "RazÆo Social/Nome" for "E_Razao"
   Accept @ 07,26  Width 43 "A40" picture "!*!" Tag "E_Razao" to VSD_E_Razao

   Label  @ 08,07 "IE" for "E_IE"
   Accept @ 09,07  Width 18 "A15" picture "!*!" Tag "E_IE" to VSD_E_IE

   Label  @ 08,26 "Telefone" for "E_Fone"
   Accept @ 09,26  Width 23 "A20" picture "!*!" Tag "E_Fone" to VSD_E_Fone

   Label  @ 10,02 "Email" for "E_Email"
   Accept @ 11,02  Width 67 "A60"               Tag "E_Email" to VSD_E_Email

Enddialog
return retval
EndProc  ;ShowDialog_EnderecoEntrega()

;*******************************************************************************
;* Digitacao de Enderecos - Retirada                                           *
;*******************************************************************************
Proc ShowDialog_EnderecoRetirada()
Private ATUALIZA_ENDERECO

MSGCAMPO=""

Showdialog "Endere‡os Complementares" Proc "Endereco_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","PGDN",-81,"F8","PGUP",-73
     @ 09,0 height 14 width 80

   @ 0,0 ?? "[Entrega] [Retirada] [Cobran‡a]"
   paintcanvas attribute 26 0,10, 0, 19

   @ 1,11 ?? "Local de Retirada/Expedidor "
   paintcanvas attribute 26 1,0, 1, 77

   Label  @ 02,12 "CEP" for "R_CEP"
   Accept @ 03,12  Width 13 "A10" picture "##.###-###" Tag "R_CEP" to VSD_R_CEP
   Label  @ 02,26 "Endere‡o" for "R_Endereco"
   Accept @ 03,26  Width 43 "A40" picture "!*!" Tag "R_Endereco" to VSD_R_Endereco

   Label  @ 04,02 "Bairro" for "R_Bairro"
   Accept @ 05,02  Width 23 "A20" picture "!*!" Tag "R_Bairro" to VSD_R_Bairro
   Label  @ 04,26 "Cidade" for "R_Cidade"
   Accept @ 05,26  Width 23 "A20" picture "!*!" Tag "R_Cidade" to VSD_R_Cidade
   Label  @ 04,50 "UF" for "R_UF"
   Accept @ 05,50  Width 05 "A2" picture "!*!" Tag "R_UF" to VSD_R_UF

   Label  @ 06,04 "CNPJ/CPF" for "R_CNPJ_CPF"
   Accept @ 07,04  Width 21 "A18" picture "##[.]###.###/####-##,###.###.###-##" Tag "R_CNPJ_CPF" to VSD_R_CNPJ_CPF

   Label  @ 06,26 "RazÆo Social/Nome" for "R_Razao"
   Accept @ 07,26  Width 43 "A40" picture "!*!" Tag "R_Razao" to VSD_R_Razao

   Label  @ 08,07 "IE" for "R_IE"
   Accept @ 09,07  Width 18 "A15" picture "!*!" Tag "R_IE" to VSD_R_IE

   Label  @ 08,26 "Telefone" for "R_Fone"
   Accept @ 09,26  Width 23 "A20" picture "!*!" Tag "R_Fone" to VSD_R_Fone

   Label  @ 10,02 "Email" for "R_Email"
   Accept @ 11,02  Width 67 "A60"               Tag "R_Email" to VSD_R_Email

Enddialog
return retval
EndProc  ;ShowDialog_EnderecoRetirada()

;*******************************************************************************
;* Digitacao de Enderecos - Cobranca                                           *
;*******************************************************************************
Proc ShowDialog_EnderecoCobranca()
Private ATUALIZA_ENDERECO

MSGCAMPO=""

Showdialog "Endere‡os Complementares" Proc "Endereco_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","PGDN",-81,"F8","PGUP",-73
     @ 09,0 height 14 width 80

   @ 0,0 ?? "[Entrega] [Retirada] [Cobran‡a]"
   paintcanvas attribute 26 0,21, 0, 30

   @ 1,22 ?? "Local de Cobran‡a "
   paintcanvas attribute 26 1,0, 1, 77

   Label  @ 02,12 "CEP" for "C_CEP"
   Accept @ 03,12  Width 13 "A10" picture "##.###-###" Tag "C_CEP" to VSD_C_CEP
   Label  @ 02,26 "Endere‡o" for "C_Endereco"
   Accept @ 03,26  Width 43 "A40" picture "!*!" Tag "C_Endereco" to VSD_C_Endereco

   Label  @ 04,02 "Bairro" for "C_Bairro"
   Accept @ 05,02  Width 23 "A20" picture "!*!" Tag "C_Bairro" to VSD_C_Bairro
   Label  @ 04,26 "Cidade" for "C_Cidade"
   Accept @ 05,26  Width 23 "A20" picture "!*!" Tag "C_Cidade" to VSD_C_Cidade
   Label  @ 04,50 "UF" for "C_UF"
   Accept @ 05,50  Width 05 "A2" picture "!*!" Tag "C_UF" to VSD_C_UF

Enddialog
return retval
EndProc  ;ShowDialog_EnderecoCobranca()

;*******************************************************************************
;* Digitacao de Enderecos                                                      *
;*******************************************************************************
Proc ShowDialog_Endereco()
Private ATUALIZA_ENDERECO, TabAnt, CampoAnt, execender

Echo Normal
Echo Off
Mouse Hide

TabAnt  =table()
CampoAnt=Field()

Carrega_Endereco("CARREGA")

Moveto "FaturaCC"
Moveto "FaturaCC" SetaCorRegistro("Invisivel")

ShowDialog_EnderecoTipo="ENTREGA"
execender              =true
while execender

  switch
    case ShowDialog_EnderecoTipo="ENTREGA" : 
      if ShowDialog_EnderecoEntrega()  
         then ShowDialog_EnderecoTipo="RETIRADA"
         else execender=false
      endif
  
    case ShowDialog_EnderecoTipo="RETIRADA": 
      if ShowDialog_EnderecoRetirada() 
         then ShowDialog_EnderecoTipo="COBRANCA" 
         else ShowDialog_EnderecoTipo="ENTREGA"
      endif
  
    case ShowDialog_EnderecoTipo="COBRANCA": 
      if ShowDialog_EnderecoCobranca() 
         then 
              [Endereco de Entrega   ]=VSD_E_Endereco
              [Bairro de Entrega     ]=VSD_E_Bairro
              [Cidade de Entrega     ]=VSD_E_Cidade
              [CEP de Entrega        ]=VSD_E_CEP
              [UF de Entrega         ]=VSD_E_UF
              [CGC Recebedor         ]=VSD_E_CNPJ_CPF
              [Razao Social Recebedor]=VSD_E_Razao
              [IE Recebedor          ]=VSD_E_IE   
              [Telefone Recebedor    ]=VSD_E_Fone 
              [Email Recebedor       ]=VSD_E_Email 

         
              [Endereco de Retirada  ]=VSD_R_Endereco
              [Bairro de Retirada    ]=VSD_R_Bairro
              [Cidade de Retirada    ]=VSD_R_Cidade
              [CEP de Retirada       ]=VSD_R_CEP
              [UF de Retirada        ]=VSD_R_UF
              [CGC Expedidor         ]=VSD_R_CNPJ_CPF
              [Razao Social Expedidor]=VSD_R_Razao
              [IE Expedidor          ]=VSD_R_IE   
              [Telefone Expedidor    ]=VSD_R_Fone 
              [Email Expedidor       ]=VSD_R_Email 
         
              [Endereco de Cobranca  ]=VSD_C_Endereco
              [Bairro de Cobranca    ]=VSD_C_Bairro
              [Cidade de Cobranca    ]=VSD_C_Cidade
              [CEP de Cobranca       ]=VSD_C_CEP
              [UF de Cobranca        ]=VSD_C_UF
              unlockrecord
         
              Carrega_Endereco("ATUALIZA")         
         
              execender=false
                     
         else ShowDialog_EnderecoTipo="RETIRADA"
      endif
  endswitch
        
endwhile

Echo Off
Mouse Show

Moveto TabAnt
Moveto Field CampoAnt

Release Procs Endereco_Dialog, Carrega_Endereco, ShowDialog_EnderecoEntrega, ShowDialog_EnderecoRetirada, ShowDialog_EnderecoCobranca 

EndProc  ;ShowDialog_Endereco()




;-------------------------------------------------------------------------------


;*******************************************************************************
;* Rotina para Verificar Representante -> Inativo                              *
;*******************************************************************************
Proc Verifica_Representante(PARAM)
Private TEMP,PARAM              

TEMP = True
GetRecord "\\Sistemas\\Cadastro\\Represen" PARAM To REP_INATIVO
If RetVal
   Then If REP_INATIVO["Inativo Represent"]="S"
           Then TEMP = False
        EndIf
EndIf    

Release Vars REP_INATIVO      
Return TEMP 

EndProc ;Verifica_Representante()

;------- Justificativa Contingencia --------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc JC_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp  
Temp      = True
TECLA     = ""
MSG_CAMPO = ""

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_DTINI"         : Campo="NO"
            Case Campo="TG_HRINI"         : Campo="TG_DTINI"
            Case Campo="TG_JUST"          : Campo="TG_HRINI"
            Case Campo="YES" Or Campo="NO": Campo="TG_DTINI"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_DTINI"       : Campo="TG_HRINI" 
                    Case Campo="TG_HRINI"       : Campo="TG_JUST" 
                    Case Campo="TG_JUST"        :
                         VSDGJUST=Tira_CharEspecial(ControlValue("TG_JUST"))
                         If Len(VSDGJUST)>=15
                            Then Campo="YES" 
                            Else Mensagem("A justificativa deve ter no m¡nimo 15 d¡gitos!") 
                         EndIf
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="TG_DTINI":  MSG_CAMPO="Informe a Data de In¡cio da Contingˆncia"
  Case Campo="TG_HRINI":  MSG_CAMPO="Informe a Hora de In¡cio da Contingˆncia"
  Case Campo="TG_JUST" :  MSG_CAMPO="Informe a Justificativa da Contingˆncia"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc     ;  (JC_Dialog)

;*******************************************************************************
;* Show Dialog JC_Digita                                                       *
;*******************************************************************************
Proc JC_Show()
Private TabAnt, CampoAnt

TabAnt  =Table()
CampoAnt=Field()

Echo Normal
Echo Off
Mouse Hide

LimpAguarde()
MSGCAMPO=""

Moveto "FaturaCC"  
VSDGDTINI = [Data_Inicio_Contingencia]
VSDGHRINI = [Hora_Inicio_Contingencia]
VSDGJUST  = [Justificativa           ]

ShowDialog "Justificativa de Contingˆncia" Proc "JC_Dialog"
Trigger "OPEN","ARRIVE"
Key "F1","ENTER","ESC",
    -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
@ 10,08   Height 11 Width 75

  Label  @ 00,00 "Data de In¡cio da Contingˆncia" For "TG_DTINI"
  Accept @ 01,01 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI

  Label  @ 02,00 "Hora de In¡cio da Contingˆncia" For "TG_HRINI"
  Accept @ 03,01 Width 8 "A5"  Picture "##:##" Tag "TG_HRINI" To VSDGHRINI 
  
  Label  @ 04,00 "Justificativa da Contingˆncia" For "TG_JUST"
  Accept @ 05,01 Width 71 "A255"  Picture "!*!" Tag "TG_JUST" To VSDGJUST  
  
  Pushbutton @ 07,28 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
  Pushbutton @ 07,38 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

EndDialog
If Retval 
   Then [Data_Inicio_Contingencia]=VSDGDTINI
        [Hora_Inicio_Contingencia]=VSDGHRINI
        [Justificativa           ]=VSDGJUST
        UnLockRecord
   else GRAVA_CONTINGENCIA=False
EndIf 

Moveto TabAnt
Moveto Field CampoAnt
   
Echo Off
Mouse Show

EndProc    ;  (JC_Show)

;*******************************************************************************
;* Digitacao dos Dados Justificativa Contingencia                              *
;*******************************************************************************
Proc JC_Digita()

JC_Show()

release procs JC_Dialog, JC_Show
EndProc    ;  (JC_Digita)

;-------------------------------------------------------------------------------

;------- Digita Frete ----------------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Digita_Frete_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, Temp  
Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf           
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="Frete_Incluso" : CancelDialog
                  [Frete Incluso na Nota ]=OLD_Frete_Incluso
                  [Numero Frete Cotacao  ]=OLD_Num_FreteCot
                  [Aliquota BCFrete Nota ]=OLD_ABC_Frete
                  [Valor do Frete        ]=OLD_Frete
                  [Valor Frete Cotado    ]=OLD_Cotado
                  [Aliquota BCICMS Frete ]=OLD_ABCICMS_Frete
                  [Aliquota de ICMS Frete]=OLD_AICMS_Frete
                  [CFO Frete             ]=OLD_CFO_FRETE
             Case Campo="ABC_Frete"     : Campo="Frete_Incluso"
             Case Campo="Valor_Frete"   : Campo="ABC_Frete"
             Case Campo="Numero_Cotacao": Campo="Valor_Frete"
             Case Campo="Valor_Cotado"  : Campo="Numero_Cotacao"
             Case Campo="AICMS_Frete"   : Campo="Valor_Cotado"
             Case Campo="ABCICMS_Frete" : Campo="AICMS_Frete"
             Case Campo="CFO_Frete"     : Campo="ABCICMS_Frete"
             Case Campo="I_Flag"        : Campo="Valor_Frete"
           EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="Frete_Incluso":
                  VSD_Frete_Incluso=ControlValue("Frete_Incluso")
                  If IsBlank(VSD_Frete_Incluso)
                     Then VSD_Frete_Incluso="N"
                  Endif
                  If VSD_Frete_Incluso="S"
                     Then VSD_ABCICMS_Frete       =BlankNum()  
                          VSD_AICMS_Frete         =BlankNum() 
                          VSD_CFO_Frete           =""
                  EndIf   
                  Campo="ABC_Frete"
             Case Campo="ABC_Frete":
                  VSD_ABC_Frete=ControlValue("ABC_Frete")
                  If VSD_ABC_Frete>0
                     Then VSD_Frete=Round((VRNF*VSD_ABC_Frete)/100,2)
                          If VSD_Frete<VRMINIMO_FRETE
                             Then VSD_FRETE=VRMINIMO_FRETE
                          EndIf
                     Else VSD_ABC_Frete=BlankNum()
                  EndIf
                  Campo="Valor_Frete"
             Case Campo="Valor_Frete":
                  VSD_Frete=ControlValue("Valor_Frete")
                  If VSD_Frete_Incluso="S"
                     Then If Not VSD_Frete>0
                             Then Mensagem("Valor do frete inv lido !")
                             Else Campo="Numero_Cotacao"
                          EndIf
                     Else If Not VSD_Frete>0
                             Then VSD_ABC_Frete           =BlankNum()
                                  VSD_Frete               =BlankNum()
                                  VSD_ABCICMS_Frete       =BlankNum()  
                                  VSD_AICMS_Frete         =BlankNum() 
                                  VSD_CFO_Frete           =""
                                  ;Campo="I_Flag"
                             ;Else Campo="AICMS_Frete"     
                          EndIf   
                          Campo="Numero_Cotacao"
                  EndIf
             Case Campo="Numero_Cotacao" : Campo="Valor_Cotado" 
                  VSD_NUM_FRETECOT=ControlValue("Numero_Cotacao")
             Case Campo="Valor_Cotado" : 
                  VSD_Cotado=ControlValue("Valor_Cotado")
                  If VSD_Frete_Incluso="S"
                     Then Campo="I_Flag"
                     Else If Not VSD_Frete>0
                             Then VSD_NUM_FRETECOT        =""
                                  VSD_ABC_Frete           =BlankNum()
                                  VSD_Frete               =BlankNum()
                                  VSD_ABCICMS_Frete       =BlankNum()  
                                  VSD_AICMS_Frete         =BlankNum()
                                  VSD_CFO_Frete           =""                                          
                                  Campo="I_Flag"
                             Else Campo="AICMS_Frete"
                          EndIf   
                  EndIf            
                  
                  
             Case Campo="AICMS_Frete":
                  VSD_AICMS_Frete=ControlValue("AICMS_Frete")
                  Campo="ABCICMS_Frete"
             Case Campo="ABCICMS_Frete":
                  VSD_ABCICMS_Frete=ControlValue("ABCICMS_Frete")
                  Campo="CFO_Frete"
             Case Campo="CFO_Frete":
                  VSD_CFO_Frete=ControlValue("CFO_Frete")
                  If Not IsBlank(VSD_CFO_Frete) And VSD_Frete>0
                     Then Moveto [CFO Frete]
                          If Busca_Lookup("Codigo Fiscal de Operacao",VSD_CFO_Frete,"CFO Inv lido")
                            Then Campo="I_Flag"
                          EndIF
                     Else Campo="I_Flag"       
                  EndIf
                  
             Case Campo="I_Flag":
                  If VSD_Frete_Incluso="S"
                     Then [Frete Incluso na Nota ]="+"
                     Else If VSD_Frete>0
                             Then [Frete Incluso na Nota ]=":"
                             Else [Frete Incluso na Nota ]=""
                          EndIf
                  EndIf
                  [Numero Frete Cotacao  ]=VSD_NUM_FRETECOT
                  [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                  [Valor do Frete        ]=VSD_Frete
                  [Valor Frete Cotado    ]=VSD_Cotado
                  [Aliquota BCICMS Frete ]=VSD_ABCICMS_Frete
                  [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                  [CFO Frete             ]=VSD_CFO_Frete

                  CancelDialog
           EndSwitch
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP

EndProc ;Digita_Frete_Dialog()

;*******************************************************************************
;* Show Dialog Digita Frete                                                    *
;*******************************************************************************
Proc Digita_Frete_Show()
Private VSD_I_Flag  

INICIO_DIALOG=True
OP_SHOWD="Frete"

OLD_Frete_Incluso=[Frete Incluso na Nota ]
OLD_Num_FreteCot =[Numero Frete Cotacao  ]
OLD_ABC_Frete    =[Aliquota BCFrete Nota ]
OLD_Frete        =[Valor do Frete        ]
OLD_Cotado       =[Valor Frete Cotado    ]
OLD_ABCICMS_Frete=[Aliquota BCICMS Frete ]
OLD_AICMS_Frete  =[Aliquota de ICMS Frete]
OLD_CFO_FRETE    =[CFO Frete             ]

If [Frete Incluso na Nota ]="+" Or
   [Frete Incluso na Nota ]="S"
   Then VSD_Frete_Incluso="S"
   Else VSD_Frete_Incluso="N"
EndIf

If CHAVEC=1
   Then VSD_ABC_Frete    =TAXA_FRETE
   Else VSD_ABC_Frete    =[Aliquota BCFrete Nota ]
EndIf
VSD_NUM_FRETECOT  =[Numero Frete Cotacao  ] 
VSD_Frete         =[Valor do Frete        ]
VSD_Cotado        =[Valor Frete Cotado    ]
VSD_ABCICMS_Frete =[Aliquota BCICMS Frete ]
VSD_AICMS_Frete   =[Aliquota de ICMS Frete]
VSD_CFO_Frete     =[CFO Frete             ]
VSD_KM_Frete      =KM_FRETE
VSD_VRMINIMO_Frete=VRMINIMO_FRETE

VSD_I_Flag       =""

Echo Normal
Echo Off

Showdialog "Calculo do Frete" Proc "Digita_Frete_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 07,08 height 08 width 61
            
   Label  @ 0,00 "Soma na Nota" for "Frete_Incluso"
   Label  @ 1,04 "(Sim/N„o)"    for "Frete_Incluso"
   Accept @ 1,01  Width 4 "A1" picture "S,N" Tag "Frete_Incluso" to VSD_Frete_Incluso

   Label  @ 0,15 "Km Cliente" for "TKM_Frete"
   Accept @ 1,16 Width 10 "S" picture "#*#" Tag "TKM_Frete" to VSD_KM_Frete

   Label  @ 0,26 "%Aplicar" for "ABC_Frete"
   Accept @ 1,27 Width 8 "N" picture "#*#.[###]" Tag "ABC_Frete" to VSD_ABC_Frete

   Label  @ 0,35 "Vr Minimo" for "TVRMINIMO_Frete"
   Accept @ 1,36 Width 10 "$" picture "#*#.[##]" Tag "TVRMINIMO_Frete" to VSD_VRMINIMO_Frete

   Label  @ 0,46 "Vr Frete" For "Valor_Frete"
   Accept @ 1,47 Width 11 "$" picture "#*#.[##]" Tag "Valor_Frete" to VSD_Frete

   Label  @ 2,15 "N§ Cotacao" for "Numero_Cotacao"
   Accept @ 3,16 Width 19 "A12" picture "#*#.[###]" Tag "Numero_Cotacao" to VSD_NUM_FRETECOT
   
   Label  @ 2,35 "Vr Cotado" For "Valor_Cotado"
   Accept @ 3,36 Width 10 "$" picture "#*#.[##]" Tag "Valor_Cotado" to VSD_Cotado

   Label  @ 4,26 "%ICMS" for "AICMS_Frete"
   Accept @ 5,27 Width 8 "N" picture "#*#.[###]" Tag "AICMS_Frete" to VSD_AICMS_Frete

   Label  @ 4,35 "%Red.BCICMS" for "ABCICMS_Frete"
   Accept @ 5,36 Width 10 "N" picture "#*#.[###]" Tag "ABCICMS_Frete" to VSD_ABCICMS_Frete
   
   Label  @ 4,46 "CFOP" for "CFO_Frete"
   Accept @ 5,47 Width 7 "A4" picture "####" Tag "CFO_Frete" to VSD_CFO_Frete

   Accept @ 5,55 Width 1 "A1" picture "!" Tag "I_Flag" to VSD_I_Flag

Enddialog
Mouse Show

EndProc  ;Digita_Frete_Show()

;*******************************************************************************
;* Digitacao do Frete                                                          *
;*******************************************************************************
Proc Digita_Frete()
Private ncampo

ncampo=Field()

Digita_Frete_Show() 

Moveto Field ncampo
Release Procs Digita_Frete_Show, Digita_Frete_Dialog
Release Vars OLD_Frete_Incluso,OLD_ABC_Frete,OLD_Frete,OLD_Cotado,OLD_ABCICMS_Frete,
             OLD_AICMS_Frete,OLD_CFO_FRETE,VSD_Cotado,VSD_Frete_Incluso,VSD_ABCICMS_Frete,
             VSD_NUM_FRETECOT,VSD_AICMS_Frete,VSD_CFO_Frete,VSD_KM_Frete,VSD_ABC_Frete,VSD_VRMINIMO_Frete

EndProc ;Digita_Frete()
;-------------------------------------------------------------------------------

;------- Digita Troco ----------------------------------------------------------
;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Digita_Troco_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, Temp  
Temp=True

If INICIO_DIALOG
   Then INICIO_DIALOG=False
EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf
      Case Evento["KeyCode"] = 27:
           Switch
              Case Campo="I_VrTroco" : CancelDialog
           EndSwitch            
      Case Evento["KeyCode"] = 13:
           Switch              
              Case Campo="I_VrTroco" :
                   VSD_VrTroco=ControlValue("I_VrTroco")
                   AcceptDialog
           EndSwitch           
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

If (OP_SHOWD="Cheque" Or OP_SHOWD="Observacao") And CHAVEV=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

@ 23,0 ?? ">"+Format("W79,AL",MSGCAMPO)
PaintCanvas Attribute 30 23,0,23,79
          
@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79

Mouse Hide
RefreshDialog
Return TEMP

EndProc ;Digita_Troco_Dialog()

;*******************************************************************************
;* Digitacao do Troco - ShowDialog                                             *
;*******************************************************************************
Proc Digita_Troco_Show()

VrTroco     = 0
VSD_VrTroco = 0
TR          = 1
           
If IsAssigned(VERIFICA_CONSULTA) And VERIFICA_CONSULTA="TROCA"
   Then Digita_Troco_VrNf = [FaturaC->Valor DebitoCredito]*-1
   Else Digita_Troco_VrNf = [FaturaC->Valor Nota Fiscal]
EndIf              
           
While True
  If Not IsAssigned(INICIO_DIALOG) Then INICIO_DIALOG=False EndIf
  If Not IsAssigned(OP_SHOWD)      Then OP_SHOWD=""         EndIf 
             
  Echo Normal
  Echo Off
            
  Showdialog "Valor p/ Troco" Proc "Digita_Troco_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "TAB","ReverseTab","ENTER","ESC","ClearArea"
   @ 09,19 height 07 width 45
             
   Label  @ 1,01 "Informe o Valor Recebido: " for "I_VrTroco"
   Accept @ 1,28  Width 12 "$" picture "#*#.[##]" Tag "I_VrTroco" to VSD_VrTroco

   @ 03,02 ?? Spaces(13)+"Valor Troco:  "+Format("W"+StrVal(TR)+",AR",StrVal(VrTroco)) 
   
   PaintCanvas Attribute 121 03,28,03,39
   
   EndDialog
   Mouse Show
   
   If Not Retval Then QuitLoop EndIf   
   
   Switch
     Case VSD_VrTroco = 0 : Mensagem("O Valor deve ser diferente de ZERO !") 
                            VrTroco=0
                            TR=1
                            Loop
     Case VSD_VrTroco < 0 : Mensagem("O Valor deve ser maior que ZERO !")
                            TR=1
                            VrTroco=0 
                            Loop
     Case VSD_VrTroco <= Digita_Troco_VrNf : Mensagem("O Valor deve ser maior que o Valor da Nota Fiscal !")
                                             VrTroco=0
                                             TR=1
                                             Loop
     OtherWise : VrTroco=VSD_VrTroco-Digita_Troco_VrNf
                 TR=Len(VSD_VrTroco)
                 Loop 
   EndSwitch
EndWhile

EndProc ;Digita_Troco_Show()

;*******************************************************************************
;* Digitacao do Troco                                                          *
;*******************************************************************************
Proc Digita_Troco()
Private ncampo

ncampo=Field()

Digita_Troco_Show() 

Moveto Field ncampo
Release Procs Digita_Troco_Show, Digita_Troco_Dialog

EndProc ;Digita_Troco()

;------- Digita CartÆo ---------------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Digita_Cartao_Dialog(Disparo,Campo,Evento,Elemento)
Private VSD_TIPO,Disparo,Campo,Evento,Elemento,Temp
   
Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           If Campo="NomeCartao"
              Then If Campo="NomeCartao"
                       Then If AUX_PROCESSO="NOTA"
                               Then Switch
                                      Case [NotaV->Forma de Pagamento] = "CD" Or [NotaC->Forma de Pagamento] = "CD" : TP_CARTAO = "DEBITO"
                                      Case [NotaV->Forma de Pagamento] = "CT" Or [NotaC->Forma de Pagamento] = "CT" : TP_CARTAO = "CREDITO"
                                      Case [NotaV->Forma de Pagamento] = "CL" Or [NotaC->Forma de Pagamento] = "CL" : TP_CARTAO = "CREDITO"
                                    EndSwitch
                               Else Switch
                                      Case [FaturaV->Forma de Pagamento] = "CD" Or [FaturaC->Forma de Pagamento] = "CD" : TP_CARTAO = "DEBITO"
                                      Case [FaturaV->Forma de Pagamento] = "CT" Or [FaturaC->Forma de Pagamento] = "CT" : TP_CARTAO = "CREDITO"
                                      Case [FaturaV->Forma de Pagamento] = "CL" Or [FaturaC->Forma de Pagamento] = "CL" : TP_CARTAO = "CREDITO"
                                    EndSwitch
                            EndIF                   
                            Monta_Opcoes("P_Cartao",TP_CARTAO)
                            
                            If Seleciona_Opcoes("P_Cartao",TP_CARTAO)
                               Then VSD_NomeCartao = VSDGCARTAO
                               Else Temp=False 
                                    Return False
                            EndIf
                    EndIf
               
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5
                    
                    
                    Window Select JANELA
                    WinArray5["FLOATING"]=True
                    Window SetAttributes JANELA From WinArray5

                    Echo Normal
                    Echo off

                    If AUX_PROCESSO="NOTA"
                       Then Moveto "NotaV"
                       Else Moveto "FaturaV"
                    EndIf   
           EndIf
           Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf           
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="NCartao"       : CancelDialog
             Case Campo="NomeCartao"    : Campo="NCartao"
           EndSwitch

      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="NCartao":
                  VSD_NCartao=ControlValue("NCartao")
                  Campo="NomeCartao"
            Case Campo="NomeCartao":
                  VSD_NomeCartao=ControlValue("NomeCartao")
                  If Not IsBlank(VSD_NomeCartao)
                     Then If AUX_PROCESSO="NOTA"
                             Then Switch
                                    Case [NotaV->Forma de Pagamento] = "CD" Or [NotaC->Forma de Pagamento] = "CD" : TP_CARTAO = "DEBITO"
                                    Case [NotaV->Forma de Pagamento] = "CT" Or [NotaC->Forma de Pagamento] = "CT" : TP_CARTAO = "CREDITO"
                                    Case [NotaV->Forma de Pagamento] = "CL" Or [NotaC->Forma de Pagamento] = "CL" : TP_CARTAO = "CREDITO"
                                  EndSwitch
                             Else Switch
                                    Case [FaturaV->Forma de Pagamento] = "CD" Or [FaturaC->Forma de Pagamento] = "CD" : TP_CARTAO = "DEBITO"
                                    Case [FaturaV->Forma de Pagamento] = "CT" Or [FaturaC->Forma de Pagamento] = "CT" : TP_CARTAO = "CREDITO"
                                    Case [FaturaV->Forma de Pagamento] = "CL" Or [FaturaC->Forma de Pagamento] = "CL" : TP_CARTAO = "CREDITO"
                                  EndSwitch
                           EndIf
                           VSD_TIPO = ""    
                           If AUX_PROCESSO="NOTA"
                              Then GetRecord "\\Sistemas\\Vendas\\P_Cartao" [NotaC->Codigo da Empresa],VSD_NomeCartao To REG_CARTAO
                              Else GetRecord "\\Sistemas\\Vendas\\P_Cartao" [FaturaC->Codigo da Empresa],VSD_NomeCartao To REG_CARTAO
                           EndIf
                           If RetVal
                              Then VSD_TIPO = REG_CARTAO["Debito_Credito"]
                           EndIf   
                           
                           If VSD_TIPO = TP_CARTAO
                              Then KeyPress "ESC"
                                   If AUX_PROCESSO="NOTA"
                                      Then Moveto "NotaV"
                                      Else Moveto "FaturaV"
                                   EndIf   
                                   [Numero do Cartao    ]=VSD_NCartao
                                   [Nome do Cartao      ]=VSD_NomeCartao
                                   Numero_Cartao         =VSD_NCartao
                                   Nome_Cartao           =VSD_NomeCartao
                                   CancelDialog
                                   CALC_VENC_SIM = True
                              Else Mensagem("Cart„o n„o Cadastrado ! //" + " Utilize o F1 para consultar os cartäes dispon¡veis.")
                                   VSD_NomeCartao=""
                                   KeyPress "ESC"
                           EndIf
                     Else  Mensagem("Cart„o n„o Cadastrado ! //" + "Utilize o F1 para consultar os cartäes dispon¡veis.")
                           VSD_NomeCartao=""
                           KeyPress "ESC"      
                  EndIf
                  Echo Off
           EndSwitch           

   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="NomeCartao"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP

EndProc ;Digita_Cartao_Dialog()

;*******************************************************************************
;* Show Dialog Digita CartÆo                                                   *
;*******************************************************************************
Proc Digita_Cartao_Show()

INICIO_DIALOG=True
OP_SHOWD="Cartao"
 
CALC_VENC_SIM = False

If Search("NOT",Upper(Table()))>0
   Then AUX_PROCESSO="NOTA" 
        Moveto "NotaV"
   Else AUX_PROCESSO="FATURA"
        Moveto "FaturaV"
EndIf
VSD_NCartao   =[Numero do Cartao    ]
VSD_NomeCartao=[Nome do Cartao      ]

Showdialog "Dados do Cartao" Proc "Digita_Cartao_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
    @ 09,14 height 04 width 48

    Label  @ 0,00 "N§ Autoriza‡Æo" for "NCartao"
    Accept @ 1,01  Width 22 "A19" picture "!*!" Tag "NCartao" to VSD_NCartao

    Label  @ 0,25 "Nome do Cartao" for "NomeCartao"
    Accept @ 1,26 Width 18 "A15" picture "!*!" Tag "NomeCartao" To VSD_NomeCartao

Enddialog
Mouse Show
 
If Not CALC_VENC_SIM
   Then Return False
   Else Return True
EndIf

EndProc  ;Digita_Cartao_Show()

;*******************************************************************************
;* Digitacao de Cartao                                                         *
;*******************************************************************************
Proc Digita_Cartao()
Private Temp,ncampo,nTable
        
nTable = Table() 
ncampo = Field()

If Digita_Cartao_Show()
   Then Temp = True
   Else Temp = False
EndIf

Moveto nTable
Moveto Field ncampo

Release Procs Digita_Cartao_Show, Digita_Cartao_Dialog
Release Vars TP_CARTAO,VSDGCARTAO,VSD_NomeCartao,VSD_NCartao,CALC_VENC_SIM,AUX_PROCESSO

Return Temp

EndProc   ; (Digita_Cartao)

;-------------------------------------------------------------------------------

;------- Digita Desconto -------------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Digita_Descto_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, Temp  
Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="A_Descto"      : CancelDialog
             Case Campo="Descto"        : Campo="A_Descto"
           EndSwitch         

      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="A_Descto":
                  VSD_A_Descto=ControlValue("A_Descto")
                  If VSD_A_Descto>0
                     Then VSD_Descto=BlankNum()
                          AcceptDialog
                     Else VSD_A_Descto=BlankNum()
                          Campo="Descto"
                  EndIf
             Case Campo="Descto":
                  VSD_Descto=ControlValue("Descto")
                  AcceptDialog
           EndSwitch           

   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP

EndProc ;Digita_Descto_Dialog()

;*******************************************************************************
;* Show Dialog Digita Desconto                                                 *
;*******************************************************************************
Proc Digita_Descto_Show(Tipo)
Private DesctoOk,tipo

INICIO_DIALOG=True
OP_SHOWD="Desconto"

switch
  case tipo="MERCADORIA":
    VSD_A_Descto   =[Taxa de Desconto ]
    VSD_Descto     =[Valor do Desconto]
  
  case tipo="SERVICO"   :
    VSD_A_Descto   =[Taxa de Desconto Servico ]
    VSD_Descto     =[Valor do Desconto Servico]
  
endswitch

Showdialog "C lculo do Desconto "+Tipo Proc "Digita_Descto_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 12,20 height 04 width 41

   Label  @ 0,00 "%Sobre o Bruto" for "A_Descto"
   Accept @ 1,03 Width 10 "N" picture "#*#.[###]" Tag "A_Descto" to VSD_A_Descto

   Label  @ 0,20 "Valor" For "Descto"
   Accept @ 1,17 Width 13 "$" picture "#*#.[##]" Tag "Descto" to VSD_Descto

Enddialog
Mouse Show
If Not RetVal
   Then Return
EndIf

If Search("TROC",[FaturaC->Descricao da Destinacao])>0
   Then PARAM_BLOQ_DESCTO   = "N"
EndIf

DesctoOk=True
switch
  case tipo="MERCADORIA":
    If PARAM_BLOQ_DESCTO="S" Or PARAM_BLOQ_DESCTO="P"
       Then If Search("VEND",[FaturaC->Descricao da Destinacao])>0
               Then DesctoOk=False
                    If PARAM_BLOQ_TPDESCTO="I"
                       Then TX_DESCTO_BLOQUEIO=PARAM_BLOQ_TXDESCTO
                    EndIf
                    If VSD_A_Descto>0
                       Then If VSD_A_Descto<=TX_DESCTO_BLOQUEIO
                               Then DesctoOK=True
                            EndIf
                       Else If ((VSD_Descto/[FaturaC->Valor Mercadoria])*100)<=TX_DESCTO_BLOQUEIO
                               Then DesctoOK=True
                            EndIf
                    EndIf
             EndIf
    EndIf
    If Not DesctoOK
       Then MSG="% Desconto concedido no Total acima do permitido !//"
            MSG=MSG+"Desconto m ximo = "+ Ltrim(Format("W6.2,EIC",TX_DESCTO_BLOQUEIO)) +"% //"
            MSG=MSG+"// Verificar Ok !"
            If PARAM_BLOQ_DESCTO="P"
               Then Libera_Bloqueio(MSG)
                    If Ok="S"
                       Then DesctoOk=True
                            Grava_LogEx("BIB_VEND DesctTot")
                    EndIf
               Else Mensagem(MSG)
            EndIf
    EndIf

  case tipo="SERVICO"   :
  
endswitch

If DesctoOk
   Then 
        switch
          case tipo="MERCADORIA":
            [Taxa de Desconto ]=VSD_A_Descto
            [Valor do Desconto]=VSD_Descto
          
          case tipo="SERVICO"   :
            [Taxa de Desconto Servico ]=VSD_A_Descto
            [Valor do Desconto Servico]=VSD_Descto
          
        endswitch
EndIf

EndProc  ;Digita_Descto_Show()

;*******************************************************************************
;* Digitacao de Desconto                                                       *
;*******************************************************************************
Proc Digita_Descto()
Private ncampo,tipo

ncampo=Field()

switch
  case [Valor Mercadoria]>0  and [Valor Servico]<=0: tipo="MERCADORIA"
  case [Valor Mercadoria]<=0 and [Valor Servico]>=0: tipo="SERVICO"
  otherwise:
    Echo Normal
    Echo Off
    ShowPopup " Aplicar Desconto em " CENTERED
    "~0~ = Produtos " : " Aplicar desconto em produtos" : "MERCADORIA",
    "~1~ = Servi‡os " : " Aplicar desconto em servi‡os" : "SERVICO" 
    EndMenu
    To MenuVar
    Echo Off
    If MenuVar="CANCELAR" or MenuVar="Esc"
       Then 
            return false
       Else tipo=MenuVar 
    EndIf
endswitch

Digita_Descto_Show(Tipo) 

Moveto Field ncampo           

Release Procs Digita_Descto_Show, Digita_Descto_Dialog
Release Vars VSD_A_Descto,VSD_Descto

EndProc ;Digita_Descto()

;-------------------------------------------------------------------------------



;------- Digita Data_Of -------------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Datas_Of_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp  
Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf           
      Case Evento["KeyCode"] = 27:
           Temp=False      
           Switch
             Case Campo="TGI_DTEMI"      : CancelDialog
             Case Campo="TGI_DTSAI"      : Campo="TGI_DTEMI"
             Case Campo="TGI_HRSAI"      : Campo="TGI_DTSAI"
           EndSwitch           

      Case Evento["KeyCode"] = 13:
           Temp=False      
           Switch
             Case Campo="TGI_DTEMI"      : Campo="TGI_DTSAI"
                  VSDGDTEMI=ControlValue("TGI_DTEMI")
             Case Campo="TGI_DTSAI"      : Campo="TGI_HRSAI"
                  VSDGDTSAI=ControlValue("TGI_DTSAI")
             Case Campo="TGI_HRSAI"      :
                  VSDGHRSAI=ControlValue("TGI_HRSAI")
                  AcceptDialog
           EndSwitch           

   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP

EndProc ;Datas_Of_Dialog()

;*******************************************************************************
;* Show Dialog Digita Data_OF                                                 *
;*******************************************************************************
Proc Datas_Of_Show()

INICIO_DIALOG=True
OP_SHOWD="DatasOF"

VSDGDTEMI=TodaY()
VSDGDTSAI=TodaY()
VSDGHRSAI=Time()

ShowDialog "Confirme Data/Hora p/ Fatura !" proc "Datas_Of_Dialog"
   Trigger "OPEN","ARRIVE"
  Key "ENTER","ESC","TAB"
   @ 09,15 height 04 width 50

  Label  @ 00,00 "Data de Emiss„o" For "TGI_DTEMI"
  Accept @ 01,02 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TGI_DTEMI" To VSDGDTEMI

  Label  @ 00,17 "Data de Saida" For "TGI_DTSAI"
  Accept @ 01,18 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TGI_DTSAI" To VSDGDTSAI

  Label  @ 00,32 "Hora de Saida" For "TGI_HRSAI"
  Accept @ 01,36 Width 08 "A5"  Picture "##:##" Tag "TGI_HRSAI" To VSDGHRSAI

Enddialog
If Not RetVal
   Then Return False
   Else Switch
          Case IsBlank(VSDGDTEMI)  : Mensagem("Data de Emiss„o Inv lida !")
                                     Return False
          Case VSDGDTEMI<>VSDGDTSAI : ConfGeral("A Data de Emiss„o ‚ diferente da Data de Sa¡da!//Deseja continua com o processo?")
                                      If Ok="S"
                                        Then Return True
                                        Else Return False
                                     EndIf          
          OtherWise                : Return True
        EndSwitch
EndIf

EndProc  ;Datas_Of_Show()

;*******************************************************************************
;* Digitacao Data_OF                                                           *
;*******************************************************************************
Proc Datas_Of()
Private ncampo,temp

ncampo=Field()

If Datas_Of_Show()
   Then temp = True
   Else temp = False
EndIf   

Moveto Field ncampo
Release Procs Datas_Of_Show, Datas_Of_Dialog
;Vari veis utilizadas no FATURA -> VSDGDTEMI,VSDGDTSAI,VSDGHRSAI

Return temp

EndProc ;Datas_Of()    

;-------------------------------------------------------------------------------

;------- Digita Ordem Compra Publica -------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Ordem_Compra_Publica_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp  
Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf           
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="TG_OCPEMPENHO"  : CancelDialog
             Case Campo="TG_OCPPEDIDO"   : Campo="TG_OCPEMPENHO"
             Case Campo="TG_OCPCONTRATO" : Campo="TG_OCPPEDIDO"
           EndSwitch                     

      Case Evento["KeyCode"] = 13:
           Temp=False           
           Switch
             Case Campo="TG_OCPEMPENHO" : Campo="TG_OCPPEDIDO"
                  VSDGOCPEMPENHO=ControlValue("TG_OCPEMPENHO")

             Case Campo="TG_OCPPEDIDO"  : Campo="TG_OCPCONTRATO"
                  VSDGOCPPEDIDO=ControlValue("TG_OCPPEDIDO") 

             Case Campo="TG_OCPCONTRATO": AcceptDialog
                  VSDGOCPCONTRATO=ControlValue("TG_OCPCONTRATO")
           EndSwitch                     
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP

EndProc ;Ordem_Compra_Publica_Dialog()

;*******************************************************************************
;* Ordem de Compra P£blica                                                     *
;*******************************************************************************
Proc Ordem_Compra_Publica_Show()
Private TabAnt

INICIO_DIALOG=True
OP_SHOWD="OCP"

VSDGOCPEMPENHO  = ""
VSDGOCPPEDIDO   = ""
VSDGOCPCONTRATO = ""

TabAnt=Table()

If Search("NOT",Upper(TabAnt))>0
   Then GetRecord "\\Sistemas\\Vendas\\NotaCC" EMPRESA,NUMDOC,SERIE To REG_NotaCC
        If RetVal 
           Then VSDGOCPEMPENHO  = REG_NotaCC["Nota de Empenho"]
                VSDGOCPPEDIDO   = REG_NotaCC["Pedido"]  
                VSDGOCPCONTRATO = REG_NotaCC["Contrato"]
        EndIf
        UnLockRecord
        FormKey
        SaveTables
   Else Moveto "FaturaCC"
        VSDGOCPEMPENHO  = [Nota de Empenho]
        VSDGOCPPEDIDO   = [Pedido         ]  
        VSDGOCPCONTRATO = [Contrato       ]
EndIf

Echo Normal
Echo Off

ShowDialog "Ordem de Compra P£blica" Proc "Ordem_Compra_Publica_Dialog"
   Trigger "OPEN","ARRIVE"
   Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
   @ 06,08 height 9 width 64

   Label  @ 00,00 "Nota de Empenho" for "TG_OCPEMPENHO"
   Accept @ 01,01  Width 25 "A22" picture "!*!" Tag "TG_OCPEMPENHO" to VSDGOCPEMPENHO

   Label  @ 02,00 "Pedido" for "TG_OCPPEDIDO"
   Accept @ 03,01  Width 60 "A60" picture "!*!" Tag "TG_OCPPEDIDO" to VSDGOCPPEDIDO

   Label  @ 04,00 "Contrato" for "TG_OCPCONTRATO"
   Accept @ 05,01  Width 60 "A60" picture "!*!" Tag "TG_OCPCONTRATO" to VSDGOCPCONTRATO

Enddialog                  
if retval
   Then If Search("NOT",Upper(TabAnt))>0
           Then Moveto "NotaCC"
                Moveto [Codigo da Empresa]
                Locate EMPRESA,NUMDOC,SERIE
                If not RetVal 
                   Then End Down
                        [Codigo da Empresa  ]= EMPRESA 
                        [Numero do Documento]= NUMDOC 
                        [Serie do Documento ]= SERIE
                EndIf   
           Else Moveto "FaturaCC"
        EndIf        
        [Nota de Empenho    ]= VSDGOCPEMPENHO
        [Pedido             ]= VSDGOCPPEDIDO 
        [Contrato           ]= VSDGOCPCONTRATO
        UnLockRecord
        SaveTables
EndIf

If Search("NOT",Upper(TabAnt))>0
   Then Moveto TabAnt
        FormKey
   Else Moveto "FaturaCC"
EndIf        

Mouse Show 

Release Vars TabAnt

EndProc ;Ordem_Compra_Publica_Show()

;*******************************************************************************
;* Digitacao Ordem de Compra P£blica                                           *
;*******************************************************************************
Proc Ordem_Compra_Publica()
Private TabAnt,ncampo

TabAnt=Table()
ncampo=Field()

Ordem_Compra_Publica_Show() 

Moveto TabAnt
Moveto Field ncampo

Release Procs Ordem_Compra_Publica_Show, Ordem_Compra_Publica_Dialog
Release Vars VSDGOCPEMPENHO,VSDGOCPPEDIDO,VSDGOCPCONTRATO

EndProc ;Ordem_Compra_Publica()

;-------------------------------------------------------------------------------

;------- Digita Observa‡Æo -----------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Digita_Obs_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp  
Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf           
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="OBS"           : CancelDialog
           EndSwitch  
      Case Evento["KeyCode"] = 13:
           Temp=False   
           Switch
             Case Campo="OBS":
                  VSD_OBS=ControlValue("OBS")
                  [Observacao]=VSD_OBS
                  CancelDialog
           EndSwitch  
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP

EndProc ;Digita_Obs_Dialog()

;*******************************************************************************
;* Digitacao de Observacao                                                     *
;*******************************************************************************
Proc Digita_Obs_Show()

INICIO_DIALOG=True
OP_SHOWD="Observacao"

If Search("NOT",Upper(Table()))>0
   Then Moveto "NotaV"
   Else Moveto "FaturaV"
EndIf
VSD_OBS = [Observacao]

Showdialog "Observa‡„o" Proc "Digita_Obs_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 09,08 height 03 width 68

   Accept @ 0,01  Width 64 "A70" picture "!*!" Tag "OBS" to VSD_OBS

Enddialog
Mouse Show

EndProc  ;Digita_Obs_Show()

;*******************************************************************************
;* Digitacao da Observa‡Æo                                                     *
;*******************************************************************************
Proc Digita_Obs()
Private nTable,ncampo

nTable = Table()
ncampo = Field()

Digita_Obs_Show() 

Moveto nTable
Moveto Field ncampo

Release Procs Digita_Obs_Show, Digita_Obs_Dialog
Release Vars VSD_OBS

EndProc ;Digita_Obs()

;-------------------------------------------------------------------------------

;------- Cheque ----------------------------------------------------------------

;*******************************************************************************
;* Ler ou Gravar Dados do Cheque                                               *
;*******************************************************************************
Proc Ler_Gravar_Cheque(Opcao)
Private Opcao
Switch
  Case Opcao="Ler":
       VSD_DataV    =[Data          ]
       VSD_CBanco   =[Codigo_Banco  ]
       VSD_NBanco   =[Nome_Banco    ]
       VSD_Agencia  =[Agencia       ]
       VSD_CCorrente=[Numero_Conta  ]
       VSD_NCheque  =[Numero_Cheque ]
       VSD_TipoEmit =[Tipo_Emitente ]
       VSD_Nome     =[Titular_Cheque]
       VSD_Cidade   =[Cidade        ]
       VSD_UF       =[UF            ]
       VSD_Valor    =[Valor         ]
       VSD_Obs      =[Observacao    ]
       VSD_CPF      =[CPF           ]
  Case Opcao="Gravar":
       [Data          ]=VSD_DataV
       [Codigo_Banco  ]=VSD_CBanco
       [Nome_Banco    ]=VSD_NBanco
       [Agencia       ]=VSD_Agencia
       [Numero_Conta  ]=VSD_CCorrente
       [Numero_Cheque ]=VSD_NCheque
       [Tipo_Emitente ]=VSD_TipoEmit
       [Titular_Cheque]=VSD_Nome
       [Cidade        ]=VSD_Cidade
       [UF            ]=VSD_UF
       [Observacao    ]=VSD_Obs
       [Valor         ]=VSD_Valor
       [CPF           ]=VSD_CPF
EndSwitch

EndProc   ;  (Ler_Gravar_Cheque)
                                          
;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Digita_Cheque_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp  
Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           If Campo="CBanco" Or
              Campo="NomeCartao" Or
              Campo="Cidade" Or
              Campo="UF"
              Then Dynarray WinArray5[]
                   Window Handle Dialog to JANELA
                   Window GetAttributes JANELA To WinArray5
                   WinArray5["FLOATING"]=False
                   Window SetAttributes JANELA From WinArray5

                   If Campo="CBanco"     Then Moveto [Codigo_Banco  ] EndIf
                   If Campo="NomeCartao" Then Moveto [Nome do Cartao] EndIf
                   If Campo="Cidade"     Then Moveto [Cidade        ] EndIf
                   If Campo="UF"         Then Moveto [UF            ] EndIf
                   ConsultaF1()

                   Window Select JANELA
                   WinArray5["FLOATING"]=True
                   Window SetAttributes JANELA From WinArray5

                   echo Normal
                   echo off
  
                   If Campo="CBanco"
                      Then VSD_CBanco=[Codigo_Banco      ]
                           VSD_NBanco=[Nome_Banco        ]
                   EndIf
                   If Campo="NomeCartao"
                      Then VSD_NomeCartao=[Nome do Cartao]
                   EndIf
                   If Campo="Cidade"
                      Then VSD_Cidade=[Cidade]
                   EndIf
                   If Campo="UF"
                      Then VSD_UF=[UF]
                   EndIf
                   Moveto "NotaV"
           EndIf
           If Campo="TipoEmit"
              Then ShowPopup " Emitente " @ 14,39
                      "~P~roprio" : " O Proprio Cliente" : "PROPRIO",
                      "~T~erceiro": " De Terceiro": "TERCEIRO"
                   EndMenu
                   To MenuVar
                      If MenuVar<>"Esc"
                         Then VSD_TipoEmit=MenuVar
                      EndIf
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 4 And OP_SHOWD="Cheque":
           If COPIOU_REGISTRO
              Then REGISTRO["Sequencia"]     =SEQ
                   REGISTRO["Numero de Dias"]=[Numero de Dias]
                   REGISTRO["Data"]          =[Data]
                   REGISTRO["Valor"]         =[Valor]
                   CopyFromArray REGISTRO
                   Ler_Gravar_Cheque("Ler")
           EndIf
      Case Evento["KeyCode"] = -81 And OP_SHOWD="Cheque":
           VSD_CBanco   =ControlValue("CBanco")
           VSD_NCheque  =ControlValue("NCheque")
           VSD_Nome     =ControlValue("Nome")
           VSD_Agencia  =ControlValue("Agencia")
           VSD_CCorrente=ControlValue("CCorrente")
           VSD_TipoEmit =ControlValue("TipoEmit")
           VSD_Cidade   =ControlValue("Cidade")
           VSD_UF       =ControlValue("UF")
           VSD_DataV    =ControlValue("DataV")
           VSD_Valor    =ControlValue("Valor")
           VSD_Obs      =ControlValue("Obs")
           VSD_CPF      =ControlValue("CPF")

           Pode_Gravar=True
           If IsBlank(VSD_TipoEmit)
              Then Mensagem("Emitente Invalido !")
                   Pode_Gravar=False
           EndIf
           If IsBlank(VSD_DataV)
              Then Mensagem("Data Vencimento Invalida !")
                   Pode_Gravar=False
           EndIf
           If IsBlank(VSD_Valor)
              Then Mensagem("Valor Invalido !")
                   Pode_Gravar=False
           EndIf

           If Pode_Gravar
              Then Ler_Gravar_Cheque("Gravar")
                   CancelDialog
           EndIf
       Case Evento["KeyCode"] = -6:
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf    
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="CBanco"        : CancelDialog
             Case Campo="Agencia"       : Campo="CBanco"
             Case Campo="CCorrente"     : Campo="Agencia"
             Case Campo="NCheque"       : Campo="CCorrente"
             Case Campo="TipoEmit"      : Campo="NCheque"
             Case Campo="CPF"           : Campo="TipoEmit"
             Case Campo="Nome"          : Campo="CPF"
             Case Campo="Cidade"        : Campo="Nome"
             Case Campo="UF"            : Campo="Cidade"
             Case Campo="DataV"         : Campo="UF"
             Case Campo="Valor"         : Campo="DataV"
             Case Campo="Obs"           : Campo="Valor"
           EndSwitch                   

      Case Evento["KeyCode"] = 13:
           Temp=False           
           Switch
             Case Campo="CBanco":
                  VSD_CBanco=ControlValue("CBanco")
                  If Not IsBlank(VSD_CBanco)
                     Then Moveto [Codigo_Banco]
                         If Busca_Lookup("Codigo_Banco",VSD_CBanco,"SM")
                             Then VSD_CBanco=REG_BUSCA_LOOKUP["Codigo_Banco"]
                                  VSD_NBanco=REG_BUSCA_LOOKUP["Nome_Banco"  ]
                                  [Codigo_Banco]=VSD_CBanco
                                  Campo="Agencia"
                             Else Mensagem("Banco n„o Cadastrado !")
                                  VSD_CBanco=""
                                  VSD_NBanco=""
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="Agencia":
                  VSD_Agencia=ControlValue("Agencia")
                  Campo="CCorrente"
             Case Campo="CCorrente":
                  VSD_CCorrente=ControlValue("CCorrente")
                  Campo="NCheque"
             Case Campo="NCheque":
                  VSD_NCheque=ControlValue("NCheque")
                  Campo="TipoEmit"
             Case Campo="TipoEmit":
                  VSD_TipoEmit=ControlValue("TipoEmit")
                  If Not IsBlank(VSD_TipoEmit)
                     Then If VSD_Nome="" And VSD_TipoEmit="PROPRIO"
                             Then VSD_Nome  =[NotaC->Razao Social]
                                  VSD_Cidade=[NotaC->Cidade      ]
                                  VSD_UF    =[NotaC->Uf          ]
                                  VSD_CPF   =[NotaC->CGC         ]
                          EndIf
                          Campo="CPF"
                  Endif
            Case Campo="CPF":
                 VSD_CPF=ControlValue("CPF")
                 If Not IsBlank(VSD_CPF)
                    Then If Tipo_CGC_CPF(VSD_CPF)<>"CGC" And
                            Tipo_CGC_CPF(VSD_CPF)<>"CPF"
                            Then Mensagem("CPF/CGC Invalido !")
                            Else Campo="Nome"
                         EndIf
                    Else Campo="Nome"
                 EndIf
            Case Campo="Nome":
                 VSD_Nome=ControlValue("Nome")
                 Campo="Cidade"
            Case Campo="Cidade":
                 VSD_Cidade=ControlValue("Cidade")
                 If Not IsBlank(VSD_Cidade)
                    Then Moveto [Cidade]
                         If Busca_Lookup("Cidade",VSD_Cidade,"SM")
                            Then VSD_Cidade=REG_BUSCA_LOOKUP["Cidade"]
                                 [Cidade]=VSD_Cidade
                                 Campo="UF"
                            Else Mensagem("Cidade n„o Cadastrada !")
                                 VSD_Cidade=""
                         EndIf
                         Echo Off
                    Else Campo="UF"
                 EndIf
            Case Campo="UF":
                 VSD_UF=ControlValue("UF")
                 If Not IsBlank(VSD_UF)
                    Then Moveto [UF]
                         If Busca_Lookup("UF",VSD_UF,"SM")
                            Then VSD_UF=REG_BUSCA_LOOKUP["UF"]
                                 [UF]=VSD_UF
                                 Campo="DataV"
                            Else Mensagem("UF n„o Cadastrada !")
                                 VSD_UF=""
                         EndIf
                         Echo Off
                    Else Campo="DataV"
                 EndIf
            Case Campo="DataV":
                 VSD_DataV=ControlValue("DataV")
                 If Not IsBlank(VSD_DataV)
                    Then If VSD_DataV<[NotaC->Data de Emissao]
                            Then Mensagem("Data de Vencimento menor que Data de Emissao !")
                            Else Campo="Valor"
                         EndIf
                 EndIf
             Case Campo="Valor":
                  VSD_Valor=ControlValue("Valor")
                  If Not IsBlank(VSD_Valor)
                     Then Campo="Obs"
                  EndIf
             Case Campo="Obs":
                  VSD_Obs=ControlValue("Obs")

                  Ler_Gravar_Cheque("Gravar")
                  CopyToArray REGISTRO
                  COPIOU_REGISTRO=True
                  CancelDialog
           EndSwitch                 
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="CBanco"      Or
   Campo="TipoEmit"    Or
   Campo="NomeCartao"  Or
   Campo="Cidade"      Or
   Campo="UF"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf
If OP_SHOWD="Cheque" And COPIOU_REGISTRO
   Then TECLA=TECLA+"Ctrl+D=Copiar  PgDn=Finalizar  "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP

EndProc ;Digita_Cheque_Dialog()

;*******************************************************************************
;* Ordem de Compra P£blica                                                     *
;*******************************************************************************
Proc Digita_Cheque_Show()

INICIO_DIALOG=True
OP_SHOWD="Cheque"
Echo Normal
Echo Off

Moveto "NotaV"
Ler_Gravar_Cheque("Ler")

Showdialog "Dados do Cheque" Proc "Digita_Cheque_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","PGDN","Ditto",-46, 4
     @ 11,4 height 12 width 71

   Label  @ 0,00 "N§ Banco Nome Banco" for "CBanco"
   Accept @ 1,01  Width 8 "A4" picture "!*!" Tag "CBanco" to VSD_CBanco

   Accept @ 1,10  Width 23 "A20" picture "!*!" Tag "NBanco" to VSD_NBanco

   Label  @ 0,33 "Agencia" for "Agencia"
   Accept @ 1,34  Width 9 "A6" picture "!*!" Tag "Agencia" to VSD_Agencia

   Label  @ 2,00 "C/C" for "CCorrente"
   Accept @ 3,01  Width 13 "A10" picture "!*!" Tag "CCorrente" to VSD_CCorrente

   Label  @ 2,14 "N§ Cheque" for "NCheque"
   Accept @ 3,15  Width 13 "A10" picture "!*!" Tag "NCheque" to VSD_NCheque

   Label  @ 2,33 "Emitente" for "TipoEmit"
   Accept @ 3,34  Width 11 "A8" picture "PROPRIO,TERCEIRO" Tag "TipoEmit" to VSD_TipoEmit

   Label  @ 4,00 "CPF/CNPJ" for "CPF"
   Accept @ 5,01  Width 21 "A18" picture "##[.]###.###/####-##,###.###.###-##" Tag "CPF" to VSD_CPF

   Label  @ 4,24 "Nome do Titular" for "Nome"
   Accept @ 5,25  Width 43 "A40" picture "!*!" Tag "Nome" to VSD_Nome

   Label  @ 6,00 "Cidade" for "Cidade"
   Accept @ 7,01  Width 23 "A20" picture "!*!" Tag "Cidade" to VSD_Cidade

   Label  @ 6,24 "UF" for "UF"
   Accept @ 7,25  Width 5  "A2" picture "!*!" Tag "UF" to VSD_UF

   Label  @ 6,37 "Data Vencto " for "DataV"
   Accept @ 7,37  Width 13 "D" picture "#[#];.##;.##[##]" Tag "DataV" to VSD_DataV

   Label  @ 6,51 "Valor do Cheque" for "Valor"
   Accept @ 7,52  Width 16 "$" picture "#*#.[##]" Tag "Valor" to VSD_Valor

   Label  @ 08,00 "Observa‡„o do Cheque" for "Obs"
   Accept @ 09,01  Width 67 "A70" picture "!*!" Tag "Obs" to VSD_Obs

Enddialog
Mouse Show
          
EndProc ;Digita_Cheque_Show()

;*******************************************************************************
;* Digitacao Ordem de Compra P£blica                                           *
;*******************************************************************************
Proc Digita_Cheque()
Private ncampo

ncampo=Field()
Digita_Cheque_Show() 

Moveto Field ncampo
Release Procs Digita_Cheque_Show, Digita_Cheque_Dialog

EndProc ;Digita_Cheque()                                          
                                                  
;-------------------------------------------------------------------------------

;*******************************************************************************
;* Pega Codigo da conta do Usuario se definada                                 *
;*******************************************************************************
Proc PegaContaCaixaUsuario()
private reguser, regcont

;; CX_CONTA_CAIXA <- esta variavel j  vem con um valor padrao do parametro ou destina‡Æo. S¢ muda conforme regra abaixo !!

if SYS_CHAPA_USUARIO<>"" and SYS_CHAPA_USUARIO<>"9999" 
   then 
        getrecord "\\sistemas\\cadastro\\usuarios" SYS_CHAPA_USUARIO to reguser
        if retval
           then if not isblank(reguser["Conta Padrao"])
                   then getrecord "\\sistemas\\ctacor\\conta" reguser["Conta Padrao"] to regcont
                        if retval
                           then CX_CONTA_CAIXA=reguser["Conta Padrao"]
                        endif
                endif   
        endif
endif   

release vars reguser, regcont

return CX_CONTA_CAIXA

EndProc ;PegaContaUsuario()                                          




;------- Digita Desconto Item --------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc DigitaDesctoItem_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, Temp  
Temp=True

If Disparo="OPEN"
   Then
        Dynarray DigitaDesctoWinArray[]
        Window Handle Dialog to DigitaDesctoJANELA
        Window GetAttributes DigitaDesctoJANELA To DigitaDesctoWinArray

        DigitaDesctoWinArray["CANMAXIMIZE"]=False
        DigitaDesctoWinArray["CANCLOSE"]   =False
        DigitaDesctoWinArray["HASSHADOW"]  =False
        DigitaDesctoWinArray["CANRESIZE"]  =False
        DigitaDesctoWinArray["CANMOVE"]    =False
        Window SetAttributes DigitaDesctoJANELA From DigitaDesctoWinArray

        Dynarray DigitaDesctoColorSettings[]
        DigitaDesctoColorSettings[01]=47 
        DigitaDesctoColorSettings[05]=39 
        DigitaDesctoColorSettings[06]=39 
        DigitaDesctoColorSettings[07]=46 
        Window SetColors DigitaDesctoJANELA From DigitaDesctoColorSettings

        if DigitaDescto_InicioDialog
           then DigitaDescto_InicioDialog=false
           
                if isblank(VSD_I_TipoDescto)
                   then Campo="I_TipoDescto"
                   else Campo="I_AliqDescto"
                endif
        endif   
        
        if DigitaDescto_refazershowdialog 
           then Campo=DigitaDescto_CampoAnterior 
                DigitaDescto_refazershowdialog=false 
        endif   
        
EndIf        

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="I_TipoDescto"      : CancelDialog
             Case Campo="I_AliqDescto"      : Campo="I_TipoDescto"
             Case Campo="I_VrDescto"        : Campo="I_AliqDescto"
             Case Campo="I_FlagDescto"      : Campo="I_AliqDescto"
           EndSwitch         

      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="I_TipoDescto":
                  VSD_I_TipoDescto=ControlValue("I_TipoDescto")
                  If isblank(VSD_I_TipoDescto)
                     Then VSD_I_TipoDesctoDescr=""
                          VSD_I_AliqDescto     =BlankNum()
                          VSD_VrDescto         =BlankNum()
                          AcceptDialog
                     Else 
                          Switch
                            case VSD_I_TipoDescto="U" : VSD_I_TipoDesctoDescr="Pre‡o Unit rio" 
                            case VSD_I_TipoDescto="T" : VSD_I_TipoDesctoDescr="Total Bruto" 
                          EndSwitch
                          Campo="I_AliqDescto"
                  EndIf
             Case Campo="I_AliqDescto":
                  VSD_I_AliqDescto=ControlValue("I_AliqDescto")
                  If VSD_I_AliqDescto>0
                     Then VSD_I_VrDescto=BlankNum()
                          Campo="I_FlagDescto"
     
                          DigitaDescto_CampoAnterior    =campo                 
                          DigitaDescto_refazershowdialog=true
                          AcceptDialog

                     Else VSD_I_AliqDescto=BlankNum()
                          Campo="I_VrDescto"
                  EndIf
             Case Campo="I_VrDescto":
                  VSD_I_VrDescto=ControlValue("I_VrDescto")
                  Campo="I_FlagDescto"

                  DigitaDescto_CampoAnterior    =campo
                  DigitaDescto_refazershowdialog=true
                  AcceptDialog

             Case Campo="I_FlagDescto":
                  VSD_I_FlagDescto=ControlValue("I_FlagDescto")
                  AcceptDialog

           EndSwitch           

   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case IsAssigned(SYS_APLICATIVO) And SYS_APLICATIVO  = "PEDIDO" And Campo="I_TipoDescto": 
                             MSGCAMPO="Aplicar o desconto sobre: U=Pre‡o Unit rio" 
  Case Campo="I_TipoDescto": MSGCAMPO="Aplicar o desconto sobre: U=Pre‡o Unit rio  T=Total Bruto"
  Case Campo="I_AliqDescto": MSGCAMPO="Informe a al¡quota de desconto"
  Case Campo="I_VrDescto"  : MSGCAMPO="Informe o valor do desconto"
  Case Campo="I_FlagDescto": MSGCAMPO="pausa, [ESC]=Abortar, [Enter]=Aplicar"
  OtherWise                : MSGCAMPO=""
EndSwitch

MontaRodapeSD(MSGCAMPO, TECLA)

Mouse Hide
RefreshDialog
Return Temp
EndProc ;DigitaDesctoItem_Dialog()

;*******************************************************************************
;* Show Dialog Digita Desconto Item                                            *
;*******************************************************************************
Proc DigitaDesctoItem_Show()
Private DigitaDesctoItem_Ok,
        tmpDigitaDesctoItem_Tipo_Desconto_Item,
        tmpDigitaDesctoItem_Desconto_Descricao,
        tmpDigitaDesctoItem_Taxa_Desconto_Unitario,
        tmpDigitaDesctoItem_Valor_Desconto_Unitario,
        tmpDigitaDesctoItem_Valor_Desconto_Item

;-- variaveis temporarias para retorno original --------------------------------
tmpDigitaDesctoItem_Tipo_Desconto_Item     =VSD_I_Tipo_Desconto_Item
tmpDigitaDesctoItem_Desconto_Descricao     =VSD_I_Desconto_Descricao
tmpDigitaDesctoItem_Taxa_Desconto_Unitario =VSD_I_Taxa_Desconto_Unitario
tmpDigitaDesctoItem_Valor_Desconto_Unitario=VSD_I_Valor_Desconto_Unitario
tmpDigitaDesctoItem_Valor_Desconto_Item    =VSD_I_Valor_Desconto_Item
;-------------------------------------------------------------------------------

DigitaDescto_InicioDialog     =true
DigitaDescto_refazershowdialog=false

while true

  If IsAssigned(SYS_APLICATIVO) And SYS_APLICATIVO  = "PEDIDO" 
     Then AUX_TIPO = "U"
     Else AUX_TIPO = "U,T"
  EndIf   

  VSD_I_TipoDescto            = VSD_I_Tipo_Desconto_Item
  Switch
    case VSD_I_TipoDescto="U" : VSD_I_TipoDesctoDescr="Pre‡o Unit rio" 
    case VSD_I_TipoDescto="T" : VSD_I_TipoDesctoDescr="Total Bruto" 
    otherwise                 : VSD_I_TipoDesctoDescr=""
  EndSwitch
  VSD_I_AliqDescto            = VSD_I_Taxa_Desconto_Unitario
  if VSD_I_AliqDescto>0
     then VSD_I_VrDescto      = blanknum()
     else VSD_I_VrDescto      = VSD_I_Valor_Desconto_Unitario
  endif   
  VSD_I_FlagDescto            = ""

  DigitaDescto_Simulador()

  Showdialog "Desconto no Item" Proc "DigitaDesctoItem_Dialog"
     Trigger "OPEN","ARRIVE"
      Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
       @ 11,43 height 12 width 31
  
     Label  @ 0,01 "Sobre:" for "I_TipoDescto"
     Accept @ 0,09 Width 4  "A1"  picture AUX_TIPO  Tag "I_TipoDescto"      to VSD_I_TipoDescto
     Accept @ 0,12 Width 17 "A15" picture "!*!"     Tag "I_TipoDesctoDescr" to VSD_I_TipoDesctoDescr
  
     Label  @ 1,05 "%:" for "I_AliqDescto"
     Accept @ 1,09 Width 20 "N" picture "#*#.[###]" Tag "I_AliqDescto"      to VSD_I_AliqDescto
  
     Label  @ 2,01 "Valor:" For "I_VrDescto"
     Accept @ 2,09 Width 16 "$" picture "#*#.[##]"  Tag "I_VrDescto"        to VSD_I_VrDescto
     Accept @ 2,25 Width 4  "a1" picture "!*!"      Tag "I_FlagDescto"      to VSD_I_FlagDescto
  
     @ 03,00 ??"Simula‡Æo____________________"
     @ 04,00 ?? VSD_I_DesctoCalc1
     @ 05,00 ?? VSD_I_DesctoCalc2
     @ 06,00 ?? VSD_I_DesctoCalc3
     @ 07,00 ?? VSD_I_DesctoCalc4
     @ 08,00 ?? VSD_I_DesctoCalc5
     @ 09,00 ?? VSD_I_DesctoCalc6
  
  Enddialog
  If Not RetVal
     Then DigitaDesctoItem_Ok=false
          quitloop
  endif

  VSD_I_Tipo_Desconto_Item     =VSD_I_TipoDescto
  VSD_I_Taxa_Desconto_Unitario =VSD_I_AliqDescto
  VSD_I_Valor_Desconto_Unitario=VSD_I_VrDescto
  
  if not DigitaDescto_refazershowdialog 
     then 
          if Checa_DescontoUnitario()
             then DigitaDesctoItem_Ok=true
                  quitloop
          endif         
  endif
endwhile

if not DigitaDesctoItem_Ok
   then 
        VSD_I_Tipo_Desconto_Item     =tmpDigitaDesctoItem_Tipo_Desconto_Item     
        VSD_I_Desconto_Descricao     =tmpDigitaDesctoItem_Desconto_Descricao
        VSD_I_Taxa_Desconto_Unitario =tmpDigitaDesctoItem_Taxa_Desconto_Unitario 
        VSD_I_Valor_Desconto_Unitario=tmpDigitaDesctoItem_Valor_Desconto_Unitario
        VSD_I_Valor_Desconto_Item    =tmpDigitaDesctoItem_Valor_Desconto_Item    
endif
CalcularPrecoTotal_Item()

Return DigitaDesctoItem_Ok
EndProc  ;DigitaDesctoItem_Show()

;*******************************************************************************
;* Digitacao de Desconto Item                                                  *
;*******************************************************************************
Proc DigitaDescto_Item()
Private ncampo, desctook

if PARAM_DESCUNIT<>"S"
   then return true
endif   

;;ncampo=Field()

desctook=false
if DigitaDesctoItem_Show()
   then desctook=true        
endif     
;;Moveto Field ncampo           

Release Procs DigitaDesctoItem_Show, DigitaDesctoItem_Dialog, DigitaDescto_Simulador

Release Vars VSD_I_TipoDescto, VSD_I_TipoDesctoDescr, VSD_I_AliqDescto, VSD_I_VrDescto, VSD_I_FlagDescto,
             DigitaDescto_InicioDialog,DigitaDescto_refazershowdialog,DigitaDescto_CampoAnterior,
             VSD_I_DesctoCalc1,VSD_I_DesctoCalc2,VSD_I_DesctoCalc3,
             VSD_I_DesctoCalc4,VSD_I_DesctoCalc5,VSD_I_DesctoCalc6,
             DigitaDesctoWinArray,DigitaDesctoJANELA,DigitaDesctoColorSettings
             
return desctook
EndProc ;DigitaDescto_Item()

;*******************************************************************************
;* Digitacao de Desconto Item                                                  *
;*******************************************************************************
Proc DigitaDescto_Simulador()

CalcularPrecoTotal_Item()

VSD_I_DesctoCalc1=""
VSD_I_DesctoCalc2=""
VSD_I_DesctoCalc3=""
VSD_I_DesctoCalc4=""
VSD_I_DesctoCalc5=""
VSD_I_DesctoCalc6=""

Switch
  case VSD_I_TipoDescto="U" : VSD_I_DesctoCalc1="   Pre‡o Unit rio:"+Format("W11.2,EIC",VSD_I_Preco_Unitario)
                              VSD_I_DesctoCalc2="Desconto Unit rio:"+Format("W11.3,EIC",VSD_I_Valor_Desconto_Unitario)
                              VSD_I_DesctoCalc3=" Unit rio L¡quido:"+Format("W11.2,EIC",VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                              VSD_I_DesctoCalc4="      Total Bruto:"+Format("W11.2,EIC",VSD_I_Preco_Bruto)
                              VSD_I_DesctoCalc5="         Desconto:"+Format("W11.2,EIC",VSD_I_Valor_Desconto_item)
                              VSD_I_DesctoCalc6="    Total L¡quido:"+Format("W11.2,EIC",VSD_I_Preco_Bruto-VSD_I_Valor_Desconto_item)
    
  case VSD_I_TipoDescto="T" : VSD_I_DesctoCalc4="      Total Bruto:"+Format("W11.2,EIC",VSD_I_Preco_Bruto)
                              VSD_I_DesctoCalc5="         Desconto:"+Format("W11.2,EIC",VSD_I_Valor_Desconto_item)
                              VSD_I_DesctoCalc6="    Total L¡quido:"+Format("W11.2,EIC",VSD_I_Preco_Bruto-VSD_I_Valor_Desconto_item)
  
EndSwitch

EndProc ;DigitaDescto_Simulador()


;-------------------------------------------------------------------------------


;*******************************************************************************
;* Rotina para checagem desconto unitario                                      *
;*******************************************************************************
Proc Checa_DescontoUnitario()
Private TX_DESCTO_BLOQUEIO_UNIT, DesctoOK, VrBase, TxCalc

If Not IsAssigned(PARAM_BLOQ_DESCTOUNIT) Then PARAM_BLOQ_DESCTOUNIT="N" EndIf

DesctoOk=True
If PARAM_BLOQ_DESCTOUNIT="S" Or PARAM_BLOQ_DESCTOUNIT="P"
   Then If Search("VEND",[FaturaC->Descricao da Destinacao])>0
           Then DesctoOk=False
                If PARAM_ALTERA_PRECO="S"
                   Then VrBase=VSD_I_Preco_Tabela
                   Else VrBase=VSD_I_Preco_Unitario
                EndIf
                Tx_Calc=(VSD_I_Valor_Desconto_Item/(VrBase*VSD_I_Quantidade))*100

                TX_DESCTO_BLOQUEIO_UNIT=TX_DESCTO_BLOQUEIO
                If PARAM_BLOQ_TPDESCTOUNIT="I"
                   Then TX_DESCTO_BLOQUEIO_UNIT=PARAM_BLOQ_TXDESCTOUNIT
                EndIf
                If PARAM_BLOQ_TPDESCTOUNIT="P"
                   Then Moveto [Codigo do Item]
                        GetRecord "\\Sistemas\\Estoque\\Iten_Com" [Codigo do Item] To REG_BUSCA_LOOKUP 
                        If RetVal 
                           Then TX_DESCTO_BLOQUEIO_UNIT=REG_BUSCA_LOOKUP["Desconto Maximo"]
                           Else TX_DESCTO_BLOQUEIO_UNIT=0
                        EndIf
                EndIf
                If Format("W12.2",tx_calc)<=Format("W12.2",TX_DESCTO_BLOQUEIO_UNIT)
                   Then DesctoOK=True
                EndIf
        EndIf
EndIf
If Not DesctoOK
   Then MSG="% Desconto concedido no Item acima do permitido !//"
        MSG=MSG+"Desconto m ximo = "+ Ltrim(Format("W6.2,EIC",TX_DESCTO_BLOQUEIO_UNIT)) +"%.  "
        Switch
          Case PARAM_BLOQ_TPDESCTOUNIT="I":MSG=MSG+"Conforme Parƒmetro //"
          Case PARAM_BLOQ_TPDESCTOUNIT="C":MSG=MSG+"Conforme a Condi‡„o de Pagto //"
          Case PARAM_BLOQ_TPDESCTOUNIT="P":MSG=MSG+"Conforme o Item //"
        EndSwitch
        MSG=MSG+"// Verificar Ok !"
        If PARAM_BLOQ_DESCTOUNIT="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then DesctoOk=True
                        Grava_LogEx("BIB_VEND DesctUnt")
                EndIf
           Else Mensagem(MSG)
        EndIf
EndIf
Return DesctoOk
EndProc  ;Checa_DescontoUnitario()

;*******************************************************************************
;* Calcular Preco Total Item                                                   *
;*******************************************************************************
Proc CalcularPrecoTotal_Item()
private txprtab,vr

If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
   then VSD_I_Preco_Bruto=round(VSD_I_Quantidade*VSD_I_Preco_Unitario,2)
   else VSD_I_Preco_Bruto=round(VSD_I_Preco_Unitario,2)
endif

switch
  case VSD_I_Tipo_Desconto_Item="U":
    switch
      case sys_codigo_Cliente="0431": 
        If VSD_I_Taxa_Desconto_Unitario>0
          Then VSD_I_Valor_Desconto_Unitario=0
               VSD_I_Valor_Desconto_Unitario=ndecimal((VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100,3)
        endif

        If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
           Then 
                s=Format("W10.2",VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
               ;s=Format("W10.2",nDecimal(VSD_I_Preco_Unitario,3)-nDecimal(VSD_I_Valor_Desconto_Unitario,3))
                vr=numval(s)
               ;vr=round(vr,2)
                vr=vr*VSD_I_Quantidade
                VSD_I_Valor_Desconto_Item=VSD_I_Preco_Bruto-vr
           Else VSD_I_Valor_Desconto_Item=VSD_I_Valor_Desconto_Unitario
        EndIf
        
      otherwise                     : 
        If VSD_I_Taxa_Desconto_Unitario>0
          Then VSD_I_Valor_Desconto_Unitario=0
               VSD_I_Valor_Desconto_Unitario=(VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100
        endif
          
        If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
           Then VSD_I_Valor_Desconto_Item=round(VSD_I_Quantidade*VSD_I_Valor_Desconto_Unitario,2)
           Else VSD_I_Valor_Desconto_Item=VSD_I_Valor_Desconto_Unitario
        EndIf

        VSD_I_Valor_Desconto_Item=round(VSD_I_Quantidade*VSD_I_Valor_Desconto_Unitario,2)
    endswitch

  case VSD_I_Tipo_Desconto_Item="T":
    If VSD_I_Taxa_Desconto_Unitario>0
      Then VSD_I_Valor_Desconto_Unitario=(VSD_I_Preco_Bruto*VSD_I_Taxa_Desconto_Unitario)/100
    endif
    VSD_I_Valor_Desconto_Item =round(VSD_I_Valor_Desconto_Unitario,2)
      
  otherwise                :
   VSD_I_Tipo_Desconto_Item     =""
   VSD_I_Desconto_Descricao     ="" 
   VSD_I_Taxa_Desconto_Unitario =blanknum()
   VSD_I_Valor_Desconto_Unitario=blanknum()
   VSD_I_Valor_Desconto_Item    =blanknum()

endswitch

If Isblank(VSD_I_Valor_Desconto_Item) Or VSD_I_Valor_Desconto_Item=0
   Then VSD_I_Tipo_Desconto_Item = ""
EndIf   

CarregarPrecoBrutoDesconto_Item()

VSD_I_Preco_Total=VSD_I_Preco_Bruto-VSD_I_Valor_Desconto_Item   
  
txprta=(((VSD_I_Preco_Bruto-VSD_I_Valor_Desconto_Item)/(VSD_I_Preco_Tabela*VSD_I_Quantidade))*100)-100
VSD_I_Taxa_PrUni_PrTab=LTrim(Format("W8.1,S+",txprta))+"%"

EndProc ;CalcularPrecoTotal_Item()

;*******************************************************************************
;* Calcular Preco Total Item                                                   *
;*******************************************************************************
Proc CarregarPrecoBrutoDesconto_Item()

switch
  case VSD_I_Tipo_Desconto_Item="U":
    If VSD_I_Taxa_Desconto_Unitario>0
      Then VSD_I_Desconto_Descricao     =ltrim(Format("W6.2,EIC",VSD_I_Taxa_Desconto_Unitario )+"%")
      else VSD_I_Desconto_Descricao     =ltrim(Format("W8.3,EIC",VSD_I_Valor_Desconto_Unitario)+"$")
    endif
      
  case VSD_I_Tipo_Desconto_Item="T":
    If VSD_I_Taxa_Desconto_Unitario>0
      Then VSD_I_Desconto_Descricao     =ltrim(Format("W6.2,EIC",VSD_I_Taxa_Desconto_Unitario)+"%")
      else VSD_I_Desconto_Descricao     =""
    endif
      
  otherwise                :
   VSD_I_Desconto_Descricao     ="" 

endswitch

EndProc ;CarregarPrecoBrutoDesconto_Item()


;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_Comissao()
Private REG_ITEM,Tx_Comissao_Item, Tx_Descto_Item, Tx_Encontrada, ii, comisok, CODIGO_TAB

If IsBlank(VSD_I_Preco_Tabela) And Not IsBlank([FaturaC->Codigo da Tabela])
   Then Mensagem("Tabela de Pre‡o n„o Encontrada, Verificar !")
        Return False
EndIf
GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM                 
If RetVal
   Then CODIGO_MARCA = REG_ITEM["Descricao da Marca"]
   Else CODIGO_MARCA = ""
EndIf                    
                 
CODIGO_TAB=VSD_I_Tabela
Moveto [Lookup_DesctoComis_Marca]
Ativa_Lookup()

Tx_Encontrada=False
For ii From 1 to 4
  Moveto [Codigo da Empresa]
  Locate [FaturaC->Codigo da Empresa], CODIGO_TAB,
         CODIGO_MARCA, [FaturaC->Composicao de Dias]
  If RetVal
     Then Tx_Encontrada=True
          QuitLoop
     Else Switch
            case ii=1 Or ii=3:
              CODIGO_MARCA="000"
            case ii=2:
              CODIGO_TAB  ="00000"
              CODIGO_MARCA=[Codigo da Marca]
          EndSwitch
  EndIf
EndFor

Tx_Comissao_Item=BlankNum()

If Tx_Encontrada
   Then Tx_Encontrada=False
        While [Codigo da Empresa      ]=[FaturaC->Codigo da Empresa] And
              [Codigo da Tabela       ]=CODIGO_TAB                   And
              [Codigo da Marca        ]=CODIGO_MARCA                 And
              [Composicao de Dias     ]=[FaturaC->Composicao de Dias]
          If [Taxa de Desconto]<=VSD_I_Taxa_Desconto_Unitario
             Then If ITEM_PROMOCIONAL="S"
                     Then Tx_Comissao_Item=[Taxa de Comissao Promocao]
                     Else Tx_Comissao_Item=[Taxa de Comissao Normal  ]
                  EndIf
                  Tx_Encontrada=True
             Else QuitLoop
          EndIf

          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
        VSD_I_Comissao_Item=Tx_Comissao_Item
EndIf

comisok=true
If IsBlank(Tx_Comissao_Item) Or Not Tx_Encontrada
   Then Mensagem("% Comiss„o na Tabela de Descontos/Comiss„o/Marca n„o encontrada,// Verificar Ok !")
        comisok=false
EndIf

Liberou_Bloqueio=False
If Tx_Comissao_Item=0 And Tx_Encontrada
   Then MSG="% Desconto concedido no Item fora da faixa !// //"
        MSG=MSG+"Conforme a Tabela de Descontos/Comiss„o/Marca,// Verificar Ok !"
        Libera_Bloqueio(MSG)
        If Ok<>"S"
           Then comisok=false
           Else Grava_LogEx("BIB_VEND AltPreco")
                Liberou_Bloqueio=True
        EndIf
EndIf

KeyPress "ESC"
Echo Off
Return comisok

EndProc  ;Checa_Comissao()

;*******************************************************************************
;* Rotina ShowPopup indicador de presen‡a                                      *
;*******************************************************************************
Proc IndicadorPresenca()

Echo Normal
Echo Off
ShowPopup " Indicador de Presen‡a NF-e/NFC-e " CENTERED
"0 = NÆo se aplica                  " : " NÆo se aplica (Nota Complementar ou de ajuste)         " : "0",
"1 = Presencial                     " : " Opera‡Æo presencial                                    " : "1",
"2 = Internet                       " : " Opera‡Æo nÆo presencial, pela Internet                 " : "2",
"3 = Teleatendimento                " : " Opera‡Æo nÆo presencial, Teleatendimento               " : "3",
"4 = NFC-e entrega domic¡lio        " : " NFC-e em opera‡Æo com entrega a domic¡lio              " : "4",
"5 = Presencial fora estabelecimento" : " Opera‡Æo presencial, fora do estabelecimento           " : "5",
"9 = NÆo presencial Outros          " : " Opera‡Æo nÆo presencial, outros                        " : "9" 
EndMenu
To MenuVar
Echo Off
If MenuVar="CANCELAR" or MenuVar="Esc"
   Then 
        return false
   Else 
        []=MenuVar
        return true
EndIf

endproc

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Valor_Importacao()

if [Faturac->Tipo Movimento Estoque]="E" And Substr([Faturac->CFO],1,1)="3"                          
   then APLIC_ORIGEM="FATURA"
        
        If SubStr(VSD_I_CFOP,1,1)="3"   
           then Play "FT_IMP"
           else if SubStr(RegItem["CFO"],1,1)="3"
                   Then
                        [II_BC             ]=BlankNum()
                        [II_Valor Imposto  ]=BlankNum()
                        [II_Valor DespAduan]=BlankNum()
                        [II_Valor IOF      ]=BlankNum()
                           
                        Play "FT_IMPE"
                endif           
        EndIf
EndIf

AcceptDialog

EndProc ;Valor_Importacao()

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc LOC_TAB_PRECO(PARAM)
Private PARAM

;*** Insere automaticamente a Tabela de Pre‡o "A VISTA" caso a CondPagto seja A VISTA
If Search(PARAM,[Descricao CondPagto])>0
   Then Moveto [Codigo da Tabela]
        Ativa_Lookup()
        Moveto [Descricao da Tabela]
        Locate Pattern ".."+PARAM+".."
        If RetVal
           Then CODTABP=[Codigo da Tabela]
           Else CODTABP=""
        EndIf
        KeyPress "ESC"
        []=CODTABP

        Release Vars CODTABP
EndIf

EndProc ;LOC_TAB_PRECO()

;*******************************************************************************
;* Rotina para checagem MVA                                                    *
;*******************************************************************************
Proc Checa_MVA(rotina,ticms,cod)
Private rotina,a,b,cod,DESCRICAO_DESTINACAO,TIPO_MOVIMENTO_ESTOQUE,UF_ROTINA, regdestin
 
If rotina = "FATURA" or rotina="ORCA"
   Then ;Checa_MVA ajustado p/ Bib_Vend *Fatura e Orca (algumas particularidades)   
        Switch
          Case rotina="ORCA"   : GetRecord "\\Sistemas\\Vendas\\P_Orca" [OrcaC->Codigo da Empresa] To PARAM_IMPOSTOS
                                 If RetVal
                                    Then PARAM_IMPOSTOS = PARAM_IMPOSTOS["Impostos"]
                                    Else Return False
                                 EndIf

          Case rotina="FATURA" : If Not IsAssigned(PARAM_IMPOSTOS)
                                    Then GetRecord "\\Sistemas\\Vendas\\P_Fatura" [FaturaC->Codigo da Empresa] To PARAM_IMPOSTOS
                                         If RetVal
                                            Then PARAM_IMPOSTOS = PARAM_IMPOSTOS["Impostos"]
                                            Else Return False
                                         EndIf
                                 EndIf        
        EndSwitch            
EndIf

Switch
  Case rotina = "NOTA"   : TIPO_MOVIMENTO_ESTOQUE = [NotaC->Tipo Movimento Estoque]
                           DESCRICAO_DESTINACAO   = [NotaC->Descricao da Destinacao]
                           UF_ROTINA              = [NotaC->UF]

  Case rotina = "PEDIDO" : TIPO_MOVIMENTO_ESTOQUE = "S"
                           DESCRICAO_DESTINACAO   = [PedidoC->Descricao da Destinacao]
                           UF_ROTINA              = [PedidoC->UF]

                           GetRecord "\\Sistemas\\Vendas\\Destin" [PedidoC->Codigo da Destinacao] To regdestin
                           If RetVal
                              then TIPO_MOVIMENTO_ESTOQUE = regdestin["Tipo Movimento Estoque"]
                           endif

  Case rotina = "ORCA"   : TIPO_MOVIMENTO_ESTOQUE = "S"
                           DESCRICAO_DESTINACAO   = [OrcaC->Descricao da Destinacao]
                           UF_ROTINA              = [OrcaC->UF]                         

                           GetRecord "\\Sistemas\\Vendas\\Destin" [OrcaC->Codigo da Destinacao] To regdestin
                           If RetVal
                              then TIPO_MOVIMENTO_ESTOQUE = regdestin["Tipo Movimento Estoque"]
                           endif

  OtherWise              : TIPO_MOVIMENTO_ESTOQUE = [FaturaC->Tipo Movimento Estoque]
                           DESCRICAO_DESTINACAO   = [FaturaC->Descricao da Destinacao]
                           UF_ROTINA              = [FaturaC->UF]
EndSwitch                                                                                             
 
If ticms="S" And PARAM_IMPOSTOS="S" And
   ((Search("VENDA",DESCRICAO_DESTINACAO)>0 And TIPO_MOVIMENTO_ESTOQUE="S") Or
    (Search("BONIF",DESCRICAO_DESTINACAO)>0 And TIPO_MOVIMENTO_ESTOQUE="S") Or
    (Search("DEVOL",DESCRICAO_DESTINACAO)>0 And TIPO_MOVIMENTO_ESTOQUE="E")) 
   Then GetRecord "\\Sistemas\\Estoque\\Tabmva" [Codigo MVA] To REG_BUSCA_LOOKUP
        If Not RetVal 
           Then Return False
        EndIf
        [MVA    ]=REG_BUSCA_LOOKUP["MVA_1"]
        VSD_I_MVA=[MVA]
        
        If UF_EMPRESA=UF_ROTINA Or (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
           Then ;Checa_MVA ajustado p/ Bib_Vend *Fatura e Pedido (algumas particularidades) 
                If rotina = "FATURA" Or rotina = "PEDIDO"
                   Then 
                        if sys_Codigo_Cliente="0112"
                           then [ICMS_ST_Aliquota ]=[Aliquota de ICMS]
                        endif        
                EndIf
                Return True
        EndIf   
        If REG_BUSCA_LOOKUP["Estados MVA_Ajustado"]="TODOS" Or
          Search(UF_ROTINA,REG_BUSCA_LOOKUP["Estados MVA_Ajustado"])>0
          Then 
               a=1+([MVA]/100)
               b=(1-(UF_ALIQUOTA_ICMS/100))/(1-(UF_ALIQUOTA_ICMS_INTERNA/100))
               [MVA]    =Round(((a*b)-1)*100,2)
               VSD_I_MVA=[MVA         ]   
          Else [MVA                      ]=BlankNum()
               If rotina <> "ORCA" And rotina <> "PEDIDO"
                  Then [ICMS_ST_Aliquota Reduzida]=BlankNum()
               EndIf
               [ICMS_ST_Aliquota         ]=BlankNum()
               VSD_I_MVA           =[MVA             ]   
               VSD_I_AST           =[ICMS_ST_Aliquota]
               If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                  Then 
                       VSD_I_TICMS         ="O"
                       VSD_I_CSOSN         =SubStr(VSD_I_CST,1,1)+"900"

                       [CSOSN             ]=SubStr(VSD_I_CSOSN,2,3)
                       [Tributacao de ICMS]=VSD_I_TICMS
                  Else 
                       VSD_I_TICMS         ="O"
                       VSD_I_CST_Item      =SubStr(VSD_I_CST_Item,1,1)+"90"
                       
                       [Tipo Tributacao   ]=VSD_I_CST_Item
                       [Tributacao de ICMS]=VSD_I_TICMS
               EndIf   
        EndIf
   Else [Codigo MVA      ]=""
        [MVA                      ]=BlankNum()   
        If rotina <> "ORCA" And rotina <> "PEDIDO"
           Then [ICMS_ST_Aliquota Reduzida]=BlankNum()
        EndIf
        [ICMS_ST_Aliquota         ]=BlankNum()

        VSD_I_MVA         =[MVA         ]
        VSD_I_AST         =[ICMS_ST_Aliquota]   
EndIf
Return True

EndProc ;Checa_MVA()

;*******************************************************************************
;* Rotina release vars array itens                                             *
;*******************************************************************************
Proc DestruirArrayItens()

;-------- Variaveis para calculo de impostos por item --------------------------
Release Vars it_sqItem, It_cdItem, It_tpitem, It_prtotal, It_desctoItem, It_cfop, it_codmva, it_ncm, It_extipi,
             It_txdescto, It_descto, It_frete, It_seguro, It_outdesp,
             It_cst_icms, It_trib_icms, It_red_icms, It_aliq_icms, It_bc_icms, It_vr_icms,
             It_vrdeson_icms, It_mtdeson_icms,
             It_csosn_icms, It_aliq_icmscred, It_vr_icmscred,
             It_mva, It_red_st, It_aliq_st, It_bc_st, It_vr_st,
             It_cst_ipi, It_trib_ipi, It_aliq_ipi, It_bc_ipi, It_vr_ipi,
             It_trib_issqn, It_aliq_issqn, It_bc_issqn, It_vr_issqn,
             It_cst_pis, It_aliq_pis, It_bc_pis, It_vr_pis,
             It_cst_cofins, It_aliq_cofins, It_bc_cofins, It_vr_cofins, 
             it_vr_ii,
             it_aliq_fcp, it_bc_fcp, it_vr_fcp, 
             it_aliq_fcpst, it_bc_fcpst, it_vr_fcpst,    
             it_pst, it_aliq_fcpstret, it_bc_fcpstret, it_vr_fcpstret,
             it_aliq_fcpufdest, it_bc_fcpufdest, it_vr_fcpufdest,
             it_aliq_icmsufdest, it_bc_icmsufdest, it_vr_icmsufdest,
             it_aliq_icmsinter, it_aliq_icmsinterpart, it_vr_icmsufremet,
             It_vr_tottrib, It_vr_ipidevol, It_porc_ipidevol

endproc

;*******************************************************************************
;* Consulta IBPT                                                               *
;*******************************************************************************
Proc Pega_AliqIBPT(cst, tpitem, ncm, ex)
private cst, tpitem, ncm, ex, orig, codigo, tipo, aliq, regTibpt, wii

orig=SubStr(cst,1,1)
Switch
 Case orig="1" Or orig="2" Or       
      orig="6" Or orig="7"    : orig="I"  
 OtherWise                    : orig="N"
EndSwitch

aliq=0
Switch
 Case TpItem="C" :
    tipo="2"
    If ncm>0
       Then codigo=StrVal(ncm)
       Else codigo=""
    EndIf
       ex=""
 OtherWise                    : 
     tipo="0"
   codigo=ncm
EndSwitch

for wii from 1 to 2
  getrecord "\\Sistemas\\Vendas\\Tibpt" UF_EMPRESA,codigo,ex,tipo to regTibpt
  if retval
    Then 
         Switch
           Case orig="N" : aliq=regTibpt["NacionalFederal" ]  
           Case orig="I" : aliq=regTibpt["ImportadoFederal"]  
         EndSwitch
         aliq=aliq+regTibpt["Estadual" ]+regTibpt["Municipal" ]
         quitloop
    else
         getrecord "\\Sistemas\\Vendas\\Tibpt" UF_EMPRESA,"MEDIA",ex,tipo to regTibpt
         if retval
           Then 
                Switch
                  Case orig="N" : aliq=regTibpt["NacionalFederal" ]  
                  Case orig="I" : aliq=regTibpt["ImportadoFederal"]  
                EndSwitch
                aliq=aliq+regTibpt["Estadual" ]+regTibpt["Municipal" ]
                quitloop
         endif  
  endif

  ex=""  
endfor

return aliq
EndProc

;*******************************************************************************
;* Rotina tira string de Observacao da Nota Fiscal                             *
;*******************************************************************************
Proc TirarMensagemObs(si,sf)
private si, sf, posini, posfim, obstemp1A, wiobs, tamanhoobs

posini=SearchFrom(si,[Observacao na Nota Fiscal],1)
If posini>0                   
   Then posfim=SearchFrom(sf,[Observacao na Nota Fiscal],posini)
        If posfim>0       
           Then
                obstemp1A=""
                posini   =posini-1
                if posini>0 
                   then for wiobs from 1 to posini
                          obstemp1A=obstemp1A+SubStr([Observacao na Nota Fiscal],wiobs,1)
                        endfor
                endif   
                
                posfim   =posfim+len(sf)-1
                tamanhoobs=Len([Observacao na Nota Fiscal])-posfim
                if tamanhoobs>0
                   then for wiobs from 1 to tamanhoobs
                          obstemp1A=obstemp1A+SubStr([Observacao na Nota Fiscal],(posfim+wiobs),1)
                        endfor
                endif
                
                switch
                  case obstemp1A<>""                   : [Observacao na Nota Fiscal]=obstemp1A 
                  otherwise                            : [Observacao na Nota Fiscal]=""
                endswitch
        EndIf
EndIf

Endproc

;*******************************************************************************
;* Rotina para Calculos de Caracteristicas de Volumes                          *
;*******************************************************************************
Proc Closed CALC_VOLUMES(PARAM)
UseVars AutoLib, ErrorProc, NVOL, PESOL, PESOB, DMARCA, NMARCA, DUNID, NUNID, REG_ITEM, 
        PARAM,ITEM_UNIDADE, ITEM_MARCA, regunidades

Switch
  Case PARAM="FATURA"       : Moveto "FaturaI"
  Case PARAM="EXPED"        : Moveto "ExpedI"
  Case PARAM="EXPED_ETIQ"   : Moveto "ExpedIQ"
  Case PARAM="EXPED_OF"     : Moveto "ExpedOfI"
  Case PARAM="PEDIDO"       : Moveto "PedidoI"
  Case PARAM="PEDIDO_GRADE" : Moveto "PedidoG"
EndSwitch
  
NVOL   =0
PESOL  =0
PESOB  =0
DMARCA =""
NMARCA =0
DUNID  =""
NUNID  =0
Scan
  GetRecord "\\Sistemas\\Estoque\\Unidades" [Unidade Fiscal] To regunidades
  If RetVal
     Then ITEM_UNIDADE = regunidades["Descricao da Unidade"]
     Else ITEM_UNIDADE = ""
  EndIf

  GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
  If RetVal
     Then ITEM_MARCA = REG_ITEM["Descricao da Marca"]
          If PARAM="EXPED" Or PARAM="EXPED_ETIQ" Or PARAM="EXPED_OF"
             Then AUX_UND = [Unidade Fiscal]
                  AUX_VOL = REG_ITEM["Volumes"]
                  AUX_PLQ = REG_ITEM["Peso Liquido"]
                  AUX_PBR = REG_ITEM["Peso Embalagem"]
                  AUX_MAR = REG_ITEM["Descricao da Marca"]
             Else AUX_VOL = [Volumes]
          EndIf        
     Else Loop
  EndIf   
  If DMARCA<>ITEM_MARCA And ITEM_MARCA<>""
     Then DMARCA=ITEM_MARCA
          NMARCA=NMARCA+1
  EndIf
  If DUNID <>ITEM_UNIDADE And ITEM_UNIDADE<>""
     Then DUNID =ITEM_UNIDADE
          NUNID =NUNID+1
  EndIf
  
  Switch
    Case PARAM="EXPED"      Or 
         PARAM="EXPED_ETIQ" Or
         PARAM="EXPED_OF"    : NVOL = NVOL +NDecimal(([Quantidade_Expedida]*AUX_VOL),2)
                               If AUX_UND="KG"
                                  Then PESOL=PESOL+NDecimal([Quantidade_Expedida],2)
                                       PESOB=PESOB+NDecimal([Quantidade_Expedida],2)
                                  Else PESOL=PESOL+NDecimal(([Quantidade_Expedida]*AUX_PLQ),2)
                                       PESOB=PESOB+NDecimal(([Quantidade_Expedida]*AUX_PBR),2)
                               EndIf
     OtherWise               : NVOL =NVOL +NDecimal(([Quantidade]*AUX_VOL),2)
                               PESOL=PESOL+NDecimal(([Quantidade]*[Peso Liquido]),2)
                               PESOB=PESOB+NDecimal(([Quantidade]*[Peso Embalagem]),2)                               
  EndSwitch
  If AUX_VOL>0 And AUX_VOL<1
     Then NUNID =NUNID+2
  EndIf
EndScan   

Switch
  Case PARAM="FATURA"        : Moveto "FaturaC"
  Case PARAM="EXPED"        Or 
       PARAM="EXPED_ETIQ"    : Moveto "ExpedC"
  Case PARAM="EXPED_OF"      : Moveto "ExpedOfC"
  Case PARAM="PEDIDO"       Or 
       PARAM="PEDIDO_GRADE"  : Moveto "PedidoC"  
EndSwitch
Release Vars AUX_UND,AUX_VOL,AUX_PLQ,AUX_PBR,AUX_MAR

If (PESOB+PESOL)>0
   Then [Peso Bruto  ]=PESOB+PESOL
   Else [Peso Bruto  ]=BlankNum()
EndIf
If PESOL>0
   Then [Peso Liquido]=PESOL
   Else [Peso Liquido]=BlankNum()
EndIf
If NVOL>0
   Then If NVOL-Int(NVOL)>0
           Then NVOL=NVOL+1
        EndIf
        [Numero de Volumes]=NVOL
   Else [Numero de Volumes]=BlankNum()
EndIf
If NMARCA>1
   Then [Marca dos Volumes]="DIVERSAS"
   Else [Marca dos Volumes]=DMARCA
EndIf
If NUNID>1
   Then [Especie de Volumes]="VOLUME(S)"
   Else [Especie de Volumes]=DUNID
EndIf

Moveto [Numero de Volumes]

EndProc   ;  (Calc_Volumes)

;******************************************************************************
;** Monta Procedures                                                        ***
;******************************************************************************
WriteLib "\\Sistemas\\Vendas\\Bib_vend"
         VrTCCredito_Dialog, VrTCCredito_Show, VrTCCredito_Digita, 
         VrEntrada_Dialog  , VrEntrada_Show  , VrEntrada_Digita,
         SomaVenctos, Checa_CompDias, Enderecos, 
         SomatoriaDosItens, SomatoriaDosItensTroca,Pega_Endereco_Fatura,
         PegaCondicaoeFormaPagamento, LiberaCondicaoeFormaPagamento,
         ShowDialog_Endereco,Carrega_Endereco,Endereco_Dialog, ShowDialog_EnderecoEntrega, ShowDialog_EnderecoRetirada, ShowDialog_EnderecoCobranca,
         Verifica_Representante, JC_Dialog, JC_Show, JC_Digita,
         Digita_Frete, Digita_Frete_Show, Digita_Frete_Dialog,
         Digita_Cartao, Digita_Cartao_Show, Digita_Cartao_Dialog,
         Digita_Descto, Digita_Descto_Show, Digita_Descto_Dialog,
         Datas_Of,Datas_Of_Show,Datas_Of_Dialog,
         Ordem_Compra_Publica, Ordem_Compra_Publica_Show, Ordem_Compra_Publica_Dialog,
         Digita_Obs, Digita_Obs_Show, Digita_Obs_Dialog,
         Ler_Gravar_Cheque,Digita_Cheque, Digita_Cheque_Show, Digita_Cheque_Dialog,
         PegaContaCaixaUsuario,
         DigitaDescto_Item,DigitaDesctoItem_Show,DigitaDesctoItem_Dialog,DigitaDescto_Simulador,
         CalcularPrecoTotal_Item, CarregarPrecoBrutoDesconto_Item, Checa_DescontoUnitario, Checa_Comissao,
         IndicadorPresenca,Valor_Importacao,LOC_TAB_PRECO,Checa_MVA,
         DestruirArrayItens, Pega_AliqIBPT, TirarMensagemObs,
         Digita_Troco,Digita_Troco_Show,Digita_Troco_Dialog,CALC_VOLUMES
