;** 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() 
;Ultima Alteracao: 04/10/2019 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado Mensagem_Expedicao()
;Ultima Alteracao: 04/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado Limite_Credito() 
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Movido Pega_Preco() Bib_Fat p/ Bib_Vend **Bib_Tro e Bib_Bal tamb‚m irÆo utilizar desta proc
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: CALC_VENCTOS(),Cria_Ficha(),Dias_Atraso(),CHEQUES(),Checa_SPC() -> Movido Bib_Fat,Bib_Bal e Bib_Tro p/ Bib_Vend
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Checa_Comissao_Vendedor(),Excluir_Rateio_Comissao(),RATEIO_COMISSAO_VENCTOS() -> Movido Bib_Fat,Bib_Bal p/ Bib_Vend
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Mensagem_Venda(),Rateio_BC_Itens() -> Movido Bib_Fat,Bib_Bal p/ Bib_Vend
;Ultima Alteracao: 12/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Movido Calcular_Vencimentos(),Data_Dialog() Bib_Fat,Bib_Tro p/ Bib_Vend **Bib_Bal tamb‚m utilizar  desta proc
;Ultima Alteracao: 13/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Movido Checa_Estoque() e Estoque() Fatura, Balcao e Troca p/ Bib_Vend 
;Ultima Alteracao: 13/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Movido FATURA_NLancto() Fatura, Balcao e Troca p/ Bib_Vend  e add FATURA_NLancto_Particularidade() 
;Ultima Alteracao: 13/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Movido Cliente_Inativo() Troca p/ Bib_Vend
;Ultima Alteracao: 19/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes RATEIO_COMISSAO_VENCTOS()           
;Ultima Alteracao: 20/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Limite_Credito()
;Ultima Alteracao: 05/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0444#
;Ultima Alteracao: 31/12/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_Estoque()           
;Ultima Alteracao: 06/01/2020 por Bruno Carvalho                           
;Motivo Alteracao: Movido Cliente_Inativo() Troca p/ Bib_Proc *NÆo sera usado apenas no TROCA
;Ultima Alteracao: 27/02/2020 por Kamila Gomes                           
;Motivo Alteracao: Ajuste proc FATURA_NLancto
;Ultima Alteracao: 06/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0436 FATURA_NLancto_Particularidade()                    
;Ultima Alteracao: 27/04/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado TipoItem_ControlaEstoque()
;Ultima Alteracao: 30/06/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0337 pegar forma pagto conforme parametro                
;Ultima Alteracao: 05/08/2020 por Bruno Carvalho
;Motivo Alteracao: Movido NF_NFE40 e NF_NCE40 -> BIB_VEND 
;    ** Procs NFE_GravaCampo,NFE_GravarCampoMemo,NFE_PegaEndereco,NFE_Tira_CharNFE,NFE_CalcMod11,NFE_CalcChaveAcesso,NFE_MontarFormasPagtos
;Ultima Alteracao: 05/08/2020 por Bruno Carvalho
;Motivo Alteracao: Movido NF_NSE01 -> BIB_VEND **NFE_GravaCampo,NFE_GravarCampoMemo,NFE_PegaEndereco,NFE_Tira_CharNFE,NFE_CalcChaveAcesso
;Ultima Alteracao: 05/08/2020 por Bruno Carvalho
;Motivo Alteracao: Movido NF_CFE99 -> BIB_VEND **NFE_PegaEndereco,NFE_CalcMod11
;Ultima Alteracao: 24/08/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nfce                    
;Ultima Alteracao: 26/08/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0112 regra tributa‡Æo
;Ultima Alteracao: 28/08/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem_venda() bib_vend, regra venda ou por cliente
;Ultima Alteracao: 09/09/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Digita_Troco()
;Ultima Alteracao: 16/09/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SomatoriaDosItens()
;Ultima Alteracao: 25/09/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado Transportador_Show,Transportador_Dialog,Carrega_Transportador
;Ultima Alteracao: 29/09/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0314 msg ultima compra +10 meses
;Ultima Alteracao: 29/09/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado Carrega_Transportador,Transportador_Dialog,ShowDialog_Transportador,ShowDialog_Redespacho
;                  ShowDialog_TranspRedespacho
;Ultima Alteracao: 29/09/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado VSDGCODREDESPACHO e Ajustes no Format p/ vari vel VSDGREDESPACHO
;Ultima Alteracao: 07/10/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado BibVend_SetaVariaveis()
;Ultima Alteracao: 08/10/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes proc opcao()               
;Ultima Alteracao: 16/10/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado n£mero da cota‡Æo na vari vel VSDGTRANSPORTADOR
;Ultima Alteracao: 30/10/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado FiltrarFatura(), SD_DialogOF(), SelecionaFiltroFatura() e LimpaFiltroFatura()
;Ultima Alteracao: 10/11/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IsRegimeSimplesNacional, IsRegimeSimplesNacionalESRB
;Ultima Alteracao: 13/11/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado ajustes para "NOTA" nas proc FiltroFatura()
;Ultima Alteracao: 19/11/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado novos filtros SelecionaFiltroFatura(), SD_DialogOF() e FiltrarFatura()
;Ultima Alteracao: 21/01/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado vari vel CIDADE na proc LimpaFiltroPedido() e LimpaFiltroFatura()
;Ultima Alteracao: 23/01/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Numero do Pedido] na proc FiltroFatura() 
;Ultima Alteracao: 17/02/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao localizar registro no "FaturaCC" na proc JC_Show() *GetRecord
;Ultima Alteracao: 19/02/2021 por Bruno Carvalho
;Motivo Alteracao: Comentado o processo que ajusta o vr do vencimento p/ inteiro e joga a diferen‡a na ultima parcela #0232# -> Calcular_Vencimentos()
;Ultima Alteracao: 25/02/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao verificar os lan‡amentos da pessoa no contas a receber na proc Limite_Credito() p/ #0397#
;Ultima Alteracao: 15/03/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes no filtro do balcao, para iniciar filtrando documentos [Docto Nota Gerada] "Blank or RO.."
;Ultima Alteracao: 15/03/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ IsAssigned(PARAM_CONDPAGTO) na proc PegaCondicaoeFormaPagamento()    
;Ultima Alteracao: 16/03/2021 por Bruno Carvalho
;Motivo Alteracao: Ajuste no filtro p/ TROCA e BALCAO. [Sistema Gerador]=TR e [Sistema Gerador]=BA  
;Ultima Alteracao: 10/05/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes manter valor anterior justificativa
;Ultima Alteracao: 13/05/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes no final da proc Carrega_Transportador(), comentado ANT_FIELD
;Ultima Alteracao: 19/06/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo para PIX nas procs Digita_Pix_Dialog,Digita_Pix_Show,Digita_Pix
;Ultima Alteracao: 21/06/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PIX   
;Ultima Alteracao: 22/06/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc Calcular_Vencimentos() para ajustar o [codigo da conta] ao realizar um PIX
;Ultima Alteracao: 23/06/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes Digita_Pix(), para buscar automaticamente o PIX, se identificado no P_CARTAO apenas um PIX cadastrado para empresa

@ 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 120

;------- 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 IsAssigned(PARAM_CONDPAGTO) And PARAM_CONDPAGTO="S" 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,PX")=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,PX")=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()
private isfaturai

isfaturai=false
if table()="Faturai" then isfaturai=true endif

VSVRMERC = 0
VSQTDE   = 0
VCITENS  = 0

scan
  if isfaturai and [Situacao_Item]="C" then loop endif
  
  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, SYS_APLICATIVO

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 = ""
    If VSD_C_Endereco<>"" And VSD_C_Endereco<>"O MESMO" 
       Then VSDGENDCOB = Format("W41",VSD_C_Endereco)+Format("W11",VSD_C_CEP)+VSD_C_Cidade+"/"+VSD_C_UF
    EndIf 
    
    VSDGENDENT = ""
    If VSD_E_Endereco<>"" And VSD_E_Endereco<>"O MESMO" 
       Then VSDGENDENT = Format("W41",VSD_E_Endereco)+Format("W11",VSD_E_CEP)+VSD_E_Cidade+"/"+VSD_E_UF
    EndIf   
    
    VSDGENDRET = ""
    If VSD_R_Endereco<>"" And VSD_R_Endereco<>"O MESMO"
       Then VSDGENDRET = Format("W41",VSD_R_Endereco)+Format("W11",VSD_R_CEP)+VSD_R_Cidade+"/"+VSD_R_UF
    EndIf
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 62 0, 0, 0, 8 

   @ 1,1 ?? "Local de Entrega/Recebedor"
   paintcanvas attribute 62 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 62 0,10, 0, 19

   @ 1,11 ?? "Local de Retirada/Expedidor "
   paintcanvas attribute 62 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 62 0,21, 0, 30

   @ 1,22 ?? "Local de Cobran‡a "
   paintcanvas attribute 62 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, REG_FATURACC

TabAnt  =Table()
CampoAnt=Field()

;Echo Normal
;Echo Off

;Canvas Off

VSDGDTINI=Today()
VSDGHRINI=Time()
If Not IsAssigned(VSDGJUST)  Then VSDGJUST=""  EndIf

LimpAguarde() 
MSGCAMPO=""

GetRecord "FaturaCC" ORDFAT To REG_FATURACC 
If RetVal
   Then 
        if not isblank(REG_FATURACC["Data_Inicio_Contingencia"])
           then VSDGDTINI = REG_FATURACC["Data_Inicio_Contingencia"]
        endif   
        if not isblank(REG_FATURACC["Hora_Inicio_Contingencia"])
           then VSDGHRINI = REG_FATURACC["Hora_Inicio_Contingencia"]
        endif   
        if not isblank(REG_FATURACC["Justificativa"])
           then VSDGJUST  = REG_FATURACC["Justificativa"           ]
        endif        
EndIf

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 Moveto "FaturaCC"  
        Moveto [Numero da OF]
        Locate ORDFAT
        If Not RetVal
           Then End Down
        EndIf
        [Numero da OF            ]=ORDFAT
        [Data_Inicio_Contingencia]=VSDGDTINI
        [Hora_Inicio_Contingencia]=VSDGHRINI
        [Justificativa           ]=VSDGJUST
        UnLockRecord
   else GRAVA_CONTINGENCIA=False
EndIf 

Moveto TabAnt
Moveto Field CampoAnt
   
Echo Off
Canvas On
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
MSG_CAMPO=""
TECLA    =""

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"] = 27:
           Temp=False
           Switch
              Case Campo="I_VrTroco" : CancelDialog
              Case Campo="YES"       : Campo="I_VrTroco"
           EndSwitch            
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch              
              Case Campo="I_VrTroco" :
                   VSD_VrTroco=ControlValue("I_VrTroco")

                   Switch
                     Case VSD_VrTroco = 0 : Mensagem("O Valor deve ser diferente de ZERO !") 
                                            VrTroco=0
                                            TR=1

                     Case VSD_VrTroco < 0 : Mensagem("O Valor deve ser maior que ZERO !")
                                            TR=1
                                            VrTroco=0 

                     Case VSD_VrTroco <= Digita_Troco_VrNf : Mensagem("O Valor deve ser maior que o Valor da Nota Fiscal !")
                                                             VrTroco=0
                                                             TR=1

                     OtherWise : VrTroco=VSD_VrTroco-Digita_Troco_VrNf
                                 TR=Len(VSD_VrTroco)
                                 Campo="YES" 
                   EndSwitch
                   
              Case Campo="YES" :
                   AcceptDialog
           EndSwitch           
   EndSwitch
EndIf

If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf

Switch
  Case Campo="I_VrTroco":
       MSG_CAMPO="Informe o Valor Recebido"
  OtherWise:
       MSG_CAMPO=""
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
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              

If Not IsAssigned(INICIO_DIALOG) Then INICIO_DIALOG=False EndIf
If Not IsAssigned(OP_SHOWD)      Then OP_SHOWD=""         EndIf 

;Echo Normal
;Echo Off
Mouse Show

If [Valor Recebimento]>0
   Then VSD_VrTroco = [Valor Recebimento]
        VrTroco     = [Valor Troco      ]
        TR          = Len(VSD_VrTroco) 
EndIf                   
Showdialog "Valor p/ Troco" Proc "Digita_Troco_Dialog"
  Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ENTER","ESC","ClearArea"
     @ 09,19 height 09 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
    
     Pushbutton @ 05,16 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
 
EndDialog   
If Retval 
  Then [Valor Recebimento]=VSD_VrTroco
       [Valor Troco      ]=VrTroco
EndIf   

Release Vars TR

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 Pix ------------------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Digita_Pix_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="NomePix"
              Then If Campo="NomePix"
                       Then If AUX_PROCESSO="NOTA"
                               Then Switch
                                      Case [NotaV->Forma de Pagamento] = "PX" Or [NotaC->Forma de Pagamento] = "PX"     : TP_PIX = "PIX"
                                    EndSwitch
                               Else Switch
                                      Case [FaturaV->Forma de Pagamento] = "PX" Or [FaturaC->Forma de Pagamento] = "PX" : TP_PIX = "PIX"
                                    EndSwitch
                            EndIF                   
                            Monta_Opcoes("P_Cartao",TP_PIX)
                            
                            If Seleciona_Opcoes("P_Cartao",TP_PIX)
                               Then VSD_NomePix = 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="NPix"       : CancelDialog
             Case Campo="NomePix"    : Campo="NPix"
           EndSwitch

      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="NPix":
                  VSD_NPix=ControlValue("NPix")
                  Campo="NomePix"
            Case Campo="NomePix":
                  VSD_NomePix=ControlValue("NomePix")
                  If Not IsBlank(VSD_NomePix)
                     Then If AUX_PROCESSO="NOTA"
                             Then Switch
                                    Case [NotaV->Forma de Pagamento] = "PX" Or [NotaC->Forma de Pagamento] = "PX" : TP_PIX = "PIX"
                                  EndSwitch
                             Else Switch
                                    Case [FaturaV->Forma de Pagamento] = "PX" Or [FaturaC->Forma de Pagamento] = "PX" : TP_PIX = "PIX"
                                  EndSwitch
                           EndIf
                           
                           VSD_TIPO = ""
                           VSD_CODIGO_CONTA = ""    
                           If AUX_PROCESSO="NOTA"
                              Then GetRecord "\\Sistemas\\Vendas\\P_Cartao" [NotaC->Codigo da Empresa],VSD_NomePix To REG_CARTAO
                              Else GetRecord "\\Sistemas\\Vendas\\P_Cartao" [FaturaC->Codigo da Empresa],VSD_NomePix To REG_CARTAO
                           EndIf
                           If RetVal
                              Then VSD_TIPO = REG_CARTAO["Debito_Credito"]
                                   VSD_CODIGO_CONTA = REG_CARTAO["Codigo da Conta"] 
                           EndIf   
                           
                           If VSD_TIPO = TP_PIX
                              Then KeyPress "ESC"
                                   If AUX_PROCESSO="NOTA"
                                      Then Moveto "NotaV"
                                      Else Moveto "FaturaV"
                                   EndIf   
                                   [Numero do Cartao    ]=VSD_NPix
                                   [Nome do Cartao      ]=VSD_NomePix
                                   [Codigo da Conta     ]=VSD_CODIGO_CONTA      
                                   Numero_Cartao         =VSD_NPix
                                   Nome_Cartao           =VSD_NomePix
                                   CancelDialog
                                   CALC_VENC_SIM = True
                              Else Mensagem("Pix n„o Cadastrado ! //" + " Utilize o F1 para consultar o PIX dispon¡vel.")
                                   VSD_NomePix=""
                                   KeyPress "ESC"
                           EndIf
                     Else  Mensagem("Pix n„o Cadastrado ! //" + "Utilize o F1 para consultar o PIX dispon¡vel.")
                           VSD_NomePix=""
                           KeyPress "ESC"      
                  EndIf
                  Echo Off
           EndSwitch           

   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="NomePix"
   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_Pix_Dialog()

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

INICIO_DIALOG=True
CALC_VENC_SIM = False
OP_SHOWD="Pix"                                   

If Search("NOT",Upper(Table()))>0
   Then AUX_PROCESSO="NOTA" 
        Moveto "NotaV"
   Else AUX_PROCESSO="FATURA"
        Moveto "FaturaV"
EndIf

Monta_Opcoes("P_Cartao","PIX")
If DynArraySize(opcoes)=1
   Then VSD_NomePix = opcoes[1]
   Else VSD_NPix    = [Numero do Cartao]
EndIf      

Showdialog "Dados do PIX" Proc "Digita_Pix_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 "NPix"
    Accept @ 1,01  Width 22 "A19" picture "!*!" Tag "NPix" to VSD_NPix

    Label  @ 0,25 "Pix" for "NomePix"
    Accept @ 1,26 Width 18 "A15" picture "!*!" Tag "NomePix" To VSD_NomePix

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

EndProc  ;Digita_Pix_Show()                   

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

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

Moveto nTable
Moveto Field ncampo

Release Procs Digita_Pix_Show, Digita_Pix_Dialog
Release Vars TP_PIX,VSDGCARTAO,VSD_NomePix,VSD_NPix,CALC_VENC_SIM,AUX_PROCESSO

Return Temp

EndProc   ; (Digita_Pix)

;------- 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" Or rotina="PEDIDO"
   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                            
          Case rotina="PEDIDO" : If Not IsAssigned(PARAM_IMPOSTOS)
                                    Then GetRecord "\\Sistemas\\Vendas\\P_Pedido" [PedidoC->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 IsRegimeSimplesNacional(TPEMPR)
           Then 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"
                  Then [ICMS_ST_Aliquota Reduzida]=BlankNum()
               EndIf
               [ICMS_ST_Aliquota         ]=BlankNum()
               VSD_I_MVA           =[MVA             ]   
               VSD_I_AST           =[ICMS_ST_Aliquota]
               If IsRegimeSimplesNacional(TPEMPR)
                  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"
           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, SYS_APLICATIVO

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)

;*******************************************************************************
;* Rotina para Apresentar Mensagem de Expedi‡Æo dos Clientes                   *
;*******************************************************************************
Proc Mensagem_Expedicao()
Private MSG_EXPEDICAO,REG_DESTEXP

MSG_EXPEDICAO = ""
GetRecord "\\Sistemas\\Cadastro\\DestExp" [Codigo] To REG_DESTEXP
If RetVal
   Then MSG_EXPEDICAO = REG_DESTEXP["Observacoes"]
EndIf                        

If MSG_EXPEDICAO<>""
   Then Ler_Memo("Observa‡”es para Expedi‡Æo",11,01,10,76,MSG_EXPEDICAO)
EndIf                      
     
EndProc ;(Mensagem_Expedicao)

;*******************************************************************************
;* Aprovacao do Limite de Credito                                              *
;*******************************************************************************
Proc Closed Limite_Credito()
UseVars AutoLib, ErrorProc,
        ORDFAT, SYS_CHAPA_USUARIO, SYS_NOME_USUARIO, SYS_NIVEL_USUARIO, 
        SYS_NCONEXAO, SYS_ESTACAO, SYS_SCRIPT, PARAM_LIMITE_CREDITO, SYS_CODIGO_CLIENTE,
        SYS_APLICATIVO

Private CREDITO_TOTAV, CREDITO_TOTV, NLANCTO, CREDITO_TOTCQ, SOMA_CREDITO,
        CREDITO_LIMITE, CREDITO_DISPONIVEL2, CREDITO_DISPONIVEL1, MSG, 
        CREDITO_TOTCQAC, CREDITO_TOTCQSF,
        SITUACAOCLIENTE, CNPJCPFCLIENTE, regdestinat, VR_VENCTO_APRAZO, VR_VENCTO_AVISTA

Aguarde("Aguarde, analisando o cr‚dito")

;; Titulos a Vencer e Vencidos
CREDITO_TOTAV=0
CREDITO_TOTV =0
MSG=""

getrecord "\\Sistemas\\Cadastro\\Destinat" [FaturaC->Codigo] to regdestinat 
If RetVal
   Then SITUACAOCLIENTE=regdestinat["Situacao do Cliente"]
         CNPJCPFCLIENTE=regdestinat["CGC"                ]  
   Else SITUACAOCLIENTE=""
         CNPJCPFCLIENTE=""  
EndIf

Moveto "\\Sistemas\\CtaRec\\Duplic"
Moveto [Codigo do Destinatario]
Locate IndexOrder by "IndDup22" [FaturaC->Codigo]
If Not RetVal
   Then	ACHOU_VENCTO = False 
   Else ACHOU_VENCTO = True
        While [Codigo do Destinatario]=[FaturaC->Codigo]
         If ([Numero Docto Gerador]<>[FaturaC->Numero Nota Gerada] Or
            IsBlank([Numero Docto Gerador])) And
            [Data de Emissao     ]<>[FaturaC->Data de Emissao   ]
            Then If [Saldo do Documento]>0.01
                    Then If [Data de Vencimento]>=Today()
                            Then CREDITO_TOTAV=CREDITO_TOTAV+[Saldo do Documento]
                            Else CREDITO_TOTV =CREDITO_TOTV +[Saldo do Documento]
                         EndIf
                 EndIf
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
          Locate IndexOrder by "IndDup22" Next [FaturaC->Codigo]
          If Not RetVal Then QuitLoop EndIf
				EndWhile
EndIf
                                         
;---- For‡ando a busca de vencto com o SCAN caso nÆo encontre pela indice -------
If SYS_CODIGO_CLIENTE="0397" And (Not ACHOU_VENCTO Or (CREDITO_TOTV=0 And CREDITO_TOTAV=0)) 
   Then Moveto "\\Sistemas\\CtaRec\\Duplic" Home
        Moveto [Codigo do Destinatario]                           
        Locate [FaturaC->Codigo]
        If RetVal
           Then Scan for [Codigo do Destinatario]=[FaturaC->Codigo]
                  Barra(NRecords("\\Sistemas\\CtaRec\\Duplic"), RecNo())
                  Aguarde("Aguarde, analisando o cr‚dito "+BARRA_STRING)
                  If [Codigo do Destinatario]=[FaturaC->Codigo]
                     Then If ([Numero Docto Gerador]<>[FaturaC->Numero Nota Gerada] Or IsBlank([Numero Docto Gerador])) And
                              [Data de Emissao]<>[FaturaC->Data de Emissao]
                               Then If [Saldo do Documento]>0.01
                                       Then If [Data de Vencimento]>=Today()
                                               Then CREDITO_TOTAV=CREDITO_TOTAV+[Saldo do Documento]
                                               Else CREDITO_TOTV =CREDITO_TOTV +[Saldo do Documento]
                                            EndIf
                                    EndIf
                          EndIf          
                  EndIf
                EndScan  
        EndIf 
EndIf
;--------------------------------------------------------------------------------

;;; Cheques a Descontar
NLANCTO="******"
CREDITO_TOTCQ=0
CREDITO_TOTCQAC=0
CREDITO_TOTCQSF=0
Moveto "\\Sistemas\\CheqRec\\ChequeI"
Moveto [Codigo_Cliente]
Locate IndexOrder by "IndChI01" [FaturaC->Codigo]
If RetVal
   Then While [Codigo_Cliente]=[FaturaC->Codigo]
        ;;If [Numero Docto Gerador]<>[FaturaC->Numero Nota Gerada] And
        ;;   [Data de Entrada     ]<>[FaturaC->Data de Emissao   ]
        ;;   Then
        ;;EndIf

          If [Situacao]<>"LIQUIDADO"   And
             [Situacao]<>"EM COBRANCA" And
             [Situacao]<>"EM COBRANCAPGTO" And
             Search("TROCADO",[Situacao])=0      
             Then If [Situacao]="SEM FUNDO"
                     Then 
                          CREDITO_TOTCQSF=CREDITO_TOTCQSF+[Valor]
                     Else 
                          switch
                            case sys_codigo_cliente="0377" :
                              switch
                                case SITUACAOCLIENTE<>"OTIMO" and CNPJCPFCLIENTE=[CPF]:
                                  CREDITO_TOTCQ  =CREDITO_TOTCQ  +[Valor] 
                             
                              endswitch
                            
                            otherwise                      :
                              CREDITO_TOTCQ  =CREDITO_TOTCQ  +[Valor] 
                              
                          endswitch
                  EndIf
          EndIf
          If [Situacao]="LIQUIDADO"
             Then Switch
                    Case SYS_CODIGO_CLIENTE="0157" Or
                         SYS_CODIGO_CLIENTE="0130":
                      If [Data Vencimento]>=Today()
			     							 Then CREDITO_TOTCQAC=CREDITO_TOTCQAC+[Valor]
						    			EndIf
                    OtherWise:
                      If [Data Vencimento]>=(Today()-7)
                         Then CREDITO_TOTCQAC=CREDITO_TOTCQAC+[Valor]
                      EndIf    
									EndSwitch
					EndIf				
          
          Skip
          If EOT() Then QuitLoop EndIf
          Locate IndexOrder by "IndChI01" Next [FaturaC->Codigo]
          If Not RetVal Then QuitLoop EndIf
        EndWhile
EndIf

Moveto "\\Sistemas\\Cadastro\\FichaCli"
Moveto [Codigo]
Locate [FaturaC->Codigo]
If RetVal
   Then CREDITO_LIMITE=[\Sistemas\Cadastro\FichaCli->Limite de Credito]
   Else CREDITO_LIMITE=0
        Mensagem("Cliente sem limite de credito informado na ficha financeira !")
EndIf

Moveto "FaturaC"
LimpAguarde()
   
;---- Valor da Nota Fiscal baseado nos vencimentos -----------------------------
VR_VENCTO_APRAZO = 0 
VR_VENCTO_AVISTA = 0
Moveto "FaturaV"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
If RetVal
   Then While [Numero da OF] = [FaturaC->Numero da OF]
          If ([Forma de Pagamento]<>"TC" And
              [Forma de Pagamento]<>"RP" And
              [Forma de Pagamento]<>"CT" And
              [Forma de Pagamento]<>"CD" And
              [Forma de Pagamento]<>"CL" And
              [Forma de Pagamento]<>"DN") Or ([Forma de Pagamento]="DN" And [Data]>[FaturaC->Data de Emissao])
             Then VR_VENCTO_APRAZO = VR_VENCTO_APRAZO + [Valor]
             Else VR_VENCTO_AVISTA = VR_VENCTO_AVISTA + [Valor] 
          EndIf
          Skip
          If Eot() Then QuitLoop EndIf
        EndWhile
EnDIf
Moveto "FaturaC"

CREDITO_DISPONIVEL1=CREDITO_LIMITE-(CREDITO_TOTAV+CREDITO_TOTV+CREDITO_TOTCQ+CREDITO_TOTCQAC+CREDITO_TOTCQSF)
CREDITO_DISPONIVEL2=CREDITO_DISPONIVEL1-VR_VENCTO_APRAZO

If CREDITO_DISPONIVEL2<0
   Then MSG=    "          Limite de Credito:"+Format("W10.2,EIC",CREDITO_LIMITE )             +"(=)"+"//"
        MSG=MSG+"       Duplicatas Vencidas :"+Format("W10.2,EIC",CREDITO_TOTV)                +"(-)"+"//"
        MSG=MSG+"       Duplicatas a Receber:"+Format("W10.2,EIC",CREDITO_TOTAV)               +"(-)"+"//"
        MSG=MSG+"       Cheques a Descontar :"+Format("W10.2,EIC",CREDITO_TOTCQ)               +"(-)"+"//"
        MSG=MSG+"       Cheques a Compensar :"+Format("W10.2,EIC",CREDITO_TOTCQAC)             +"(-)"+"//"
        MSG=MSG+"       Cheques Sem Fundo   :"+Format("W10.2,EIC",CREDITO_TOTCQSF)             +"(-)"+"//"
        MSG=MSG+"            Disponibilidade:"+Format("W10.2,EIC",CREDITO_DISPONIVEL1)         +"(=)"+"////"
        MSG=MSG+"            Total da Compra:"+Format("W10.2,EIC",[FaturaC->Valor Nota Fiscal])+"   "+"//"
        MSG=MSG+"(DN/CT/CD/CL/TC/RP) A VISTA:"+Format("W10.2,EIC",VR_VENCTO_AVISTA)            +"   "+"//"
        MSG=MSG+"                    A PRAZO:"+Format("W10.2,EIC",VR_VENCTO_APRAZO)            +"(-)"+"////"
        MSG=MSG+"          Indisponibilidade:"+Format("W10.2,EIC",CREDITO_DISPONIVEL2)         +"(=)"
        If PARAM_LIMITE_CREDITO="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then Grava_LogEx("BIB_FAT LibCred")
                        Return True
                   Else Return False
                EndIf
           Else Mensagem(MSG)
                Return False
        EndIf
   Else Return True
EndIf

EndProc    ;  (Limite_Credito)

;*******************************************************************************
;* Rotina para Tabela de Preco                                                 *
;*******************************************************************************
Proc Pega_Preco(OpcaoP)
Private OpcaoP, TABPR, CPGTO, CodClie, CodRepr, CodItem,
        PesqOk, Registro_Tab_Preco, Registro_TabPreco_CondPagto, regItens,
        wii,coditemtemp

Switch
  Case Table()="Faturai":
    If PARAM_TABPR_ITEM="S"
       Then If OpcaoP = "Cod_Barras"
               Then TABPR=[FaturaC->Codigo da Tabela]
               Else TABPR=[FaturaI->Codigo da Tabela]
                    If IsBlank(TABPR) And SYS_CODIGO_CLIENTE="0232"
                       Then TABPR=[FaturaC->Codigo da Tabela]
                    EndIf    
            EndIf
       Else TABPR=[FaturaC->Codigo da Tabela]
    EndIf
    CPGTO=[FaturaC->Condicao de Pagamento]

    CodClie=[FaturaC->Codigo                 ]
    CodRepr=[FaturaC->Codigo do Representante]

  Case Table()="Faturaid":
    If PARAM_TABPR_ITEM="S"
       Then If OpcaoP = "Cod_Barras"
               Then TABPR=[FaturaC->Codigo da Tabela]
               Else TABPR=[FaturaID->Codigo da Tabela]
            EndIf
       Else TABPR=[FaturaC->Codigo da Tabela]
    EndIf
    CPGTO=[FaturaC->Condicao de Pagamento]

    CodClie=[FaturaC->Codigo                 ]
    CodRepr=[FaturaC->Codigo do Representante]

  Case Table()="Notai"  :
    If PARAM_TABPR_ITEM="S"
       Then If OpcaoP = "Cod_Barras"
               Then TABPR=[NotaC->Codigo da Tabela]
               Else TABPR=[NotaI->Codigo da Tabela]
            EndIf
       Else TABPR=[NotaC->Codigo da Tabela]
      
    EndIf
    CPGTO=[NotaC->Condicao de Pagamento  ]

    CodClie=[NotaC->Codigo                   ]
    CodRepr=[NotaC->Codigo do Representante  ]

EndSwitch
CodClie         =[FaturaC->Codigo                 ]
CodRepr         =[FaturaC->Codigo do Representante]

CodItem         =VSD_I_Codigo_Item
ITEM_PROMOCIONAL="N"
PesqOk          =False

GetRecord "\\Sistemas\\Estoque\\Itens" CodItem To regItens
If RetVal
   Then 
        If PARAM_UTILIZA_TABPR_CLIENTE="S"
           Then 
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, CodClie, coditemtemp To Registro_TabPreco_Item
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0427" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" Or
                             SYS_CODIGO_CLIENTE="0345" Or
                             SYS_CODIGO_CLIENTE="0408" Or
                             SYS_CODIGO_CLIENTE="0419" Or
                             SYS_CODIGO_CLIENTE="0444" Or
                             SYS_CODIGO_CLIENTE="0429" 
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf

        If PARAM_UTILIZA_TABPR_REPRES="S" and Not PesqOk
           Then
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprrit" TABPR, CodRepr, coditemtemp To Registro_TabPreco_Item   
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0427" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" Or
                             SYS_CODIGO_CLIENTE="0345" Or
                             SYS_CODIGO_CLIENTE="0408" Or
                             SYS_CODIGO_CLIENTE="0419" Or
                             SYS_CODIGO_CLIENTE="0444" Or
                             SYS_CODIGO_CLIENTE="0429"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
        
        If Not PesqOk
           Then
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprite" TABPR, coditemtemp          To Registro_TabPreco_Item
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0427" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" Or
                             SYS_CODIGO_CLIENTE="0345" Or
                             SYS_CODIGO_CLIENTE="0408" Or
                             SYS_CODIGO_CLIENTE="0419" Or
                             SYS_CODIGO_CLIENTE="0444" Or
                             SYS_CODIGO_CLIENTE="0429"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
EndIf

If not PesqOK
   then
        [Preco Unitario       ]=BlankNum()
        [Preco Unitario Tabela]=BlankNum()

   else 
        ITEM_PROMOCIONAL=Registro_TabPreco_Item["Em Promocao"]

        If OpcaoP="Checa"
           Then Return True
        EndIf

        switch
          case sys_codigo_cliente="0431":
            [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
            [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]

            GetRecord "\\Sistemas\\Vendas\\Condpgto" [FaturaC->Condicao de Pagamento] To regcondpgto
            If RetVal  
               Then If regcondpgto["Taxa Desconto"] > 0
                       then [Tipo Desconto Item    ]="U"
                            [Taxa Desconto Unitario]=regcondpgto["Taxa Desconto"]
                            
                            VSD_I_Tipo_Desconto_Item     =[Tipo Desconto Item        ]
                            VSD_I_Taxa_Desconto_Unitario =[Taxa Desconto Unitario    ]
                            CalcularPrecoTotal_Item()           
                    EndIf
            EndIf
            release vars regcondpgto

          case PARAM_PEGAPRECO_CPAGTO = "S":
            PesqOk=False
            Moveto [Lookup_TabPreco_CondPagto]
            Ativa_Lookup()
            Moveto [Codigo da Tabela]
            Locate TABPR
            If RetVal
               Then While [Codigo da Tabela] = TABPR
                      If [Condicao de Pagamento] = CPGTO
                         Then CopyToArray Registro_TabPreco_CondPagto
                              PesqOK=True
                              QuitLoop
                      EndIf
                      Skip
                      If Eot()
                         Then QuitLoop
                      Endif
                    EndWhile
            Endif
            KeyPress "ESC"
            If PesqOk
               Then [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]+
                                            NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                            Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)
                    [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]+
                                            NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                            Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)

                    If TX_DESCTO_CLIE>0
                       Then [Preco Unitario Tabela]=[Preco Unitario]
                            [Preco Unitario       ]=Round([Preco Unitario]-(([Preco Unitario]*TX_DESCTO_CLIE)/100),2)
                    EndIf

               Else [Preco Unitario       ]=BlankNum()
                    [Preco Unitario Tabela]=BlankNum()
            EndIf
          
          otherwise:
            [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
            [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]

            If TX_DESCTO_CLIE>0
               Then [Preco Unitario Tabela]=[Preco Unitario]
                    [Preco Unitario       ]=Round([Preco Unitario]-(([Preco Unitario]*TX_DESCTO_CLIE)/100),2)
            EndIf
          
        endswitch

EndIf

VSD_I_Preco_Unitario=[Preco Unitario       ]
VSD_I_Preco_Tabela  =[Preco Unitario Tabela]
UnLockRecord

EndProc ;(Pega_Preco)

;*******************************************************************************
;* Rotina para Chamar Calculo de Vencimentos                                   *
;*******************************************************************************
Proc CALC_VENCTOS()
   
;-- Verifica se composicao de dias ‚ correta -----------------------------------
If Not Checa_CompDias([FaturaC->Composicao de Dias])
   Then Return
EndIf      

Calcular_Vencimentos()

Release Procs Calcular_Vencimentos

EndProc   ;  (CALC_VENCTOS)

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_CONFIRMA, ESTQ_ANO, ESTQ_MES, MSG
                              
;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([FaturaC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [FaturaC->Data de Saida  ]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[FaturaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [FaturaC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
ESTQ_MES = AlinhM(StrVal(Month(AUX_DATA)),2)
ESTQ_ANO = StrVal(Year(AUX_DATA))                              

MSG="N„o foi encontrada a ficha de estoque referente a "+ESTQ_MES+"/"+ESTQ_ANO+" !// //"
MSG=MSG+Format("W08,AL","Empresa")   +"| "+Format("W11,AL","Item")   +"//"
MSG=MSG+Format("W08,AL",ESTQ_EMPRESA)+"| "+Format("W11,AL",ESTQ_ITEM)+"//"
MSG=MSG+"Observacoes:                                                           //"
MSG=MSG+"1. Talvez n„o foi executada a transferˆncia de saldos do mˆs anterior; //"
If ESTQ_CONFIRMA
   Then MSG=MSG+"2. Se for criada agora o saldo inicial deste item ser  igual a 0.      //"
        MSG=MSG+"// "
        MSG=MSG+"Deseja cria-la agora ?"
        ConfGeral(MSG)
        If OK="N"
           Then Return False
        EndIf
   Else MSG=MSG+"2. A ficha do item ser  criada com o saldo inicial igual a 0.          //"
        Mensagem(MSG)
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_ANO, ESTQ_MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          [Ano Referencia      ]=ESTQ_ANO
          [Mes Referencia      ]=ESTQ_MES
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Verificacao Maximo de Dias de Atraso                                        *
;*******************************************************************************
Proc Closed Dias_Atraso()
UseVars AutoLib, ErrorProc,
        ORDFAT, SYS_CHAPA_USUARIO, SYS_NOME_USUARIO, SYS_NIVEL_USUARIO, 
        SYS_NCONEXAO, SYS_ESTACAO, SYS_SCRIPT, PARAM_DIAS_ATRASO,
        SYS_APLICATIVO

Private CREDITO_TOTAV, CREDITO_TOTV, DIAS_ATRASO, MSG

Aguarde("Aguarde, Analisando Documentos c/ Dias Atrasados")

;; Titulos a Vencer e Vencidos
CREDITO_TOTAV  = 0
CREDITO_TOTV   = 0
DIAS_ATRASO    = 0
MSG="Pedido "+[FaturaC->Numero do Pedido]+"//"
MSG=MSG+"Cliente "+[FaturaC->Codigo]+"-"+[FaturaC->Razao Social]+"// //"

UnLockRecord
echo off

FormKey
LockRecord

Moveto "\\Sistemas\\Cadastro\\FichaCli"
Moveto [Codigo]
Locate [FaturaC->Codigo]
If Not RetVal
   Then Mensagem("Cliente sem n§ dias p/ atraso informado na ficha financeira !")
   Else DIAS_ATRASO=[Maximo Dias Atraso]
        If DIAS_ATRASO<=0
           Then MSG="Cliente sem n§ dias p/ atraso informado na ficha financeira !// //"
        EndIf
EndIf

Moveto "\\Sistemas\\Ctarec\\Duplic"
Moveto [Codigo do Destinatario]
Locate IndexOrder by "IndDup22" [FaturaC->Codigo]
If RetVal
	 Then While [Codigo do Destinatario]=[FaturaC->Codigo]
         If ([Numero Docto Gerador]<>[FaturaC->Numero Nota Gerada] Or
            IsBlank([Numero Docto Gerador])) And
            [Data de Emissao     ]<>[FaturaC->Data de Emissao   ]
            Then If [Saldo do Documento]>0.01
                   Then If [Data de Vencimento]>=Today()
                           Then CREDITO_TOTAV=CREDITO_TOTAV+[Saldo do Documento]
                           Else If (Today()-[Data de Vencimento])>=DIAS_ATRASO
                                   Then CREDITO_TOTV =CREDITO_TOTV +[Saldo do Documento]
                                   Else CREDITO_TOTAV=CREDITO_TOTAV+[Saldo do Documento]
                                EndIf
                        EndIf
                 EndIf
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
          Locate IndexOrder by "IndDup22" Next [FaturaC->Codigo]
          If Not RetVal Then QuitLoop EndIf
				EndWhile
EndIf
Moveto "FaturaC"
FormKey
echo Normal
echo off

If SYS_APLICATIVO = "TROCA"
   Then PARAM_DIAS_ATRASO = ""
EndIf   

LimpAguarde()

If CREDITO_TOTV > 0
   Then MSG=MSG+Completa("Maximo de Dias de Atraso..:"+Format("W10",DIAS_ATRASO),38," ")+"//"
        MSG=MSG+"Duplicatas com Dias Atraso:"+Format("W10.2,EIC",CREDITO_TOTV)+"//"
        MSG=MSG+"Duplicatas a Receber      :"+Format("W10.2,EIC",CREDITO_TOTAV)+"//"
        MSG=MSG+"Total Duplicatas a Receber:"+Format("W10.2,EIC",CREDITO_TOTAV+CREDITO_TOTV)
        If PARAM_DIAS_ATRASO="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then Switch
                          Case SYS_APLICATIVO = "BALCAO" :
                               Grava_LogEx("BIB_BAL LibAtras")                           
                          Case SYS_APLICATIVO = "BNFCE" :
                               Grava_LogEx("BIB_BAL LibAtras")                           
                          OtherWise                      :
                               Grava_LogEx("BIB_FAT LibAtras")
                        EndSwitch       
                        Return True
                   Else Return False
                EndIf
           Else Mensagem(MSG)
                Return False
        EndIf
   Else Return True
EndIf

EndProc   ; (Dias_Atraso)

;*******************************************************************************
;* Atualizacao de Cheques                                                      *
;*******************************************************************************
Proc CHEQUES()
Private NUMEROL, EXISTE_CHEQUE_LIQUIDADO, primeiravez

while true

  Aguarde("Efetuando Estorno CHEQUES TERCEIROS "+Opcaoc+" "+NOTAFISC)

  NUMEROL=""
  Moveto "\\Sistemas\\CheqRec\\ChequeC"
  Moveto [Codigo da Empresa]
  Locate IndexOrder by "Indchc01" [NotaC->Codigo da Empresa],[NotaC->Tipo do Documento],[NotaC->Numero do Documento]
  if retval
    then NUMEROL=[Numero do Lancamento]
    else Moveto [Observacao do Lancamento]
         Locate "REF. "+[NotaC->Codigo da Empresa]+"/"+[NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]
         if retval
            then NUMEROL=[Numero do Lancamento]
         endif
  endif      
    
  if not isblank(NUMEROL)
     then
          EXISTE_CHEQUE_LIQUIDADO=false
     
         Moveto "\\Sistemas\\CheqRec\\ChequeI"
         Moveto [Numero do Lancamento]
         Locate NUMEROL
         If RetVal
            Then While [Numero do Lancamento]=NUMEROL
  
                   If [Situacao]<>"EM ABERTO"
                      Then EXISTE_CHEQUE_LIQUIDADO=True
                           quitloop
                   EndIf
                   
                   Skip
                   If EOT() Then QuitLoop EndIf
                 EndWhile
         EndIf
         
         if EXISTE_CHEQUE_LIQUIDADO
            then
                 MSG="J  existem cheques movimentados para esta Nota.//"
                 MSG=MSG+"Os cheques n„o podem ser estornados.//"
                 MSG=MSG+"Verificar no Lan‡amento de Cheques Ok !//"
                 MSG=MSG+"Lan‡amento: "+StrVal(NUMEROL)+" - "+SubStr([\Sistemas\CheqRec\ChequeC->Observacao do Lancamento],1,20)
                 Mensagem(MSG)
                 
                 quitloop
         endif
         
         Moveto "\\Sistemas\\CheqRec\\ChequeI"
         Moveto [Numero do Lancamento]
         Locate NUMEROL
         If RetVal
            Then While [Numero do Lancamento]=NUMEROL
                   del
                   If EOT() Then QuitLoop EndIf
                 EndWhile
         EndIf
         
         Moveto "\\Sistemas\\CheqRec\\ChequeC"
         Del
  endif

  Aguarde("Atualizando CHEQUES TERCEIROS "+Opcaoc+" "+NOTAFISC)

  primeiravez=true

  Moveto "NotaV"
  Moveto [Codigo da Empresa]
  Locate [NotaC->Codigo da Empresa],[NotaC->Numero do Documento],[NotaC->Serie do Documento]
  If Not RetVal
     Then quitloop            
  EndIf
  
  while [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] and
        [Numero do Documento]=[NotaC->Numero do Documento] and
        [Serie do Documento ]=[NotaC->Serie do Documento ]

    if ([forma de pagamento]="CH" or [forma de pagamento]="CP") and Not IsBlank([Numero_Cheque])
       then
            if primeiravez
               then primeiravez=false
               
                    Moveto "\\Sistemas\\CheqRec\\ChequeC"
                    While True
                      End
                      Moveto [Numero do Lancamento]
                      If Numero_Lancamento("Interno","Locked_Down")
                         Then NUMEROL = PROXLANCTO_NLANC
                              Release Vars PROXLANCTO_NLANC
                              quitloop
                      EndIf    
                    EndWhile
                    
                   ;While True
                   ;  Moveto [Numero do Lancamento]
                   ;  End
                   ;  If Numero_Lancamento("Interno","")
                   ;     Then NUMEROL = PROXLANCTO_NLANC
                   ;          Release Vars PROXLANCTO_NLANC
                   ;  EndIf
                   ;  Locate NUMEROL
                   ;  If Not Retval
                   ;     Then End Down
                   ;          [Numero do Lancamento ]=NUMEROL
                   ;          If Not IsLockRecord()
                   ;             Then QuitLoop
                   ;             Else Del
                   ;          EndIf
                   ;  EndIf
                   ;EndWhile
             
                   [Codigo da Empresa       ]=[NotaC->Codigo da Empresa       ]
                   [Data de Entrada         ]=[NotaC->Data de Emissao         ]
                   [Codigo                  ]=[NotaC->Codigo                  ]
                   [Codigo do Representante ]=[NotaC->Codigo do Representante ]
                   [Observacao do Lancamento]="REF. "+[NotaC->Codigo da Empresa]+"/"+[NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]
        
                   [Sistema Gerador         ]=[NotaC->Sistema Gerador         ]
                   [Tipo Docto Gerador      ]=[NotaC->Tipo do Documento       ]
                   [Numero Docto Gerador    ]=[NotaC->Numero do Documento     ]
                   [Serie Docto Gerador     ]=[NotaC->Serie do Documento      ]
                   [Numero_Carregamento_Orig]=[NotaC->Numero_Carregamento     ]
                   [Valor Total             ]=0
                   Controle_Dia()
                   UnLockRecord
                   
                   Moveto "NotaC"
                   [Numero Lancamento Cheque]=NUMEROL
                   UnLockRecord

            endif
            
            Moveto "\\Sistemas\\CheqRec\\ChequeI"
            Moveto [Numero do Lancamento]
            Locate NUMEROL, NumVal([NotaV->Sequencia])
            If Not RetVal
               Then End
                    Down
                    [Numero do Lancamento]=NUMEROL
                    [Sequencia do Cheque ]=NumVal([NotaV->Sequencia])
                    [Codigo_Banco        ]=[NotaV->Codigo_Banco   ]
                    [Agencia             ]=[NotaV->Agencia        ]
                    [Numero_Conta        ]=[NotaV->Numero_Conta   ]
                    [Numero_Cheque       ]=[NotaV->Numero_Cheque  ]
                    [CPF                 ]=[NotaV->CPF            ]
                    [Tipo_Emitente       ]=[NotaV->Tipo_Emitente  ]
                    [Titular_Cheque      ]=[NotaV->Titular_Cheque ]
                    [Cidade              ]=[NotaV->Cidade         ]
                    [UF                  ]=[NotaV->UF             ]
                    [Data Vencimento     ]=[NotaV->Data           ]
                    [Valor               ]=[NotaV->Valor          ]
                    [Observacao do Cheque]=[NotaV->Observacao     ]
                    [Codigo CMC7         ]=[NotaV->Codigo CMC7    ]
                    
                    [Sistema Origem      ]=[NotaC->Sistema Gerador     ]
                    [Tipo do Documento   ]=[NotaC->Tipo do Documento   ]
                    [Numero do Documento ]=[NotaC->Numero do Documento ]
                    [Codigo_Cliente      ]=[NotaC->Codigo              ]
                    [Data_Entrada        ]=[NotaC->Data de Emissao     ]
                    [Situacao            ]="EM ABERTO"
                    
                    [Codigo da Conta     ]=CX_CONTA_CAIXA
                    [Codigo da Empresa   ]=[NotaC->Codigo da Empresa       ]
                    Controle_Dia()
                    UnLockRecord
                    
                    Moveto "\\Sistemas\\CheqRec\\ChequeC"
                    [Valor Total         ]=[Valor Total  ]+[NotaV->Valor   ]
                    UnLockRecord
            EndIf
    endif

    moveto "NotaV"
    skip
    if eot() then quitloop endif
  endwhile

  quitloop
endwhile

Moveto "FaturaC"

EndProc    ;  (Cheques)

;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_Comissao_Vendedor()
;UseVars AutoLib, ErrorProc, PARAM_UTILIZA_COMISSAO_VENDREAL, SYS_CODIGO_CLIENTE
Private Tx_Comissao, Tx_Descto, Tx_Encontrada, Vr_Descto, NCampo,
        TOT_MERC_TABELA, TOT_MERC_VENDAS, DIFER, 
        CODREP, CODTAB, CODCDIA, wc1, wc2, wc3

If [FaturaC->Tipo de Pagamento]="O"
   Then Return True
EndIf

NCampo=Field()

If PARAM_UTILIZA_COMISSAO_VENDREAL="S"
   Then TOT_MERC_TABELA=0
        TOT_MERC_VENDAS=[FaturaC->Valor Mercadoria Liquido]

        Moveto "FaturaI"
        Scan
          TOT_MERC_TABELA=TOT_MERC_TABELA+Round(([Quantidade]*[Preco Unitario Tabela]),2)
        EndScan
        Moveto "FaturaC"

        DIFER=TOT_MERC_VENDAS-TOT_MERC_TABELA
        If DIFER<0
           Then DIFER=DIFER*-1
                Tx_Descto=Round(((DIFER*100)/TOT_MERC_TABELA),2)
           Else Tx_Descto=0
        EndIf
   Else If [FaturaC->Taxa de Desconto]>0
           Then Tx_Descto=[FaturaC->Taxa de Desconto ]
           Else Vr_Descto=[FaturaC->Valor do Desconto]
                Tx_Descto=(Vr_Descto/[FaturaC->Valor Mercadoria])*100
        EndIf
EndIf

Tx_Comissao  =BlankNum()
Tx_Encontrada=False

Moveto [Lookup_Trdescto]
Ativa_Lookup()
Moveto [Codigo da Empresa]
For wc1 From 1 To 2
  Switch
    Case wc1=1 : CODTAB=[FaturaC->Codigo da Tabela       ]
    Case wc1=2 : CODTAB="00000"
  EndSwitch

  For wc2 From 1 To 2
    Switch
      Case wc2=1 : CODREP=[FaturaC->Codigo do Representante]
      Case wc2=2 : CODREP="0000"
    EndSwitch

    For wc3 From 1 To 3
      Switch
        Case wc3=1 : CODCDIA=[FaturaC->Composicao de Dias]
        Case wc3=2 : Switch
                       Case [FaturaC->Tipo de Pagamento]="V": CODCDIA="A VISTA"
                       Case [FaturaC->Tipo de Pagamento]="P": CODCDIA="A PRAZO"
                     EndSwitch
        Case wc3=3 : CODCDIA="TODAS"
      EndSwitch
  
      Locate [FaturaC->Codigo da Empresa],CODTAB,CODREP,CODCDIA
      If Retval
         Then Tx_Encontrada=True
              QuitLoop
      EndIf
    EndFor
    If Tx_Encontrada Then QuitLoop EndIf
    
  EndFor
  If Tx_Encontrada Then QuitLoop EndIf
 
EndFor

If Tx_Encontrada
   Then Tx_Encontrada=False
        While [Codigo da Empresa      ]=[FaturaC->Codigo da Empresa      ] And
              [Codigo da Tabela       ]=CODTAB                             And
              [Codigo do Representante]=CODREP                             And
              [Composicao de Dias     ]=CODCDIA

          If [Taxa de Desconto]<=Tx_Descto
             Then Tx_Comissao  =[Taxa de Comissao Normal]
                  Tx_Encontrada=True
             Else QuitLoop
          EndIf

          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf
KeyPress "ESC"
Moveto Field NCampo

If IsBlank(Tx_Comissao) Or Not Tx_Encontrada
   Then MSG="% Comiss„o n„o encontrada conforme tabela: //"
        MSG=MSG+"Tabela/Representante/Composi‡„o de Dias/Descontos/Comiss„o, // //Verificar Ok !"
        Mensagem(MSG)
        Return False
   Else [Comissao do Representante]=Tx_Comissao
        Return True
EndIf                                      

EndProc


;*******************************************************************************
;* Rotina para exclusao do rateio da comissao                                  *
;*******************************************************************************
Proc Closed Excluir_Rateio_Comissao()
UseVars AutoLib, ErrorProc, ORDFAT, SEQIT, SYS_APLICATIVO

Moveto "FaturaC"
UnLockRecord
FormKey

Moveto "FaturaIC"
Moveto [Numero da OF]
Locate ORDFAT,SEQIT
If RetVal
   Then While [Numero da OF]=ORDFAT And [Item da OF]=SEQIT
          Del
        EndWhile
EndIf

Moveto "FaturaC"
UnLockRecord
FormKey
Moveto [Numero da OF]
Locate ORDFAT
Moveto "FaturaI"

EndProc  ; (Excluir_Rateio_Comissao)

;*******************************************************************************
;* Rotina para Rateio de Comissao Vencimentos                                  *
;*******************************************************************************
Proc Closed RATEIO_COMISSAO_VENCTOS()
UseVars AutoLib, ErrorProc, PARAM_TITCRED, PARAM_UTILIZA_PONTOS, sys_Codigo_Cliente

Private TCOM, COM_NF, DIFER, TOT_VECTOS, vrcomis, numparc, numtc, numrp, rateiook, ntabela, regorigem

ntabela=table()        ; tabela de origem
copytoarray regorigem  ;registro de origem

rateiook=true
If regorigem["Tipo de Pagamento"     ]="O" or
   regorigem["Tipo Movimento Estoque"]="E"
   Then rateiook=false
EndIf
if not rateiook
   then
        Moveto ntabela
        Return
endif    

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

Aguarde("Rateio Comissoes/Vencimentos")

;numtc     =0 ; n. TC titulo de credito
;numrp     =0 ; n. RP resgate de pontua‡Æo

numparc   =0
TOT_VECTOS=0
TCOM      =0

if ntabela="Notac"
   then Moveto "NotaV"
   else Moveto "FaturaV"
endif   
Scan
  
  switch
    case PARAM_UTILIZA_PONTOS="S" and [Forma de Pagamento]="RP": ;nÆo somar valor/parcela
      ;numrp     =numrp     +1

    case PARAM_TITCRED       ="T" and [Forma de Pagamento]="RC": ;nÆo somar valor/parcela
      ;numtc     =numtc     +1
    
    otherwise:
      numparc   =numparc   +1
      TOT_VECTOS=TOT_VECTOS+[Valor]
    
  endswitch
EndScan

If TOT_VECTOS>0
   Then 
        switch
          case sys_Codigo_Cliente="0388" or
               sys_Codigo_Cliente="0427" :
            COM_NF =NDecimal((regorigem["Valor Mercadoria Liquido"]*regorigem["Comissao do Representante"])/100,2)
            vrcomis=NDecimal((COM_NF/numparc),2)
        
          otherwise                      : 
            COM_NF =NDecimal((regorigem["Valor Nota Fiscal"       ]*regorigem["Comissao do Representante"])/100,2)

        endswitch
   
        Scan
          switch
            case sys_Codigo_Cliente="0388" or
                 sys_Codigo_Cliente="0427" :
              [Valor da Comissao]=vrcomis
                                             
            otherwise                      : 
              [Valor da Comissao]=NDecimal(([Valor  ]*regorigem["Comissao do Representante"])/100,2)

          endswitch
          TCOM=TCOM+[Valor da Comissao]
          
        EndScan

        switch
          case sys_Codigo_Cliente="0382" : ;nÆo calcula diferen‡a
                                           
          otherwise                      : 
            DIFER              =COM_NF-TCOM
            [Valor da Comissao]=[Valor da Comissao]+DIFER
            UnLockRecord

        endswitch
EndIf

Moveto ntabela   
EndProc ; (RATEIO_COMISSAO_VENCTOS)

;*******************************************************************************
;* Rotina para Apresentar Mensagem de Venda dos Clientes                       *
;*******************************************************************************
Proc Mensagem_Venda()
Private MSG_VENDA, exibemsgv  

exibemsgv=false
switch
  case Search("VEND",[Descricao da Destinacao])>0                                    : exibemsgv=true 

  case (SYS_CODIGO_CLIENTE="0204" And Search("MANIF"  ,[Descricao da Destinacao])>0) : exibemsgv=true

  case (SYS_CODIGO_CLIENTE="0232" And Search("MOSTRUA",[Descricao da Destinacao])>0) : exibemsgv=true

  case (SYS_CODIGO_CLIENTE="0428")                                                   : exibemsgv=true

endswitch

if exibemsgv
   then
        MSG_VENDA = ""
        GetRecord "\\Sistemas\\Cadastro\\DestMsg" [Codigo] To REG_DESTMSG
        If RetVal
           Then MSG_VENDA = REG_DESTMSG["Observacoes"]
        EndIf                        
        
        If MSG_VENDA<>""
           Then Ler_Memo("Observa‡”es para Venda",11,01,10,76,MSG_VENDA)
        EndIf  
endif                    
     
EndProc ;(Mensagem_Venda)

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc Rateio_BC_Itens(TabelaRefC)
Private nitens,
        TabelaRefC, TabelaRefI, REG_TABELAREFC

;--- Seta Tabelas de Trabalho --------------------------------------------------
Moveto TabelaRefC
Switch
  Case TabelaRefC="FaturaC" : TabelaRefI="FaturaI"
EndSwitch

CopyToArray REG_TABELAREFC ; guarda dados registro mestre

Aguarde("Atualizando rateios nos itens")

Moveto TabelaRefI
nitens=0
Scan
  nitens=nitens+1

  [Taxa Desconto Total      ]=It_txdescto[nitens]        
  [Valor Desconto Total     ]=It_descto[nitens]          
  [Valor Frete Total        ]=It_frete[nitens]         
  [Valor Seguro Total       ]=It_seguro[nitens]          
  [Valor OutDesp Total      ]=It_outdesp[nitens]         

  [ICMS_BC                  ]=It_bc_icms[nitens]       
  [Valor do ICMS            ]=It_vr_icms[nitens]       

  [ICMS_CREDSN_Aliquota     ]=It_aliq_icmscred[nitens]  
  [ICMS_CREDSN_Valor        ]=It_vr_icmscred[nitens]   

  [ICMS_ST_Aliquota         ]=It_aliq_st[nitens]        
  [ICMS_ST_BC               ]=It_bc_st[nitens]         
  [ICMS_ST_Valor            ]=It_vr_st[nitens]         

  [IPI_BC                   ]=It_bc_ipi[nitens]        
  [Valor do IPI             ]=It_vr_ipi[nitens]        

  [ISSQN_BC                 ]=It_bc_issqn[nitens]      
  [Valor do ISSQN           ]=It_vr_issqn[nitens]      

  [PIS_BC                   ]=It_bc_pis[nitens]        
  [PIS_Valor                ]=It_vr_pis[nitens]         

  [COFINS_BC                ]=It_bc_cofins[nitens]     
  [COFINS_Valor             ]=It_vr_cofins[nitens]     

EndScan
If RecordStatus("Locked") Then UnLockRecord EndIf         

Moveto TabelaRefC

LimpAguarde()
EndProc   ; (Rateio_BC_Itens)

;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_SPC()
Private NomeCampo,Retorno,DATA_SPC,BLOQUEIA_SPC

Retorno=True
NomeCampo=Field()
BLOQUEIA_SPC=False

UnLockRecord
FormKey
LockRecord

Moveto "\\Sistemas\\Cadastro\\FichaCli" 
Moveto [Codigo]
Locate [\Sistemas\Vendas\FaturaC->Codigo]
If RetVal
   Then DATA_SPC=[Data_Ultima_Consulta]
        If DATA_SPC=BlankDate() Or
           DATA_SPC+PARAM_NBLOQUEIO_SPC <= Today()
           Then BLOQUEIA_SPC=True
        EndIf   
   Else DATA_SPC=BlankDate()
        BLOQUEIA_SPC=True          
EndIf

If BLOQUEIA_SPC
   Then If DATA_SPC<>BlankDate()
           Then DATA_SPC=         "Efetuar uma nova consulta no SPC!//"
                DATA_SPC=DATA_SPC+"Ultima Consulta: "+SubsTr(StrVal([Data_Ultima_Consulta]),1,2)+"/"
                DATA_SPC=DATA_SPC+                    SubsTr(StrVal([Data_Ultima_Consulta]),4,2)+"/"
                DATA_SPC=DATA_SPC+                    SubsTr(StrVal([Data_Ultima_Consulta]),7,4)
           Else DATA_SPC=         "Efetuar uma consulta no SPC!//"
                DATA_SPC=DATA_SPC+"N„o consta nenhuma data de consulta deste cliente!"
        EndIf            
        If Not IsAssigned(MSG_SPC)
           Then MSG=    "Opera‡„o Bloqueada!//"
                MSG=MSG+DATA_SPC
                Libera_Bloqueio(MSG)
                If Ok="S"
                   Then Switch
                          Case SYS_APLICATIVO = "TROCA"  : Grava_LogEx("BIB_TRO BloqDSPC")
                          Case SYS_APLICATIVO = "BALCAO" : Grava_LogEx("BIB_BAL BloqDSPC")
                          Case SYS_APLICATIVO = "BNFCE"  : Grava_LogEx("BIB_BAL BloqDSPC")
                          Case SYS_APLICATIVO = "FATURA" : Grava_LogEx("BIB_FAT BloqDSPC")
                        EndSwitch  
                   Else Retorno=False
                EndIf
           Else Mensagem(DATA_SPC)     
        EndIf
EndIf

Moveto "FaturaC"
FormKey

Moveto Field NomeCampo
Return Retorno

EndProc

;*******************************************************************************
;* Rotina p/ Checagem Saldo Pedido                                            **
;*******************************************************************************
Proc Checa_Pedido()
Private NOVOSALDO

If PARAM_PEDIDO<>"S"
   Then Return True
EndIf
If PARAM_PEDIDO="S" And DESTIN_ATUALIZA_PEDIDOS<>"S"
   Then Return True
EndIf
If IsBlank([FaturaI->Numero Pedido_Orcamento]) And
   IsBlank([FaturaI->Item Pedido_Orcamento])
   Then Return True
EndIf

If IsBlank([FaturaC->Numero do Pedido]) Or (IsBlank([FaturaI->Numero Pedido_Orcamento]) And IsBlank([FaturaI->Item Pedido_Orcamento]))
   Then Return True
EndIf

Moveto "FaturaC"
[Numero Pedido_Orcamento]=[FaturaI->Numero Pedido_Orcamento]

Moveto "PedidoI"
Moveto [Item do Pedido]
Locate [FaturaI->Item Pedido_Orcamento]
If Not RetVal
   Then Mensagem("Item do Pedido n„o encontrado !")
        Moveto "FaturaI"
        Return False
   Else ;---- NÆo checa o SALDO do Pedido -----------
        If SYS_CODIGO_CLIENTE="0237"
           Then Moveto "FaturaI" 
                Return True
        EndIf
        NOVOSALDO=-1
        Switch
          Case CHAVEI=1:
               NOVOSALDO=NDecimal(([Quantidade]-[Quantidade Faturada])-[FaturaI->Quantidade],3)
          Case CHAVEI=0:
               NOVOSALDO=NDecimal(((([Quantidade]-[Quantidade Faturada])+QUANT)-[FaturaI->Quantidade]),3)
        EndSwitch
EndIf
   
Moveto "FaturaI"
If NOVOSALDO>=0
   Then Return True
   Else Mensagem("Saldo do Pedido Insuficiente em "+StrVal(Format("W11.3,EIC",NOVOSALDO))+", Verificar !")
        If PARAM_BLOQPED_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf
EndProc    ; (Checa_Pedido)

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

If Not IsAssigned(OP_SHOWD) Then OP_SHOWD="" EndIf
If OP_SHOWD<>"Cheque" Then OP_SHOWD="DTBASE" EndIf

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"] = 27:
           Switch
             Case Campo="Data_Base"      : CancelDialog
           EndSwitch 
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="Data_Base":
                  VSD_Data_Base=ControlValue("Data_Base")
                  AcceptDialog
           EndSwitch
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
MSGCAMPO=""

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

EndProc ;Data_Dialog()

;*******************************************************************************
;* Rotina para Calcular de Vencimentos                                         *
;*******************************************************************************
Proc Calcular_Vencimentos()
Private NP, NPC, pos_s, AUX_NP,  
        VRVENCTO, VRDIFERE, VRENTRADA, VR_NF,
        j, i,
        DTBASE, DTVENCTO,
        NDIAS, DIA_VECTO, MES_VECTO, ANO_VECTO, ANO_AUXILIAR, CONT_NDIAS,
        vrbaseoperacao, vrtitcred, delok, seq, tementrada, temcredito,
        GERDUP_VRDESCTO,
        VRORIGVENCTO, VRORIGDIFERE, VRORIGDESCTO, VRORIGDESCTO
        
;-- Verifica se composicao de dias ‚ correta -----------------------------------
If Not Checa_CompDias([FaturaC->Composicao de Dias])                            ;** Verifica‡Æo utilizava no BALCAO
   Then Return
EndIf

If not IsAssigned(PARAM_DATA_BASE) then PARAM_DATA_BASE="" endif        

;-- checa qual a data base para calculo dos vencimentos ------------------------
If [FaturaC->Tipo de Pagamento]<>"O" ; outros
   then
        If PARAM_DATA_BASE="S"
           Then 
                If Not IsAssigned(INICIO_DIALOG) Then INICIO_DIALOG=False EndIf
                If Not IsAssigned(OP_SHOWD)      Then OP_SHOWD=""         EndIf 
                VSD_Data_Base=[FaturaC->Data de Emissao]
           
                Echo Normal
                Echo Off
           
                Showdialog "Data p/ Calculo do Vencimento" Proc "Data_Dialog"
                Trigger "OPEN","ARRIVE"
                Key "TAB","ReverseTab","ENTER","ESC","ClearArea"
                @ 09,19 height 04 width 40
           
                Label  @ 1,03 "Informe a Data:" for "Data_Base"
                Accept @ 1,20  Width 13 "D" picture "#[#].##.##[##]" Tag "Data_Base" to VSD_Data_Base
           
                Enddialog
                Switch
                    Case Retval="ESC":
                         Return
                EndSwitch   
                If IsBlank(VSD_Data_Base)
                   Then FastMsg("Data n„o foi informada!")
                        Return
                EndIf
                Mouse Show
                DTBASE=VSD_Data_Base
          Else
                Switch
                  Case IsBlank([FaturaC->Data de Saida])                   : DTBASE=[FaturaC->Data de Emissao]
                  Case [FaturaC->Data de Saida]=[FaturaC->Data de Emissao] : DTBASE=[FaturaC->Data de Emissao]
                  OtherWise:
                    Echo Normal
                    Echo Off
              
                    ShowPopup " Calcular vencimentos sobre " CENTERED
                        "Data de ~E~miss„o" : " Calcula vencimentos sobre data de emiss„o":"EMISSAO",
                        "Data de ~S~aida"   : " Calcula vencimentos sobre data de saida  ":"SAIDA"
                    EndMenu
                  To Opcaoc
              
                    echo off
              
                  If Opcaoc="SAIDA"
                     Then DTBASE=[FaturaC->Data de Saida  ]
                     Else DTBASE=[FaturaC->Data de Emissao]
                  EndIf
                EndSwitch
        EndIf
endif
;-- inicializa‡Æo titulo de credito --------------------------------------------
Aguarde("Calculando Vencimentos")

temcredito=false
vrtitcred =0

;-- Excluir venctos existentes para gerar novos --------------------------------
Moveto "FaturaV"
Home
while true
  if RecordStatus("New")
     then quitloop
  endif   

  delok=true
  if (PARAM_TITCRED="T" And [Forma de Pagamento]="TC" and
     (substr([Numero do Cartao],1,3)="CP-" or substr([Numero do Cartao],1,3)="CR-")) Or
     [Forma de Pagamento]="RP" 
     then temcredito=true
          delok=false
  endif
  if delok
     then unlockrecord
          del
     else skip  
          if eot() then quitloop endif   
  endif        

endwhile

Switch
  Case SYS_APLICATIVO = "TROCA" :                                               ;** Verifica‡Æo utilizava no TROCA
       if isblank([FaturaC->Valor DebitoCredito]) or [FaturaC->Valor DebitoCredito]=0 or
          [FaturaC->Tipo de Pagamento]="O" ; outros
          Then Moveto "FaturaC"
               Return
        EndIf
  OtherWise                    :
        If [FaturaC->Tipo de Pagamento]="O" ; outros
           Then Moveto "FaturaC"
                Return
        EndIf      
EndSwitch

;-- Soma valores p/ titulo de credito ------------------------------------------
if temcredito            
   then 
        i=0
        Moveto "FaturaV"
        Home
        while true
          if RecordStatus("New")
             then quitloop
          endif   
        
          if (PARAM_TITCRED="T" And [Forma de Pagamento]="TC" and
             (substr([Numero do Cartao],1,3)="CP-" or substr([Numero do Cartao],1,3)="CR-" )) Or
             [Forma de Pagamento]="RP" 
             then i=i+1
                  [Sequencia]=AlinhM(StrVal(i),2) ; refaz ordem da sequencia
                  vrtitcred  =vrtitcred+[Valor]
          endif
          skip   
          if eot() then quitloop endif   
        
        endwhile
endif
       
;-- Calcula Numero parcelas na operacao ----------------------------------------
NP            = [FaturaC->Numero de Parcelas] ; np da nota
NPC           = 1                             ; np base da composica
i             = 1                                  
If Not IsBlank([FaturaC->Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[FaturaC->Composicao de Dias],i)
          If pos_s=0
             Then QuitLoop
             Else NPC=NPC+1
                  i=pos_s+1
          EndIf
        EndWhile
   Else NPC=0
EndIf

If NPC=0
   Then NP=[FaturaC->Numero de Parcelas]
   Else If NPC=1 And [FaturaC->Numero de Parcelas]>1
           Then NP=[FaturaC->Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

;-- inicializa‡Æo da entrada ---------------------------------------------------
VRENTRADA=0
If IsAssigned(VSD_VrEntrada) 
   Then VRENTRADA=VSD_VrEntrada
        release vars VSD_VrEntrada
EndIf

If (PARAM_UTILIZA_ENTRADA="1" Or PARAM_UTILIZA_ENTRADA="2") And VRENTRADA>0
   Then tementrada=True
   Else tementrada=False
endif  
if NP=1 and tementrada Then tementrada=False endIf  
if not tementrada      Then VRENTRADA =0     endif   

;-- Valor base para parcelamentos ----------------------------------------------
Switch
  Case SYS_APLICATIVO = "TROCA" :                                               ;** Regra utilizava no TROCA
       vrbaseoperacao=0
       if not isblank([FaturaC->Valor DebitoCredito]) and [FaturaC->Valor DebitoCredito]>0
          then vrbaseoperacao=[FaturaC->Valor DebitoCredito]
       endif   
       if not isblank([FaturaC->Valor DebitoCredito]) and [FaturaC->Valor DebitoCredito]<0
          then vrbaseoperacao=[FaturaC->Valor DebitoCredito]*-1
       endif   
       VR_NF = vrbaseoperacao
  OtherWise                     :
       vrbaseoperacao=[FaturaC->Valor Nota Fiscal]
       VR_NF = vrbaseoperacao         
EndSwitch

;-- Verifica Novo VR_NF para parcelamentos -------------------------------------
If tementrada
   Then VR_NF = VR_NF-VRENTRADA
EndIf
if temcredito
   then VR_NF = VR_NF-vrtitcred
endif
If PARAM_TITCRED="T" 
   then VR_NF = VR_NF+[FaturaC->Valor TC]
endif
 
If (SYS_CODIGO_CLIENTE="0003" Or SYS_CODIGO_CLIENTE="0051") And 
   [FaturaC->Frete Incluso na Nota]="+"
   Then VR_NF = VR_NF-[FaturaC->Valor do Frete]
EndIf

if VR_NF<=0  ; creditos > vrnf
   then Moveto "FaturaC"
        return
endif

;-- Calcula valor da parcela e diferen‡a ---------------------------------------
AUX_NP=NP
If tementrada
   Then AUX_NP=NP-1
EndIf

VRVENCTO = NDecimal(((VR_NF)/AUX_NP),2)

if SYS_CODIGO_CLIENTE="0222" Or
  ;SYS_CODIGO_CLIENTE="0232" Or  
   SYS_CODIGO_CLIENTE="0418"  
   then VRVENCTO = int(VRVENCTO)
endif   
VRDIFERE = VR_NF-(VRVENCTO*AUX_NP)

If (SYS_CODIGO_CLIENTE="0003" Or SYS_CODIGO_CLIENTE="0051") And 
   [FaturaC->Frete Incluso na Nota]="+"
   Then VRDIFERE = VRDIFERE + [FaturaC->Valor do Frete]
EndIf

;--O Calcula valor da comissao e diferen‡a -------------------------------------
; calculo de comissao ‚ feito na proc RATEIO_COMISSAO_VENCTOS() *Bib_Vend
;-------------------------------------------------------------------------------

;-- Regra gera duplicata com ou sem instrucao de desconto ----------------------
;Utilizava no Bib_Fat, se necess rio habilitar para o BALCAO
If SYS_APLICATIVO = "FATURA"                                                    ;** Regra utilizava no FATURA
   Then GERDUP_VRDESCTO=0
        Switch
          Case GERDUP_CDESCTO="1": GERDUP_VRDESCTO = [FaturaC->Valor Desconto]
          Case GERDUP_CDESCTO="2": GERDUP_VRDESCTO = Round(([FaturaC->Valor Mercadoria]*GERDUP_TXDESCTO)/100,2)
        EndSwitch
        VRORIGDESCTO   =NDecimal(GERDUP_VRDESCTO/AUX_NP,2)
        VRORIGDIFDESCTO=GERDUP_VRDESCTO-(VRORIGDESCTO*AUX_NP)
        
        Switch
          Case GERDUP_CDESCTO="1": vrbaseoperacao = VR_NF + GERDUP_VRDESCTO
                                   VRORIGVENCTO   = NDecimal((vrbaseoperacao/AUX_NP),2)
                                   VRORIGDIFERE   = (vrbaseoperacao)-(VRORIGVENCTO*AUX_NP)
                                   If (SYS_CODIGO_CLIENTE="0003" Or SYS_CODIGO_CLIENTE="0051") And 
                                      [FaturaC->Frete Incluso na Nota]="+"
                                      then VRORIGDIFERE = VRORIGDIFERE + [FaturaC->Valor do Frete]
                                   endif    
        
          OtherWise              : VRORIGVENCTO   = VRVENCTO
                                   VRORIGDIFERE   = VRDIFERE
        EndSwitch  
EndIf
;-- Gerar parcelas -------------------------------------------------------------
j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[FaturaC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([FaturaC->Composicao de Dias],j,(Len([FaturaC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([FaturaC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([FaturaC->Composicao de Dias],j,Len([FaturaC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([FaturaC->Composicao de Dias],j,pos_s-j))
          j=pos_s+1
  EndIf
  
  Switch
    Case SYS_APLICATIVO = "BALCAO" Or
         SYS_APLICATIVO = "BNFCE" :
         If PARAM_DATA_BASE="S" and i=1 and NDIAS=0
            then DTVENCTO=[FaturaC->Data de Emissao]
            else DTVENCTO=DTBASE
         endif
    OtherWise                     :       
         Release Vars DIAS_NDIAS
         DTVENCTO=DTBASE
  EndSwitch       
  
  While True
    Moveto [Sequencia]
    End
    SEQ = [Sequencia]
    Down
    [Numero da OF     ]=[FaturaC->Numero da OF]

    Moveto [Sequencia]
    Seta_Sequencia(SEQ,False)
    If not IsLockRecord()
       then quitloop
       else Del
    EndIf
  EndWhile

  ;-- calcula ndias e data vencto ----------------------------------------------
  If pos_s=0 And NPC=1 And NP>1
     Then [Numero de Dias   ]=BlankNum()
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day(DTVENCTO)
                  MES_VECTO=Month(DTVENCTO)
                  ANO_VECTO=Year(DTVENCTO)
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12
                     Then Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)
                  EndSwitch
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+StrVal(ANO_VECTO))
             Else ;Quando o informar Composi‡Æo de Dias = 0 "Seria como ENTRADA"
                  If NDIAS=0 
                     Then CONT_NDIAS=i-1
                     Else CONT_NDIAS=i
                  EnDIf  
                  If Not IsAssigned(DIAS_NDIAS) Then DIAS_NDIAS=NDIAS EndIf
                  
                  [Numero de Dias   ]=DIAS_NDIAS*CONT_NDIAS
                  [Data             ]=DTVENCTO+(DIAS_NDIAS*CONT_NDIAS)
                  
                  If NDIAS=0 
                     Then DIAS_NDIAS=30
                  EndIf  
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=DTVENCTO+NDIAS
  EndIf  

  ;-- verifica forma de pagamento ----------------------------------------------
  If i=1 And NP>1 And NDIAS=0
     Then [Forma de Pagamento]="DN" 
     Else [Forma de Pagamento]=[FaturaC->Forma de Pagamento]
  EndIf
  
  ;-- verifica regra do cliente ------------------------------------------------
  If SYS_APLICATIVO = "BALCAO"                                                  ;** regra utilizava no BALCAO
     Then If ;UTILIZA_CP_FP And
             [FaturaC->Tipo Movimento Estoque]="S" And
             Search("VEND",[FaturaC->Descricao da Destinacao])>0 And 
             CLIENTE_TPASSIT  ="RECEBEDIAFIXO" And
             CLIENTE_CDPGTO   =[FaturaC->Condicao de Pagamento]  And
             CLIENTE_FPGTO    =[FaturaC->Forma de Pagamento] And
             CLIENTE_DIAVENCTO>""
             Then
                  DIA_VECTO=NumVal(CLIENTE_DIAVENCTO)
                  MES_VECTO=Month(Ultimo_Dia(AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)+StrVal(Year([FaturaC->Data de Emissao])))+1)
                  ANO_VECTO= Year(Ultimo_Dia(AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)+StrVal(Year([FaturaC->Data de Emissao])))+1)
                  
                  ;*********** Verificando o Ultimo dia do Mˆs *****************
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)
                  EndSwitch
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+StrVal(ANO_VECTO))
                  [Numero de Dias   ]=[Data]-[FaturaC->Data de Emissao]
          Endif
  EndIf
    
  ;-- verifica valores ---------------------------------------------------------
  If SYS_APLICATIVO = "FATURA"                                                  ;** regra utilizava no FATURA  
     Then 
          [Duplicata_VrOriginal   ]=BlankNum()
          [Duplicata_VrDesconto   ]=BlankNum()
          [Duplicata_DtLimDesconto]=BlankDate()
        
          Switch
            Case i=1 And tementrada  : [Valor            ]=VRENTRADA
                                                           
            Case i<>NP               : [Valor            ]=VRVENCTO
                                       If GERDUP_CDESCTO>"0"
                                          Then [Duplicata_VrOriginal   ]=VRORIGVENCTO
                                               [Duplicata_VrDesconto   ]=VRORIGDESCTO
                                               [Duplicata_DtLimDesconto]=[Data] 
                                       EndIf
        
            Case i=NP                : [Valor            ]=VRVENCTO+VRDIFERE
                                       If GERDUP_CDESCTO>"0"
                                          Then [Duplicata_VrOriginal   ]=VRORIGVENCTO+VRORIGDIFERE
                                               [Duplicata_VrDesconto   ]=VRORIGDESCTO+VRORIGDIFDESCTO
                                               [Duplicata_DtLimDesconto]=[Data] 
                                       EndIf
          EndSwitch 
     Else Switch
            Case i=1 And tementrada  : [Valor            ]=VRENTRADA
            Case i<>NP               : [Valor            ]=VRVENCTO
            Case i=NP                : [Valor            ]=VRVENCTO+VRDIFERE
          EndSwitch     
  EndIf

  ;-- Pega dados do cartao -----------------------------------------------------
  If [Forma de Pagamento]="CT" Or
     [Forma de Pagamento]="CD" Or
     [Forma de Pagamento]="CL" Or
     [Forma de Pagamento]="PX" 
     Then [Nome do Cartao  ]=Nome_Cartao
          [Numero do Cartao]=Numero_Cartao
          
          If [Forma de Pagamento]="PX"
             Then If Search("NOT",Upper(Table()))>0
                     Then GetRecord "\\Sistemas\\Vendas\\P_Cartao" [NotaC->Codigo da Empresa],Numero_Cartao To REG_CARTAOx
                     Else GetRecord "\\Sistemas\\Vendas\\P_Cartao" [FaturaC->Codigo da Empresa],Numero_Cartao To REG_CARTAO
                  EndIf    
                  If RetVal
                     Then VSD_CODIGO_CONTA = REG_CARTAO["Codigo da Conta"] 
                  EndIf
                  [Codigo da Conta]=VSD_CODIGO_CONTA
          EndIf
  EndIf
  UnLockRecord
  i=i+1
EndWhile

Moveto "FaturaC"
Sleep 500

LimpAguarde()

EndProc

;*******************************************************************************
;* Rotina p/ Checagem de Estoque Negativo                                     **
;*******************************************************************************
Proc Checa_Estoque()
Private ItemRef, ItemCodFor, regitens

ULTIMO_CTENTRADA=0
SALDO_DISPONIVEL=0
SALDOATUAL      =BlankNum()
    
If SYS_APLICATIVO = "TROCA"
   Then If OP_ITEM="ENT"
           Then Moveto "FaturaID"
                Return True
        EndIf 
EndIF

If [FaturaC->Atualiza Estoque]<>"S" Or [FaturaC->Tipo Movimento Estoque]="E" Or IsBlank([FaturaI->Codigo do Item]) 
   Then Moveto "FaturaI"
        Return True
EndIf

If Not TipoItem_ControlaEstoque([FaturaI->Tipo do Item])
   Then Moveto "FaturaI"
        Return True
EndIf

If Not IsAssigned(PARAM_CHECA_ESTOQUE_SEMMENSSAGEM) Then PARAM_CHECA_ESTOQUE_SEMMENSSAGEM = True EndIf
If Not IsAssigned(VERIFICA_SALDO_DISPONIVEL)        Then VERIFICA_SALDO_DISPONIVEL=False         EndIf

;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([FaturaC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [FaturaC->Data de Saida  ]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[FaturaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [FaturaC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
MES_EST = AlinhM(StrVal(Month(AUX_DATA)),2)
ANO_EST = StrVal(Year(AUX_DATA))   

While True
  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Locate [FaturaC->Codigo da Empresa],
         [FaturaI->Codigo do Item   ], ANO_EST, MES_EST
  If Not RetVal
     Then If Not Cria_Ficha([FaturaC->Codigo da Empresa],[FaturaI->Codigo do Item],False)
             Then Moveto "FaturaI"
                  Release Vars PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
                  Return False
             Else Loop
          EndIf
  EndIf
;;;;;  While IsLockRecord() EndWhile porque fazder lock nÆo naä h  altera‡Æo no registro !!
  QuitLoop
EndWhile

SALDOATUAL=[Saldo Atual]
If IsBlank(SALDOATUAL)
   Then SALDOATUAL=0
EndIf
NOVOSALDO=-1

If SYS_APLICATIVO = "BALCAO" and
   sys_codigo_Cliente="0314" and  ([Data do Preco de Custo]<(Today()-90))
   then 
        MSG=    Completa("Item: "+[FaturaI->Codigo do Item]+" - "+[FaturaI->Descricao do Item ],60," ")+"// //"
        MSG=MSG+"éltima compra com mais de 3 meses !// //"
        MSG=MSG+"éltima compra em "+format("D13",[Data do Preco de Custo])
        Mensagem(MSG)
endif

If SYS_APLICATIVO = "BALCAO"
   Then If ATUALIZA_ORCAMENTO And SALDOATUAL < [FaturaI->Quantidade ]
           Then Moveto "FaturaI"
                Release Vars PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
                Return False
        EndIf
EndIf

Switch
  Case CHAVEI=1: NOVOSALDO=NDecimal(  [Saldo Atual]       -[FaturaI->Quantidade] ,3)
  Case CHAVEI=0: NOVOSALDO=NDecimal((([Saldo Atual]+QUANT)-[FaturaI->Quantidade]),3)
EndSwitch

If VERIFICA_SALDO_DISPONIVEL
   Then If NOVOSALDO>=0
           Then If [Saldo Atual]>[FaturaI->Quantidade]
                   Then SALDO_DISPONIVEL=[FaturaI->Quantidade]
                   Else SALDO_DISPONIVEL=[Saldo Atual]
                EndIF 
           Else SALDO_DISPONIVEL=[Saldo Atual]
        EndIf   
        Moveto "FaturaI"
        Return True
EndIf

VSD_I_Custo_Unitario=NDecimal(([Custo Total Atual]/[Saldo Atual]),5)
If VSD_I_Custo_Unitario=0 Or IsBlank(VSD_I_Custo_Unitario)
   Then VSD_I_Custo_Unitario=[Ultimo Custo Atual]
EndIf
ULTIMO_CTENTRADA    =NDecimal([Preco de Custo],2)
;-------------------------------------------------------------------------------

If SYS_APLICATIVO = "FATURA"
   Then If IsAssigned(ver_saldo) And ver_saldo And CHAVEI=1
           Then titulo_estoque="Saldo "+MES_EST+"/"+ANO_EST
                saldo_Estoque =ltrim(Format("W13.3,EIC",NDecimal([Saldo Atual],3)))
           
                Release vars ver_saldo,PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
                
                Moveto "FaturaI"
                Return True 
        Endif
   Else UnLockRecord     
EndIf       
        
Moveto "FaturaI"
If NOVOSALDO>=0
   Then Release Vars PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
        Return True
   Else ItemRef   =""
        ItemCodFor=""
        
        getrecord "\\sistemas\\estoque\\itens" [Codigo do Item] to regitens
        if retval
           Then ItemRef   =regitens["Referencia"]
                ItemCodFor=regitens["Codigo Fornecedor"]
        EndIf    
      
        MSG=    "Estoque Insuficiente em "+LTrim(StrVal(Format("W11.3,EIC",NOVOSALDO)))+", Verificar !// //"
        MSG=MSG+Completa("Item: "+[Codigo do Item]+" - "+SubStr([Descricao do Item ],1,30),60," ")+"//"
        MSG=MSG+Completa(" Ref: "+ItemRef,60," ")+"//"
        MSG=MSG+Completa("  CF: "+ItemCodFor,60," ")

        If PARAM_CHECA_ESTOQUE_SEMMENSSAGEM
           Then Mensagem(MSG)
        EndIf
        Release Vars PARAM_CHECA_ESTOQUE_SEMMENSSAGEM,ItemRef, ItemCodFor
         
        If PARAM_BLOQUEIA_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf   

EndProc ;Checa_Estoque()

;*******************************************************************************
;* Rotina Atualizacao do Estoque (Inclusao, Alteracao e Exclusao)             **
;*******************************************************************************
Proc Estoque()

If SYS_APLICATIVO = "TROCA"
   Then If OP_ITEM="ENT"
           Then Return
        EndIf   
EndIf

CUSTO=BlankNum()
If [FaturaC->Atualiza Estoque]<>"S" Or IsBlank([FaturaI->Codigo do Item]) 
   Then Return
EndIf

If Not TipoItem_ControlaEstoque([FaturaI->Tipo do Item])
   Then Return
EndIf

;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([FaturaC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [FaturaC->Data de Saida  ]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[FaturaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [FaturaC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
MES_EST = AlinhM(StrVal(Month(AUX_DATA)),2)
ANO_EST = StrVal(Year(AUX_DATA))   
              
While True
 Moveto "\\Sistemas\\Estoque\\SdEstq"
 Locate [FaturaC->Codigo da Empresa],
        [FaturaI->Codigo do Item   ], ANO_EST, MES_EST
 If Not RetVal
    Then If CHAVEI<>8
            Then If Not Cria_Ficha([FaturaC->Codigo da Empresa],[FaturaI->Codigo do Item],False)
                    Then Moveto "FaturaI"
                         Return False
                    Else Loop
                 EndIf
            Else Moveto "FaturaI"
                 Return False
         EndIf
 EndIf
 While IsLockRecord() EndWhile
 QuitLoop
EndWhile

CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
If CUSTO=0 Or IsBlank(CUSTO)
   Then CUSTO=[Ultimo Custo Atual]
EndIf

;-- Opera‡Æo s¢ para Compra ----------------------------------------------------
If SYS_APLICATIVO <> "TROCA"
   Then if (sys_codigo_Cliente="0377" or sys_codigo_Cliente="0395" ) and
           [FaturaC->Tipo Movimento Estoque]="E" And
           Search("COMPRA",[FaturaC->Descricao da Destinacao])>0 and
           Search("SUCATA",[FaturaC->Descricao da Destinacao])>0
           then CUSTO=[FaturaI->Preco Unitario]
        endif   
endif   

Switch
  Case CHAVEI=1:
     Switch
       Case [FaturaC->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal([Saldo Atual]+[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]+NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
       Case [FaturaC->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]-NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
     EndSwitch
  Case CHAVEI=8:
     Switch
       Case [FaturaC->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]-([FaturaI->Custo Medio Unitario]*[FaturaI->Quantidade]),2)
       Case [FaturaC->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal([Saldo Atual]+[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]+NDecimal(([FaturaI->Custo Medio Unitario]*[FaturaI->Quantidade]),2),2)
       EndSwitch
  Case CHAVEI=0:
     Switch
       Case [FaturaC->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal(([Saldo Atual]-QUANT)+[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal(([Custo Total Atual]-CTTOTAL)+NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
       Case [FaturaC->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal(([Saldo Atual]+QUANT)-[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal(([Custo Total Atual]+CTTOTAL)-NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
       EndSwitch
EndSwitch
If ([Custo Total Atual]/[Saldo Atual])>0
   Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
EndIf
UnLockRecord
SaveTables

Moveto "FaturaI"
[Custo Medio Unitario]=CUSTO

EndProc ;Estoque()

;*******************************************************************************
;* Seta Numero do Lan‡amento                                                   *
;*******************************************************************************
Proc FATURA_NLancto_Particularidade()

If IsBlank([])
   Then 
   
        Mensagem("Configurado para nÆo gerar lan‡amento sequencial autom tico !////"+
                 "Informe o n£mero da ordem de faturamento do seu controle !////"+
                 "D£vidas, verifique com o suporte vise.")
        Del
        Return False
   
   
        If ORDFAT = "999999"
           Then Mensagem("Faixa de c¢digo livre excedida !////"+
                         "Ser  necess rio executar a rotina de exclus„o de ordem de faturamento.//"+
                         "D£vidas, verifique com o suporte vise.")
                Del
                Return False
        EndIf
        
        
        If IsBlank(ORDFAT)
           Then ORDFAT="1"
           Else ORDFAT=StrVal(NumVal(ORDFAT)+1)
        EndIf
        []=ORDFAT
EndIf
[]=ALINH()
ORDFAT=[]
Del
PickForm "1"
Moveto [Numero da OF]
Locate ORDFAT
If Retval
   Then CHAVEC=0
   Else CHAVEC=1
        End
        If Not IsBlank([Numero da OF])
           Then CtrlPgDn
        EndIf
        Moveto [Numero da OF]
        [Numero da OF]=ORDFAT
EndIf
If Not IsLockRecord()
   Then Echo Normal
        Echo Off
        If CHAVEC=1
           Then Moveto "FaturaI"
                Moveto [Item da Of]
                If Not RecordStatus("New")=True
                   Then MENSAGEM("N§ OF com erro, verificar empresa e os itens j  existentes !// Recuperar a OF ou exclui-la !")
                        Moveto "FaturaC"
                        CHAVEC=1
                        Controle_Dia()
                        UnLockRecord
                        IsLockRecord()
                        Return True
                EndIf
                Moveto "FaturaC"
        EndIf
        If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
           (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
           Then Return True
        EndIf
EndIf

EndProc ;FATURA_NLancto_Particularidade() 

;*******************************************************************************
;* Seta Numero do Lan‡amento                                                   *
;*******************************************************************************
Proc FATURA_NLancto()

Switch
  Case SYS_APLICATIVO="FATURA" : OPCAO_FORM_REL = "F"
                                 OPCAO_FORM_MAN = "1"

  Case SYS_APLICATIVO="BALCAO" : OPCAO_FORM_REL = "11"
                                 OPCAO_FORM_MAN = "3"

  Case SYS_APLICATIVO="TROCA"  : OPCAO_FORM_REL = "F"
                                 OPCAO_FORM_MAN = "4" 

  Case SYS_APLICATIVO="BNFCE"  : OPCAO_FORM_REL = "12"
                                 OPCAO_FORM_MAN = "5"
EndSwitch    
        
Switch
   Case SYS_CODIGO_CLIENTE = "0436" : ;NÆo verifica se n£mero ‚ sequencial (Em 12/06/2019)
                                      return FATURA_NLancto_Particularidade()
                                      ;;;Return True
   OtherWise                        :
     If Numero_Lancamento("",OPCAO_FORM_REL)
        Then ORDFAT = PROXLANCTO_NLANC
             Release Vars PROXLANCTO_NLANC  
        Else Return False
     EndIf
     If Not PROXIMO_LANCTO_REG_ACHOU
        Then GetRecord "\\Sistemas\\Vendas\\FaturaI" ORDFAT To REG_FATURAI
             If RetVal
                Then Mensagem(Completa("A Ordem de Faturamento "+ORDFAT+" esta com erro, verificar empresa e/ou os",74," ")+
                              Completa("itens j  existentes!                                                      ",74," ")+"//"+
                              Completa("-> Recuperar a OF "+ORDFAT+" ou exclu¡-la!",74," "))
                     Del
                     Return False         
             EndIf
             If MODOFILTRAR
                Then FormKey Moveto TabelaControle If Not IsBlank([]) Then CtrlBackSpace []=ORDFAT UnLockRecord EndIf Moveto TabelaPrincipal FormKey
             EndIf    
      EndIf
      
      If PROXIMO_LANCTO_REG_ACHOU And MODOFILTRAR And SYS_CODIGO_CLIENTE="0435"
         Then GetRecord "\\Sistemas\\Cadastro\\Usuarios" SYS_CHAPA_USUARIO To REG_USUARIO
              If ReTval
                 Then If [Codigo da Empresa]<>REG_USUARIO["Cod_Empresa"]
                         Then Mensagem("Ordem de Faturamento "+ORDFAT+" foi realizada pela empresa "+[Codigo da Empresa]+"!")
                              Return False
                      EndIf
              EndIf
              FormKey Moveto TabelaControle Del Down Moveto TabelaPrincipal FormKey
      EndIf
      
      PickForm OPCAO_FORM_MAN    
      Moveto [Numero da OF]
      If PROXIMO_LANCTO_REG_ACHOU 
          Then CHAVEC=0
               CALC_VENCTO = False
               If Checa_Controle([Numero_Controle_Dia])
                  Then Return True
               EndIf
          Else CHAVEC=1
               CALC_VENCTO = True
               If Not Checa_Controle(SYS_CONTROLE_DIA)
                  Then OPCAO_FORM=OPCAO_FORM_REL
                  Else Return True
               EndIf                  
      EndIf
      Return False
EndSwitch
 
EndProc ;FATURA_NLancto()

;*******************************************************************************
;* Grava Campo/tipos do layout                                                 *
;*******************************************************************************
Proc NFE_GravaCampo(Campo,Tipo,Obrig,Valor)
Private Campo, Tipo, Valor, s, posl

If Not IsBlank(Campo)
   Then If SubStr(Tipo,1,1)="N" Or
           SubStr(Tipo,1,1)="$"
           Then If IsBlank(valor)
                   Then valor=0
                EndIf   
                If Obrig="N" And valor=0
                   Then Return
                EndIf   
        EndIf
EndIf   

campo=RTrim(campo)
s=""
Switch
  case Tipo="I"  : s=RTrim(StrVal(Int(valor)))

  case Tipo="N"  : s=RTrim(LTrim(Format("W15.3",valor)))
  case Tipo="N2" : s=RTrim(LTrim(Format("W15.2",valor)))
  case Tipo="N3" : s=RTrim(LTrim(Format("W15.3",valor)))
  case Tipo="N4" : s=RTrim(LTrim(Format("W15.4",valor)))
  case Tipo="N5" : s=RTrim(LTrim(Format("W15.5",valor)))

  case Tipo="$"  : s=RTrim(LTrim(Format("W15.2",valor)))
  case Tipo="$2" : s=RTrim(LTrim(Format("W15.2",valor)))
  case Tipo="$3" : s=RTrim(LTrim(Format("W15.3",valor)))
  case Tipo="$4" : s=RTrim(LTrim(Format("W15.4",valor)))
  case Tipo="$5" : s=RTrim(LTrim(Format("W15.5",valor)))
  case Tipo="$6" : s=RTrim(LTrim(Format("W15.6",valor)))

  case Tipo="S"  : If Search("MODELORTM",Campo)>0
                      Then s=RTrim(UPPER(valor))
                      Else s=RTrim(UPPER(NFE_Tira_CharNFE(valor)))
                   EndIf   
  case Tipo="SN" : s=RTrim(Tira_CharNum(valor))
  case Tipo="SI" : s=RTrim(StrVal(NumVal(valor)))
  case Tipo="DH" : 
       If Not IsBlank(Valor)
          Then Switch
                  Case Campo = "dhEmi_B09"    :
                       Hora = Time()
                  Case Campo = "dhSaiEnt_B10" :
                       If regfaturac["Data de Saida"]<=regfaturac["Data de Emissao"] And regfaturac["Hora de Saida"]<=Time()
                          Then Hora = Time()
                               Hora_Aux = StrVal(SubStr(Hora,1,2))
                               Minu = StrVal(SubStr(Hora,4,2))
                               Switch
                                  Case Minu="59" : Minu = "00"
                                  OtherWise      : Minu = AlinhM(StrVal(NumVal(Minu)+1),2)
                               EndSwitch   
                               Switch
                                  Case Hora_Aux="23"  And Minu="00" : Hora_Aux = "00"
                                  Case Hora_Aux<>"23" And Minu="00" : Hora_Aux = AlinhM(StrVal(NumVal(Hora_Aux)+1),2)
                               EndSwitch   
                               Hora = Hora_Aux+":"+Minu+":59"
                          Else Hora = regfaturac["Hora de Saida"]
                               Hora_Aux = StrVal(SubStr(Hora,1,2))
                               Minu = StrVal(SubStr(Hora,4,2))
                               Switch
                                  Case Minu="59" : Minu = "00"
                                  OtherWise      : Minu = AlinhM(StrVal(NumVal(Minu)+1),2)
                               EndSwitch   
                               Switch
                                  Case Hora_Aux="23"  And Minu="00" : Hora_Aux = "00"
                                  Case Hora_Aux<>"23" And Minu="00" : Hora_Aux = AlinhM(StrVal(NumVal(Hora_Aux)+1),2)
                              EndSwitch   
                               Hora = Hora_Aux+":"+Minu+":59"
                       EndIf                        
                  OtherWise                   : 
                       Hora = Time() ;Today()+":00"
               EndSwitch
               s=AlinhM(StrVal(Year(Valor)),4)+"-"+AlinhM(StrVal(Month(Valor)),2)+"-"+AlinhM(StrVal(Day(Valor)),2)+
               "T"+Hora+Fuso_Horario   ;"00:00:00"
          Else s=""
       EndIf   
  case Tipo="D"  : 
           If Not IsBlank(Valor)
              Then s=AlinhM(StrVal(Year(Valor)),4)+"-"+AlinhM(StrVal(Month(Valor)),2)+"-"+AlinhM(StrVal(Day(Valor)),2)
              Else s=""
           EndIf   
  OtherWise      : s=valor
EndSwitch

If Not IsBlank(Campo)
   Then If SubStr(Tipo,1,1)="N" Or
           SubStr(Tipo,1,1)="$"
           Then If SubStr(s,1,1)="."
                   Then s="0"+s
                EndIf       
        EndIf
        s=campo+"="+s
Endif

Print File ArqTX2 s+"\n"
EndProc

;*******************************************************************************
;* grava memo                                                                  *
;*******************************************************************************
Proc NFE_GravarCampoMemo(ncampo,s,tamstr)
private ncampo, s, tamstr, nlobs, icc, posobs

if isblank(s)
   then return
endif   

If regfaturac["Valor Substituicao ICMS"]>0 ; impressao modo paisagem
   then tamstr=130
   else tamstr=100
endif   

NFE_GravaCampo("","","","")

nlobs=Len(s)/tamstr
If nlobs-Int(nlobs)>0
   Then nlobs=Int(nlobs)+1
   Else nlobs=Int(nlobs)
EndIf
posobs=1
For icc from 1 to nlobs
	If icc=1
	   Then Print File ArqTX2 ncampo+"="
	EndIf	     
	Print File ArqTX2 RTrim(UPPER(NFE_Tira_CharNFE(SubStr(s,posobs,tamstr))))
  posobs=posobs+tamstr
EndFor
Print File ArqTX2 "\n"

endproc

;*******************************************************************************
;* Desmembra campo endereco em Logradouro, Numero e Complemento                *
;*******************************************************************************
Proc NFE_PegaEndereco(s)
Private s,posl,posn

End_Logradouro =""
End_Numero     =""
End_Complemento=""

posl=SearchFrom(",",s,1)
If posl<2
   Then End_Logradouro =s
   Else End_Logradouro=LTrim(RTrim(SubStr(s,1,posl-1)))
       
        posn=SearchFrom(",",s,posl+1)
        If posn>1
           Then End_Numero     =LTrim(RTrim(SubStr(s,posl+1,(posn-posl)-1)))
                End_Complemento=LTrim(RTrim(SubStr(s,posn+1,40)))
           Else End_Numero     =LTrim(RTrim(SubStr(s,posl+1,40)))
        EndIf
EndIf   

EndProc

;*******************************************************************************
;* Rotina Converte caracter especial e passa para maiusculo                    *
;*******************************************************************************
Proc NFE_Tira_CharNFE(s)
private s, sn, i, ch

sn=""
For i from 1 to Len(s)
  ch=SubStr(s,i,1)
  Switch
   Case Asc(ch)=8   : ch="" ;
   Case Asc(ch)=9   : ch="" ;
   Case Asc(ch)=10  : ch="" ;
   Case Asc(ch)=11  : ch="" ;
   Case Asc(ch)=12  : ch="" ;
   Case Asc(ch)=13  : ch="" ;
   Case Asc(ch)=128 : ch="C" ; €
   Case Asc(ch)=129 : ch="u" ; �
   Case Asc(ch)=130 : ch="e" ; ‚
   Case Asc(ch)=131 : ch="a" ; ƒ
   Case Asc(ch)=132 : ch="a" ; „
   Case Asc(ch)=133 : ch="a" ; …
   Case Asc(ch)=134 : ch="a" ; †
   Case Asc(ch)=135 : ch="c" ; ‡
   Case Asc(ch)=136 : ch="e" ; l
   Case Asc(ch)=137 : ch="e" ; ‰
   Case Asc(ch)=138 : ch="e" ; i
   Case Asc(ch)=139 : ch="i" ; ‹
   Case Asc(ch)=140 : ch="i" ; Œ
   Case Asc(ch)=141 : ch="i" ; ·
   Case Asc(ch)=142 : ch="A" ; Ž
   Case Asc(ch)=143 : ch="A" ; �
   Case Asc(ch)=144 : ch="E" ; �
   Case Asc(ch)=147 : ch="o" ; “
   Case Asc(ch)=148 : ch="o" ; ”
   Case Asc(ch)=149 : ch="o" ; •
   Case Asc(ch)=150 : ch="u" ; –
   Case Asc(ch)=151 : ch="u" ; —
   Case Asc(ch)=152 : ch="y" ; ˜
   Case Asc(ch)=153 : ch="O" ; ™
   Case Asc(ch)=154 : ch="U" ; š
   Case Asc(ch)=160 : ch="a" ;  
   Case Asc(ch)=161 : ch="i" ; ¡
   Case Asc(ch)=162 : ch="o" ; ¢
   Case Asc(ch)=163 : ch="u" ; £
   Case Asc(ch)=181 : ch="A" ; µ
   Case Asc(ch)=182 : ch="A" ; ¶
   Case Asc(ch)=183 : ch="A" ; ·
   Case Asc(ch)=167 : ch="o" ; §
   Case Asc(ch)=166 : ch="a" ; ¦
   Case Asc(ch)=193 : ch="A" ;
   Case Asc(ch)=194 : ch="A" ;
   Case Asc(ch)=195 : ch="A" ;
   Case Asc(ch)=198 : ch="a" ; Æ
   Case Asc(ch)=199 :        ; Ç
        If i+1 <= Len(s)
           Then If Asc(SubStr(s,i+1,1))=213
                   Then ch="C"     ; €
                   Else ch="A"     ; ¶
                EndIf
           Else ch="A"
        EndIf
   Case Asc(ch)=201 : ch="E" ;
   Case Asc(ch)=202 : ch="E" ;
   Case Asc(ch)=204 : ch="I" ;
   Case Asc(ch)=205 : ch="I" ;  
   Case Asc(ch)=210 : ch="E" ; Ò

   Case Asc(ch)=211 And ch="Ó" : ch="O" ; Ó
   Case Asc(ch)=211 And ch=" " : ch="O" ;  

   Case Asc(ch)=212 : ch="E" ; Ô
   Case Asc(ch)=213 : ch="O" ; i
   Case Asc(ch)=214 : ch="I" ; Ö
   Case Asc(ch)=215 : ch="I" ; ×
   Case Asc(ch)=216 : ch="I" ; Ø
   Case Asc(ch)=218 : ch="U" ;
   Case Asc(ch)=222 : ch="I" ; Þ
   Case Asc(ch)=224 : ch="O" ; à
   Case Asc(ch)=225 : ch="A" ; á  
   Case Asc(ch)=226 : ch="O" ; â

   Case Asc(ch)=227 And ch="Ò" : ch="A" ; Ò
   Case Asc(ch)=227 And ch="ã" : ch="A" ; ã

   Case Asc(ch)=228 : ch="o" ; ä
   Case Asc(ch)=229 : ch="O" ; å
   Case Asc(ch)=231 : ch="C" ;  

   Case Asc(ch)=233 And ch="é" : ch="E" ; é
   Case Asc(ch)=233 And ch="Ý" : ch="E" ; Ý
   
   Case Asc(ch)=234 And ch="ê" : ch="E" ; ê
   Case Asc(ch)=234 : ch="U" ; ê
   Case Asc(ch)=235 : ch="U" ; Ý
   Case Asc(ch)=237 : ch="I" ; Ý  
   Case Asc(ch)=243 : ch="O" ; ·
   Case Asc(ch)=244 : ch="O" ; ¶ 

;--- Especial no XLM -----------------------------------------------------------
   Case Asc(ch)=60  : ch=" " ; < 
   Case Asc(ch)=62  : ch=" " ; > 
   Case Asc(ch)=38  : ch="E" ; & 
   Case Asc(ch)=34  : ch=" " ; "  
   Case Asc(ch)=39  : ch=" " ; '  
   Case Asc(ch)=42  : ch=" " ; *  
;-------------------------------------------------------------------------------

   OtherWise:
     Switch
       Case Asc(ch)>0 and Asc(ch)<32 : ch="#"
       Case Asc(ch)>125              : ch="#"
     EndSwitch
  EndSwitch
  sn=sn+ch
EndFor
Return Upper(sn)
EndProc

;*******************************************************************************
;Calculo Mod11
;*******************************************************************************
Proc NFE_CalcMod11(Bloco)
Private peso, pesos, soma, resto, wc, wi

peso  ="98765432"
wi    =8

pesos =""
soma  =0
resto =0

For wc From 1 to Len(bloco)
  If wi=0
     then wi=8
  EndIf   
  pesos = Substr(peso,wi,1)+pesos
  wi=wi-1
EndFor  

 
For wc From 1 to Len(bloco)
  soma=soma+NUMVAL(SUBSTR (pesos,wc,1))* NUMVAL(SUBSTR (bloco,wc,1))
EndFor
resto=Mod(soma,11)
if (resto=0) or (resto=1) 
   then digito = 0                  
   Else digito = 11 - resto    
EndIF                           

Return digito
EndProc

;*******************************************************************************
;Calculo Chave de Acesso
;*******************************************************************************
Proc NFE_CalcChaveAcesso(PARAM)
private PARAM,AUX,LETRA,DV_CHV,AAMM_CHV

if not GetTabelasPrincipais()
   then return false
endif

If PARAM=""            ;NF_NSE01
   Then return true
EndIf      

verProc_B27= "4.0"      ;***** Identifica‡Æo da versÆo do aplicativo emissor de NF-e 

versao_A02 = VersaoNFe  ;***** Identifica‡Æo da versÆo do layout da NF-e

switch
  case PARAM="55" :
    Switch
      Case ModoNFe="Normal"   : tpEmis_B22="1"
      Case ModoNFe="FS"       : tpEmis_B22="2"
      Case ModoNFe="SCAN"     : tpEmis_B22="3"
      Case ModoNFe="SVCAN"    : tpEmis_B22="6"
      Case ModoNFe="DPEC"     : tpEmis_B22="4"
      Case ModoNFe="EPEC"     : tpEmis_B22="4"
      Case ModoNFe="FSDA"     : tpEmis_B22="5"
    EndSwitch
  
  case PARAM="65" :
    Switch
      Case ModoNFe="Normal"   : tpEmis_B22="1"
      Case ModoNFe="SCAN"     : tpEmis_B22="9"
    EndSwitch
  
endswitch

;--- Chave de Acesso -----------------------------------------------------------
AUX = regfaturac["Numero da OF"] 
If Type(NumVal(SubStr(AUX,1,1)))<>"N"
   Then LETRA = Asc(SubStr(AUX,1,1))
        LETRA = LETRA - 64
        Switch
          Case LETRA=1  : LETRA = "10" ;A
          Case LETRA=2  : LETRA = "11" ;B
          Case LETRA=3  : LETRA = "12" ;C
          Case LETRA=4  : LETRA = "13" ;D
          Case LETRA=5  : LETRA = "14" ;E
          Case LETRA=6  : LETRA = "15" ;F
          Case LETRA=7  : LETRA = "16" ;G
          Case LETRA=8  : LETRA = "17" ;H
          Case LETRA=9  : LETRA = "18" ;I
          Case LETRA=10 : LETRA = "19" ;J
          Case LETRA=11 : LETRA = "20" ;K
          Case LETRA=12 : LETRA = "21" ;L
          Case LETRA=13 : LETRA = "22" ;M
          Case LETRA=14 : LETRA = "23" ;N
          Case LETRA=15 : LETRA = "24" ;O
          Case LETRA=16 : LETRA = "25" ;P
          Case LETRA=17 : LETRA = "26" ;Q
          Case LETRA=18 : LETRA = "27" ;R
          Case LETRA=19 : LETRA = "28" ;S
          Case LETRA=20 : LETRA = "29" ;T
          Case LETRA=21 : LETRA = "30" ;U
          Case LETRA=22 : LETRA = "31" ;V
          Case LETRA=23 : LETRA = "32" ;W
          Case LETRA=24 : LETRA = "33" ;X
          Case LETRA=25 : LETRA = "34" ;Y
          Case LETRA=26 : LETRA = "35" ;Z
          OtherWise     : LETRA = (999935 * LETRA) + (65*LETRA)
                          LETRA = SubStr(LETRA,1,2)
        EndSwitch  
        cNF_B03 = LETRA + SubStr(AUX,2,5)
   Else cNF_B03 = AUX
EndIf
;-------------------------------------------------------------------------------

AAMM_CHV=SubStr(AlinhM(StrVal(Year (regfaturac["Data de Emissao"])),4),3,2)+
                AlinhM(StrVal(Month(regfaturac["Data de Emissao"])),2)
mod_B06  =PARAM 
switch
  case PARAM="55" : serie_B07=SERIEFISC
  case PARAM="65" : serie_B07=substr(SERIEFISC,4,1)
endswitch
nNF_B08  =AlinhM(NOTAFISC,9)

CHAVE_ACESSO_NFe=StrVal(regcidadesemitente["Codigo_UF"])+
                 AAMM_CHV+
                 Tira_CharNum(regemitente["CGC"])+
                 AlinhM(mod_B06,2)+
                 AlinhM(serie_B07,3)+
                 nNF_B08+
                 tpEmis_B22+                     
                 AlinhM(cNF_B03,8)
                 
DV_CHV          =NFE_CalcMod11(CHAVE_ACESSO_NFe)
CHAVE_ACESSO_NFe=CHAVE_ACESSO_NFE+StrVal(DV_CHV)

 cDV_B23 =DV_CHV

Return True
EndProc

;*******************************************************************************
;* Rotina formas de pagamento                                                  *
;*******************************************************************************
Proc NFE_MontarFormasPagtos(fpcodigo,fpvalor,fpcartao,fpaut)
private fpcodigo,fpcartao,fpaut,fpvalor

TabelaFormasPagtoNew=True          
For wc2TabelaFormasPagto From 1 To DynArraySize(TabelaFormasPagto)
  if fpcodigo=      substr(TabelaFormasPagto[wc2TabelaFormasPagto],01,02)  and
     fpcartao=rtrim(substr(TabelaFormasPagto[wc2TabelaFormasPagto],04,15)) and
     fpaut   =rtrim(substr(TabelaFormasPagto[wc2TabelaFormasPagto],20,30))
     then TabelaFormasPagtoNew=False
          quitloop
  endif 
endfor
if TabelaFormasPagtoNew
   then 
        wcTabelaFormasPagto =wcTabelaFormasPagto+1
        wc2TabelaFormasPagto=wcTabelaFormasPagto
        TabelaFormasPagto[wc2TabelaFormasPagto]=format("W02,AL",fpcodigo )+"|"+
                                                format("W15,AL",fpcartao )+"|"+         
                                                format("W30,AL",fpaut    )+"|"+
                                                format("W10.2", fpvalor  )+"|"
   else
        TabelaFormasPagto[wc2TabelaFormasPagto]=substr(TabelaFormasPagto[wc2TabelaFormasPagto],01,50)+
                         format("W10.2", numval(ltrim(substr(TabelaFormasPagto[wc2TabelaFormasPagto],51,10)))+fpvalor)+"|"
endif

endproc

;*******************************************************************************
;* Carrega Transportador                                                       *
;*******************************************************************************
Proc Carrega_Transportador(PARAM,TIPO)
Private PARAM, regdestinat, REG_ENDCOB,TIPO,TRANSP,ANT_FIELD

ANT_FIELD = Field() 

Switch
  Case PARAM="CARREGA_CONSULTA" Or PARAM="CARREGA_FATURA" Or PARAM="CARREGA_CLIENTE" :
       Switch
         Case TIPO="Transportador" :               
              TRANSP = [FaturaC->Codigo da Transportadora]
              
              VSD_TRANSPORTADORA = ""
              VSD_T_NomeFantasia = ""   
              VSD_T_Razao        = ""
              VSD_T_CNPJ_CPF     = ""
              VSD_T_Endereco     = ""
              VSD_T_IE           = ""
              VSD_T_Bairro       = ""
              VSD_T_CEP          = ""
              VSD_T_Cidade       = ""
              VSD_T_UF           = ""
              VSD_T_Fone         = ""
              VSD_T_Email        = ""
                  
              VSDGTRANSP         = ""
       
         Case TIPO="Redespacho" :
              VSD_REDESPACHO     = ""  
              VSD_R_NomeFantasia = ""
              VSD_R_Razao        = ""
              VSD_R_CNPJ_CPF     = ""
              VSD_R_Endereco     = ""
              VSD_R_Bairro       = ""
              VSD_R_CEP          = ""
              VSD_R_Cidade       = ""
              VSD_R_UF           = ""
              
              If PARAM<>"CARREGA_CLIENTE"
                 Then Moveto "FaturaCC"
                      If RecordStatus("New")
                         Then Moveto "FaturaC"
                              Moveto Field ANT_FIELD 
                              Return False
                      EndIf
                      TRANSP = [FaturaCC->Codigo Transp_Redespacho]
                      Moveto "FaturaC"
                 Else GetRecord "\\Sistemas\\Cadastro\\Destinat" [FaturaC->Codigo] To CODTRANSP
                      If RetVal
                         Then GetRecord "\\Sistemas\\Vendas\\Transpor" CODTRANSP["Codigo Transp_Redespacho"] To REG_TRANSP
                              If Not RetVal
                                 Then Moveto Field ANT_FIELD 
                                      Return False
                                 Else TRANSP = REG_TRANSP["Codigo da Transportadora"]
                              EndIf   
                         Else Moveto Field ANT_FIELD
                              Return False
                      EndIf  
              EndIf        
       EndSwitch
       
       If TRANSP<>""
          Then GetRecord "\\Sistemas\\Vendas\\Transpor" TRANSP To REG_TRANSP
               If Not ReTval
                  Then Mensagem("Transportador Inv lido!")
                       Moveto Field ANT_FIELD
                       Return False 
                  Else Switch
                         Case TIPO="Transportador" :
                              VSD_TRANSPORTADORA=REG_TRANSP["Codigo da Transportadora"]
                              If PARAM="CARREGA_FATURA"
                                 Then VSD_T_NomeFantasia=Rtrim(Ltrim([Nome Fantasia Transport]))   
                                      VSD_T_Razao       =Rtrim(Ltrim([Razao Social Transport]))
                                      VSD_T_CNPJ_CPF    =Rtrim(Ltrim([CGC Transport]))
                                      VSD_T_Endereco    =Rtrim(Ltrim([Endereco Transport]))
                                      VSD_T_IE          =Rtrim(Ltrim([IE Transport]))
                                      VSD_T_Bairro      =Rtrim(Ltrim([Bairro Transport]))
                                      VSD_T_CEP         =Rtrim(Ltrim([CEP Transport]))
                                      VSD_T_Cidade      =Rtrim(Ltrim([Cidade Transport]))
                                      VSD_T_UF          =Rtrim(Ltrim([UF Transport]))
                                 ELse VSD_T_NomeFantasia=Rtrim(Ltrim(REG_TRANSP["Nome Fantasia Transport"]))   
                                      VSD_T_Razao       =Rtrim(Ltrim(REG_TRANSP["Razao Social Transport"]))
                                      VSD_T_CNPJ_CPF    =Rtrim(Ltrim(REG_TRANSP["CGC Transport"]))
                                      VSD_T_Endereco    =Rtrim(Ltrim(REG_TRANSP["Endereco Transport"]))
                                      VSD_T_IE          =Rtrim(Ltrim(REG_TRANSP["IE Transport"]))
                                      VSD_T_Bairro      =Rtrim(Ltrim(REG_TRANSP["Bairro Transport"]))
                                      VSD_T_CEP         =Rtrim(Ltrim(REG_TRANSP["CEP Transport"]))
                                      VSD_T_Cidade      =Rtrim(Ltrim(REG_TRANSP["Cidade Transport"]))
                                      VSD_T_UF          =Rtrim(Ltrim(REG_TRANSP["UF Transport"]))
                              EndIf
                              VSD_T_Fone        =Rtrim(Ltrim(REG_TRANSP["Telefone Transport"]))
                              VSD_T_Email       =Rtrim(Ltrim(REG_TRANSP["Endereco_Eletronico Trans"]))
                                             
                              If VSD_T_NomeFantasia="O PROPRIO"
                                   Then VSD_T_Razao    = [Razao Social  ]
                                        VSD_T_Endereco = [Endereco      ]
                                        VSD_T_Bairro   = [Bairro        ]
                                        VSD_T_CEP      = [CEP           ]
                                        VSD_T_Cidade   = [Cidade        ]
                                        VSD_T_UF       = [UF            ]
                                        VSD_T_CNPJ_CPF = [CGC           ]
                                        VSD_T_IE       = [IE            ]
                                EndIf
                            
                         Case TIPO="Redespacho" :
                              VSD_REDESPACHO     = REG_TRANSP["Codigo da Transportadora"]
                              VSD_R_NomeFantasia = Rtrim(Ltrim(REG_TRANSP["Nome Fantasia Transport"]))
                              If PARAM="CARREGA_FATURA" 
                                 Then VSD_R_Razao    = Rtrim(Ltrim([FaturaCC->Razao Social Transp_Red]))
                                      VSD_R_CNPJ_CPF = Rtrim(Ltrim([FaturaCC->CGC Transp_Redespacho]))
                                      VSD_R_Endereco = Rtrim(Ltrim([FaturaCC->End Transp_Redespacho]))
                                      VSD_R_Bairro   = Rtrim(Ltrim([FaturaCC->Bairro Transp_Redespacho]))
                                      VSD_R_CEP      = Rtrim(Ltrim([FaturaCC->CEP Transp_Redespacho]))
                                      VSD_R_Cidade   = Rtrim(Ltrim([FaturaCC->Cidade Transp_Redespacho]))
                                      VSD_R_UF       = Rtrim(Ltrim([FaturaCC->UF Transp_Redespacho]))
                                 Else VSD_R_Razao    = Rtrim(Ltrim(REG_TRANSP["Razao Social Transport"]))   
                                      VSD_R_CNPJ_CPF = Rtrim(Ltrim(REG_TRANSP["CGC Transport"]))
                                      VSD_R_Endereco = Rtrim(Ltrim(REG_TRANSP["Endereco Transport"]))
                                      VSD_R_Bairro   = Rtrim(Ltrim(REG_TRANSP["Bairro Transport"]))
                                      VSD_R_CEP      = Rtrim(Ltrim(REG_TRANSP["CEP Transport"]))
                                      VSD_R_Cidade   = Rtrim(Ltrim(REG_TRANSP["Cidade Transport"]))
                                      VSD_R_UF       = Rtrim(Ltrim(REG_TRANSP["UF Transport"]))
                              EndIf
                       EndSwitch            
              EndIf
       EndIf   
  Case PARAM="ATUALIZA_FORM" : 
       If IsAssigned(SYS_APLICATIVO) And SYS_APLICATIVO = "FATURA"
          Then ;---- Vari veis utilizadas em FORM do FATURA ---------------------
               Moveto "FaturaC"
               If [Numero Frete Cotacao]<>""
                  Then NUMERO_COTACAO = "Cota‡Æo: "+[Numero Frete Cotacao]
                  Else NUMERO_COTACAO = ""                               
               EndIf
               VSDGTRANSPORTADOR = Format("W20",VSD_T_NomeFantasia)+Spaces(5)+VSD_T_CNPJ_CPF+Spaces(5)+NUMERO_COTACAO+"\n"+
                                   VSD_T_Razao+"\n"
               If VSD_R_Razao<>""
                  Then VSDGTRANSPORTADOR = VSDGTRANSPORTADOR + "Redespacho: " + VSD_R_Razao  
               EndIf    
                  
               ;VSDGCODREDESPACHO = VSD_REDESPACHO
               ;VSDGREDESPACHO    = Format("W75",Format("W20",VSD_R_NomeFantasia)+Spaces(5)+VSD_R_CNPJ_CPF)+
               ;                    Format("W75",VSD_R_Razao)
                                
          Else ;---- Vari veis utilizadas em FORM do BNFCE ---------------------
               VSDGTRANSPORTADOR = Format("W40",Format("W17",VSD_T_NomeFantasia)+Spaces(1)+VSD_T_CNPJ_CPF)+
                                   Format("W40",VSD_T_Razao)
                          
               VSDGREDESPACHO    = Format("W33",VSD_R_NomeFantasia)+
                                   Format("W33",VSD_R_Razao) ;NÆo ‚ possivel colocar um espa‡amento antes da razÆo social
       EndIf               
                      
  OtherWise                  :
    If TIPO="Transportador"
       Then ;---- Controle para referenciar o transportador em uma linha 
            VSDGTRANSP=VSD_T_Razao+" - "+VSD_T_NomeFantasia
    EndIf   
endswitch

;Moveto Field ANT_FIELD
Return True
                              
EndProc ;Carrega_Transportador()  

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Transportador_Dialog(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento, Temp
TECLA=" Esc=Retornar  "        
MSGCAMPO=""
Temp=True
                                                                                                 
If Disparo="OPEN"
   then TiraSombraShowDialog()
        switch
          case ShowDialog_TransportadorTipo="TRANSPORTADOR" :
            Campo="T_TRANSPORTADORA"
          case ShowDialog_TransportadorTipo="REDESPACHO":
            Campo="R_REDESPACHO"          
        endswitch
endif    
                         

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

                   If Upper(Table())="FATURACC"
                      Then Moveto "FaturaC"
                   EndIf
                   
                   Switch
                     Case Campo="T_TRANSPORTADORA" : Moveto [Codigo da Transportadora]
                     Case Campo="T_Cidade"         : Moveto [Cidade Transport        ]
                     Case Campo="R_REDESPACHO"     :      
                          Moveto "FaturaCC"
                          Moveto [Codigo Transp_Redespacho]
                     Case Campo="R_Cidade"         :
                          Moveto "FaturaCC"
                          Moveto [Cidade Transp_Redespacho]       
                   EndSwitch
                   CONSULTA_F1=False
                   If ConsultaF1() Then CONSULTA_F1=True EndIf
                   
                   Window Select JANELA
                   WinArray5["FLOATING"]=True
                   Window SetAttributes JANELA From WinArray5
                   
                   Echo Normal
                   Echo off

                   If CONSULTA_F1
                      Then Switch
                             Case Campo="T_TRANSPORTADORA" : Carrega_Transportador("CARREGA_CONSULTA","Transportador")
                             Case Campo="T_Cidade"         : VSD_T_Cidade = Reg_ConsultaF1["Cidade"]
                             Case Campo="R_REDESPACHO"     : [Codigo Transp_Redespacho]=Reg_ConsultaF1["Codigo da Transportadora"]  
                                                             Carrega_Transportador("CARREGA_CONSULTA","Redespacho")
                             Case Campo="R_Cidade"         : VSD_R_Cidade = Reg_ConsultaF1["Cidade"]
                           EndSwitch
                   EndIf
                   Release Vars CONSULTA_F1
                   
                   If Campo="T_TRANSPORTADORA" Or Campo="R_REDESPACHO" 
                      Then Carrega_Transportador("ATUALIZA_FORM","")
                   EndIf
                   
                   If Upper(Table())="FATURACC"
                      Then Moveto "FaturaC"
                   EndIf
           EndSwitch     
      Case Evento["KeyCode"] = -81:
           Switch
              Case ShowDialog_TransportadorTipo="TRANSPORTADOR" : 
                Switch
                   Case Campo="T_TRANSPORTADORA" : VSD_TRANSPORTADORA = ControlValue("T_TRANSPORTADORA")
                   Case Campo="T_Razao"          : VSD_T_Razao        = ControlValue("T_Razao")
                   Case Campo="T_CNPJ_CPF"       : VSD_T_CNPJ_CPF     = ControlValue("T_CNPJ_CPF")     
                   Case Campo="T_Endereco"       : VSD_T_Endereco     = ControlValue("T_Endereco")              
                   Case Campo="T_IE"             : VSD_T_IE           = ControlValue("T_IE")                
                   Case Campo="T_Cidade"         : VSD_T_Cidade       = ControlValue("T_Cidade")                        
                   Case Campo="T_UF"             : VSD_T_UF           = ControlValue("T_UF")
                   Case Campo="T_Bairro"         : VSD_T_Bairro       = ControlValue("T_Bairro")            
                   Case Campo="T_CEP"            : VSD_T_CEP          = ControlValue("T_CEP")
                   Case Campo="T_Flag"           : VSD_T_Flag         = ControlValue("T_Flag")
                endSwitch

              Case ShowDialog_TransportadorTipo="REDESPACHO":  
                Switch
                  Case Campo="R_REDESPACHO"     : VSD_REDESPACHO      = ControlValue("R_REDESPACHO")
                  Case Campo="R_Razao"          : VSD_R_Razao         = ControlValue("R_Razao")
                  Case Campo="R_CNPJ_CPF"       : VSD_R_CNPJ_CPF      = ControlValue("R_CNPJ_CPF")
                  Case Campo="R_Endereco"       : VSD_R_Endereco      = ControlValue("R_Endereco")
                  Case Campo="R_Cidade"         : VSD_R_Cidade        = ControlValue("R_Cidade")
                  Case Campo="R_UF"             : VSD_R_UF            = ControlValue("R_UF")
                  Case Campo="R_Bairro"         : VSD_R_Bairro        = ControlValue("R_Bairro")
                  Case Campo="R_CEP"            : VSD_R_CEP           = ControlValue("R_CEP")
                  Case Campo="R_Flag"           : VSD_R_Flag          = ControlValue("R_Flag")
                EndSwitch
           EndSwitch
           AcceptDialog

      Case Evento["KeyCode"] = -73:
           Switch
             Case ShowDialog_TransportadorTipo="TRANSPORTADOR" : CancelDialog
             Case ShowDialog_TransportadorTipo="REDESPACHO"    : CancelDialog
           EndSwitch
                                            
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch                                             
              ;---- Transportador ----------------------------------------------
              Case Campo="T_TRANSPORTADORA" : Carrega_Transportador("ATUALIZA","Transportador")
                                              CancelDialog
              Case Campo="T_Razao"          : Campo="T_TRANSPORTADORA"      
              Case Campo="T_CNPJ_CPF"       : Campo="T_Razao"      
              Case Campo="T_Endereco"       : Campo="T_CNPJ_CPF"            
              Case Campo="T_IE"             : Campo="T_Endereco"        
              Case Campo="T_Cidade"         : Campo="T_IE"            
              Case Campo="T_UF"             : Campo="T_Cidade"        
              Case Campo="T_Bairro"         : Campo="T_UF"           
              Case Campo="T_CEP"            : Campo="T_Bairro"                 
              Case Campo="T_Flag"           : Campo="T_Razao"
              
              ;---- Redespacho -------------------------------------------------
              Case Campo="R_REDESPACHO"     : CancelDialog
              Case Campo="R_Razao"          : Campo="R_REDESPACHO"    
              Case Campo="R_CNPJ_CPF"       : Campo="R_Razao"   
              Case Campo="R_Endereco"       : Campo="R_CNPJ_CPF"   
              Case Campo="R_Cidade"         : Campo="R_Endereco"   
              Case Campo="R_UF"             : Campo="R_Cidade"   
              Case Campo="R_Bairro"         : Campo="R_UF"    
              Case Campo="R_CEP"            : Campo="R_Bairro"
              Case Campo="R_Flag"           : Campo="R_Razao"  
            EndSwitch  
            Temp=False
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch     
              ;---- Transportador ----------------------------------------------
              Case Campo="T_TRANSPORTADORA" :   
                   VSD_TRANSPORTADORA = ControlValue("T_TRANSPORTADORA")
                   
                   If IsBlank(VSD_TRANSPORTADORA) 
                      Then Mensagem("Informe o Transportador!")
                      Else VSD_TRANSPORTADORA=ALINHE(VSD_TRANSPORTADORA)
                           GetRecord "\\Sistemas\\Vendas\\Transpor" VSD_TRANSPORTADORA To REG_TRANSPOR
                           If Not RetVal 
                              Then Mensagem("Transportador inv lido!")
                              Else [Codigo da Transportadora] = VSD_TRANSPORTADORA
                                   UnLockRecord
                           
                                   Carrega_Transportador("CARREGA_CONSULTA","Transportador")
                                   Carrega_Transportador("ATUALIZA_FORM","")
                                   Campo="T_Flag"
                           EndIf 
                   EndIf
 
                                                             
              Case Campo="T_Razao"          : Campo="T_CNPJ_CPF"      
                   VSD_T_Razao = ControlValue("T_Razao")                          
                                                                      
              Case Campo="T_CNPJ_CPF"       :      
                   VSD_T_CNPJ_CPF = ControlValue("T_CNPJ_CPF")
                   
                   wok=true
                   If Not IsBlank(VSD_T_CNPJ_CPF)
                      Then If Tipo_CGC_CPF(VSD_T_CNPJ_CPF)<>"CGC" And
                              Tipo_CGC_CPF(VSD_T_CNPJ_CPF)<>"CPF"
                              Then Mensagem("CNPJ/CPF Inv lido !")
                                   wok=false
                           EndIf
                   EndIf
                   If wok
                      then Campo="T_Endereco"
                   endif                       
                                                                      
              Case Campo="T_Endereco"       : Campo="T_IE"            
                   VSD_T_Endereco = ControlValue("T_Endereco")                             
                                                                      
              Case Campo="T_IE"             : Campo="T_Cidade"        
                   VSD_T_IE = ControlValue("T_IE")                               
                                                                      
              Case Campo="T_Cidade"         : Campo="T_UF"            
                   VSD_T_Cidade = ControlValue("T_Cidade")                               
                                                                      
              Case Campo="T_UF"             : Campo="T_Bairro"        
                   VSD_T_UF = ControlValue("T_UF")
                   
                   cidufok=true
                   If Not IsBlank(VSD_T_UF)
                      Then GetRecord "\\Sistemas\\Vendas\\Estados" VSD_T_UF To REG_UF
                           If Not RetVal
                              Then fastmsg("UF invalida !")
                                   cidufok=false
                              Else If Not IsBlank(VSD_T_Cidade)
                                      Then GetRecord "\\Sistemas\\Cadastro\\Cidades" VSD_T_Cidade,VSD_T_UF To REG_CIDADE 
                                           If Not RetVal
                                              Then fastmsg("Cidade/UF invalida!")
                                                   cidufok=false
                                           EndIf
                                   EndIf
                           EndIf
                   EndIf
                   if cidufok
                      then Campo="T_Bairro"      
                   EndIf                               
                                                                      
              Case Campo="T_Bairro"         : Campo="T_CEP"           
                   VSD_T_Bairro = ControlValue("T_Bairro")                              
                                                                      
              Case Campo="T_CEP"            : Campo="T_Flag"          
                   VSD_T_CEP = ControlValue("T_CEP")
                                     
              ;Campos visualizadores conforme informa‡äes no cadastro
              ;Case Campo="T_Fone"           : Campo="T_Email"         
              ;     VSD_T_Fone = ControlValue("T_Fone")             
                                                                      
              ;Case Campo="T_Email"          : Campo="T_Flag"      
              ;     VSD_T_Email = ControlValue("T_Email")                  
   
              Case Campo="T_Flag"           :
                   VSD_T_Flag = ControlValue("T_Flag")
                   AcceptDialog
                   
              ;---- Redespacho -------------------------------------------------
              Case Campo="R_REDESPACHO"     : 
                   VSD_REDESPACHO = ControlValue("R_REDESPACHO")
                   
                   If Not IsBlank(VSD_REDESPACHO)
                      Then VSD_REDESPACHO = ALINHE(VSD_REDESPACHO)
                           Moveto "FaturaCC"
                           [Codigo Transp_Redespacho] = VSD_REDESPACHO
                           UnLockRecord
                           Moveto "FaturaCC"
                           
                           Carrega_Transportador("CARREGA_CONSULTA","Redespacho")
                           Carrega_Transportador("ATUALIZA_FORM","")
                           
                           Campo="R_Flag"
                   EndIf     
                                                                              
              Case Campo="R_Razao"          : Campo="R_CNPJ_CPF"
                   VSD_R_Razao = ControlValue("R_Razao")    
              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_Endereco"
                  endif 
                      
              Case Campo="R_Endereco"       : Campo="R_Cidade"
                   VSD_R_Endereco = ControlValue("R_Endereco")   
              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_Bairro"      
                   EndIf
                                        
              Case Campo="R_Bairro"         : Campo="R_CEP"
                   VSD_R_Bairro = ControlValue("R_Bairro")    
              
              Case Campo="R_CEP"            : Campo="R_Flag"
                   VSD_R_CEP = ControlValue("R_CEP")
                                   
              Case Campo="R_Flag"            : 
                   VSD_R_Flag = ControlValue("R_Flag") 
                   AcceptDialog
           EndSwitch
   EndSwitch
EndIf

SelectControl Campo

Switch
  ;---- Transportador ----------------------------------------------
  Case Campo="T_TRANSPORTADORA" : MSGCAMPO="C¢digo do Transportador"
  Case Campo="T_Razao"          : MSGCAMPO="RazÆo Social do Transportador"
  Case Campo="T_CNPJ_CPF"       : MSGCAMPO="CPF ou CNPJ do Transportador"      
  Case Campo="T_Endereco"       : MSGCAMPO="Endere‡o do Transportador"            
  Case Campo="T_IE"             : MSGCAMPO="IE do Transportador"        
  Case Campo="T_Cidade"         : MSGCAMPO="Cidade do Transportador"            
  Case Campo="T_UF"             : MSGCAMPO="UF do Transportador"        
  Case Campo="T_Bairro"         : MSGCAMPO="Bairro do Transportador"           
  Case Campo="T_CEP"            : MSGCAMPO="CEP do Transportador"          
  Case Campo="T_Fone"           : MSGCAMPO="Telefone do Transportador"         
  Case Campo="T_Email"          : MSGCAMPO="E-mail do Transportador"      
  Case Campo="T_Flag"           : MSGCAMPO="[Enter]=Seguir para a Tela do Redespacho"        
  ;---- Redespacho -------------------------------------------------------------
  Case Campo="R_REDESPACHO"     : MSGCAMPO="C¢digo do Redespacho"
  Case Campo="R_Razao"          : MSGCAMPO="RazÆo Social do Redespacho"
  Case Campo="R_CNPJ_CPF"       : MSGCAMPO="CPF ou CNPJ do Redespacho"
  Case Campo="R_Endereco"       : MSGCAMPO="Endere‡o do Redespacho"
  Case Campo="R_Cidade"         : MSGCAMPO="Cidade do Redespacho"
  Case Campo="R_UF"             : MSGCAMPO="UF do Redespacho"
  Case Campo="R_Bairro"         : MSGCAMPO="Bairro do Redespacho"
  Case Campo="R_CEP"            : MSGCAMPO="CEP do Redespacho"
  Case Campo="R_Flag"           : MSGCAMPO="[Enter]=Finalizar"       
EndSwitch

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

If Campo="T_TRANSPORTADORA" Or
   Campo="T_Cidade"         Or
   Campo="R_REDESPACHO"     Or
   Campo="R_Cidade"         
   Then MSGCAMPO = MSGCAMPO+", [F1]Consultar tabela"     
EndIf

Switch
  Case ShowDialog_TransportadorTipo="TRANSPORTADOR" : TECLA=TECLA+"                                               PgDn=[Redespacho]"
  Case ShowDialog_TransportadorTipo="REDESPACHO"    : TECLA=TECLA+"                            PgUp=[Transportador] PgDn=Finalizar "
EndSwitch

MontaRodapeSD(MSGCAMPO, TECLA)

Mouse Hide
RefreshDialog
Return Temp

EndProc     ;  (Transportador_Dialog)

;*******************************************************************************
;* Digita‡Æo do Transportador                                                  *
;*******************************************************************************
Proc ShowDialog_Transportador()         

MSGCAMPO=""                    

Showdialog "Transportador/Redespacho" Proc "Transportador_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","PGDN",-81
     @ 07,00 height 15 width 80 
     
   @ 0,0 ?? "[Transportador] [Redespacho]"
   paintcanvas attribute 62 0, 0, 0, 14 

;   @ 1,1 ?? "Transportador"
   paintcanvas attribute 62 1,0, 1, 77                                       
                                                                                                                     
   Label  @ 02,00 "Transportadora" for "T_TRANSPORTADORA"
   Accept @ 03,01 Width 07 "A4" picture "#*#" Tag "T_TRANSPORTADORA" to VSD_TRANSPORTADORA
   Accept @ 03,09 Width 35 "A40" picture "!*!" Tag "T_NomeFantasia" to VSD_T_NomeFantasia
   
   Label  @ 04,00 "RazÆo Social" for "T_Razao"
   Accept @ 05,01  Width 43 "A40" picture "!*!" Tag "T_Razao" to VSD_T_Razao   
   
   Label  @ 04,44 "CNPJ/CPF" for "T_CNPJ_CPF"
   Accept @ 05,45  Width 21 "A18" picture "##[.]###.###/####-##,###.###.###-##" Tag "T_CNPJ_CPF" to VSD_T_CNPJ_CPF
   
   Label  @ 06,00 "Endere‡o" for "T_Endereco"
   Accept @ 07,01  Width 43 "A40" picture "!*!" Tag "T_Endereco" to VSD_T_Endereco   
      
   Label  @ 06,44 "IE" for "T_IE"
   Accept @ 07,45  Width 21 "A15" picture "!*!" Tag "T_IE" to VSD_T_IE
   
   Label  @ 08,00 "Cidade" for "T_Cidade"
   Accept @ 09,01  Width 22 "A20" picture "!*!" Tag "T_Cidade" to VSD_T_Cidade
   
   Label  @ 08,23 "UF" for "T_UF"
   Accept @ 09,24  Width 05 "A2" picture "!*!" Tag "T_UF" to VSD_T_UF
   
   Label  @ 08,29 "Bairro" for "T_Bairro"
   Accept @ 09,30  Width 22 "A20" picture "!*!" Tag "T_Bairro" to VSD_T_Bairro
   
   Label  @ 08,52 "CEP" for "T_CEP"
   Accept @ 09,53  Width 13 "A10" picture "##.###-###" Tag "T_CEP" to VSD_T_CEP
   
   Label  @ 10,00 "Telefone" for "T_Fone"
   Accept @ 11,01  Width 22 "A20" picture "!*!" Tag "T_Fone" to VSD_T_Fone
   
   Label  @ 10,23 "Email" for "T_Email"
   Accept @ 11,24 Width 42 "A60"              Tag "T_Email" to VSD_T_Email
   
   Accept @ 11,63 Width 1  "A1"               Tag "T_Flag"  to VSD_T_Flag

Enddialog
Return Retval

EndProc

;*******************************************************************************
;* Digita‡Æo do Transportador                                                  *
;*******************************************************************************
Proc ShowDialog_Redespacho()         

MSGCAMPO=""                     
 
Showdialog "Transportador/Redespacho" Proc "Transportador_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","PGDN",-81,"PGUP",-73
     @ 07,00 height 15 width 80 
     
   @ 0,0 ?? "[Transportador] [Redespacho]"
   paintcanvas attribute 62 0, 16, 0, 27 
                                                          
 ;  @ 1,1 ?? "Redespacho"
   paintcanvas attribute 62 1,0, 1, 77

   Label  @ 02,00 "Redespacho" for "R_REDESPACHO"
   Accept @ 03,01 Width 07 "A4" picture "#*#" Tag "R_REDESPACHO" to VSD_REDESPACHO
   Accept @ 03,09 Width 35 "A40" picture "!*!" Tag "R_NomeFantasia" to VSD_R_NomeFantasia
   
   Label  @ 04,00 "RazÆo Social" for "R_Razao"
   Accept @ 05,01  Width 43 "A40" picture "!*!" Tag "R_Razao" to VSD_R_Razao   
   
   Label  @ 04,44 "CNPJ/CPF" for "R_CNPJ_CPF"
   Accept @ 05,45  Width 21 "A18" picture "##[.]###.###/####-##,###.###.###-##" Tag "R_CNPJ_CPF" to VSD_R_CNPJ_CPF
   
   Label  @ 06,00 "Endere‡o" for "R_Endereco"
   Accept @ 07,01  Width 43 "A40" picture "!*!" Tag "R_Endereco" to VSD_R_Endereco   
      
   Label  @ 08,00 "Cidade" for "R_Cidade"
   Accept @ 09,01  Width 22 "A20" picture "!*!" Tag "R_Cidade" to VSD_R_Cidade
   
   Label  @ 08,23 "UF" for "R_UF"
   Accept @ 09,24  Width 05 "A2" picture "!*!" Tag "R_UF" to VSD_R_UF
   
   Label  @ 08,29 "Bairro" for "R_Bairro"
   Accept @ 09,30  Width 22 "A20" picture "!*!" Tag "R_Bairro" to VSD_R_Bairro
   
   Label  @ 08,52 "CEP" for "R_CEP"
   Accept @ 09,53  Width 13 "A10" picture "##.###-###" Tag "R_CEP" to VSD_R_CEP
   
   Accept @ 09,64 Width 1  "A1"               Tag "R_Flag"  to VSD_R_Flag

Enddialog
Return Retval
                                        
EndProc

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

Echo Normal
Echo Off                            
Mouse Hide

TabAnt  =table()
CampoAnt=Field()

Carrega_Transportador("CARREGA_FATURA","Transportador")

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

ShowDialog_TransportadorTipo="TRANSPORTADOR"
execender              =true

while execender
  switch
    case ShowDialog_TransportadorTipo="TRANSPORTADOR" : 
      if ShowDialog_Transportador()  
         then ShowDialog_TransportadorTipo="REDESPACHO"
         else execender=false
      endif
                                                                                     
    case ShowDialog_TransportadorTipo="REDESPACHO": 
      if ShowDialog_Redespacho() 
         then ;---- Transportadora ---------------------------------
              Moveto "FaturaC"
              [Nome Fantasia Transport] = VSD_T_NomeFantasia
              [Razao Social Transport ] = VSD_T_Razao       
              [CGC Transport          ] = VSD_T_CNPJ_CPF    
              [Endereco Transport     ] = VSD_T_Endereco    
              [IE Transport           ] = VSD_T_IE          
              [Bairro Transport       ] = VSD_T_Bairro      
              [Cidade Transport       ] = VSD_T_Cidade      
              [UF Transport           ] = VSD_T_UF
              [CEP Transport          ] = VSD_T_CEP
              unlockrecord
            
              ;---- Redespacho ---------------------------------
              Moveto "FaturaCC"
              [Codigo Transp_Redespacho] = VSD_REDESPACHO
              [Razao Social Transp_Red ] = VSD_R_Razao 
              [CGC Transp_Redespacho   ] = VSD_R_CNPJ_CPF 
              [End Transp_Redespacho   ] = VSD_R_Endereco 
              [Bairro Transp_Redespacho] = VSD_R_Bairro 
              [CEP Transp_Redespacho   ] = VSD_R_CEP 
              [Cidade Transp_Redespacho] = VSD_R_Cidade 
              [UF Transp_Redespacho    ] = VSD_R_UF
              UnLockRecord
              
              Carrega_Transportador("ATUALIZA","Transportador")
              
              Moveto "FaturaC"
              MSG_REDESPACHO()         
         
              execender=false
         else ShowDialog_TransportadorTipo="TRANSPORTADOR"
      endif
  endswitch
        
endwhile

Echo Off
Mouse Show

Moveto TabAnt
Moveto Field CampoAnt 

Release Vars VSD_T_NomeFantasia,VSD_T_Razao,VSD_T_CNPJ_CPF,VSD_T_Endereco,VSD_T_IE,
             VSD_T_Bairro,VSD_T_Cidade,VSD_T_UF,VSD_T_CEP,VSD_REDESPACHO,VSD_R_Razao,
             VSD_R_CNPJ_CPF,VSD_R_Endereco,VSD_R_Bairro,VSD_R_CEP,VSD_R_Cidade,VSD_R_UF,
             execender,ShowDialog_TransportadorTipo,TabAnt,CampoAnt         

Release Vars Carrega_Transportador,Transportador_Dialog,ShowDialog_Transportador,ShowDialog_Redespacho

EndProc  ;ShowDialog_TranspRedespacho()

;******************************************************************************
;** Rotina para Carregar Vari veis do Vendas                                ***
;******************************************************************************
Proc BibVend_SetaVariaveis(TABELA,PARAM)
Private PARAM,TABELA,REG_FATC

Switch
  Case PARAM = "Forma de Pagamento" :
       If Upper(TABELA)="FATURAC"
          Then VSDGTPPAGTO   =""
               VSDGNOMTPPAGTO="" 
               If [FaturaC->Forma de Pagamento]<>""
                  Then GetRecord "\\Sistemas\\Cadastro\\TpPagto" [FaturaC->Forma de Pagamento] To Registro_F1
                       If RetVal
                          Then VSDGTPPAGTO    = Registro_F1["Tipo do Pagamento"]
                               VSDGNOMTPPAGTO = Registro_F1["Descricao Tipo Pagamento"]
                       EndIf    
               EndIf
       EndIf   
EndSwitch                

Release Vars PARAM,TABELA,REG_FATC

EndProc ;BibVend_SetaVariaveis()

;*******************************************************************************
;* Confirmacao de Janela                                                       *
;*******************************************************************************
Proc OPCAO(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento

Temp=True
If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY"
   Then Switch
           Case Evento["KeyCode"] = 27:
                OK="N"
                CancelDialog
                Temp=False
           Case Evento["KeyCode"] = 13:
                If Campo="PED_ORC_FATURAR"
                   Then PED_ORC_FAT=ControlValue("PED_ORC_FATURAR")
                        SelectControl "Sim"
                        OK="S"
                   Else OK="N"
                EndIf
                CancelDialog
                Temp=False
        EndSwitch
Endif
Return Temp
EndProc   ;  (Opcao)

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc SelecionaFiltroFatura()
Private ii
ClearAll

If Not IsAssigned(SDFILTRO_ATIVO) Then SDFILTRO_ATIVO = False EndIf        
        
If Not SDFILTRO_ATIVO
   Then Switch
          Case SYS_APLICATIVO = "NOTA" :
               {Ask} {NotaC} Check
               If MODOFILTRAR_EMPRESA<>""
                  Then Moveto [Codigo da Empresa] TypeIn "~FILTRAREMPRESA.." 
               EndIf
               Do_It!
               ClearAll 
          Case SYS_APLICATIVO = "BNFCE" :
               {Ask} {FaturaC} Check
               If MODOFILTRAR_EMPRESA<>""
                  Then Moveto [Codigo da Empresa] TypeIn "~FILTRAREMPRESA.." 
               EndIf
               Moveto [Codigo do Representante  ] TypeIn "~FILTRARVENDEDOR.."
               Moveto [Docto Nota Gerada        ] TypeIn "NCE.."
               Moveto [Data de Emissao          ] TypeIn ">=(today-31)"
               Do_It!
               ClearAll
         OtherWise :
               {Ask} {FaturaC} Check
               If MODOFILTRAR_EMPRESA<>""
                  Then Moveto [Codigo da Empresa] TypeIn "~FILTRAREMPRESA.." 
               EndIf
               Switch
                 Case SYS_APLICATIVO = "BALCAO" : 
                      Moveto [Docto Nota Gerada] TypeIn "Blank or RO.."
                      Moveto [Sistema Gerador  ] TypeIn "Blank or BA" 
               EndSwitch
               If SYS_APLICATIVO = "TROCA" 
                  Then Moveto [Descricao da Destinacao] TypeIn "..TROCA.."
                       Moveto [Sistema Gerador        ] TypeIn "Blank or TR"
               EndIf
               Do_It!
               ClearAll
        EndSwitch      
   Else Switch
          Case MODOFILTRAR_EMPRESA<>"" And VSDGEMPRESA<>"" And MODOFILTRAR_EMPRESA<>VSDGEMPRESA : 
               Mensagem("O usu rio deve informar a empresa "+VSDGEMPRESA+"!")
               Return False
          Case VSDGEMPRESA<>"" And MODOFILTRAR_EMPRESA=""           : 
               MODOFILTRAR_EMPRESA=VSDGEMPRESA 
        EndSwitch
        ;---- Filtro ATIVIDADE, comum no FATURA E NOTA
        If VSDGATIVIDADE<>""
           Then {Ask} {\\Sistemas\\Cadastro\\Destinat}
                Moveto [Codigo          ] Check TypeIn "~VSDGDESTINAT.."
                Moveto [Codigo Atividade]       TypeIn "~VSDGATIVIDADE.."
                Do_It!
                ClearAll
               
                If Not IsEmpty("Answer")
                   Then Atividade=Cria_Temp(PrivDir())
                        Copy "Answer" Atividade
                         
                        Adiciona_Indice(Atividade,"Codigo")
                        
                        {Ask} TypeIn Atividade Enter
                        Moveto [Codigo         ] Example "Pessoa"
                EndIf
       EndIf   
        Switch 
          Case SYS_APLICATIVO = "NOTA" :
              {Ask} {NotaC} Check   
              Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
              If IsAssigned(Atividade)
                 Then Moveto [Codigo           ] Example "Pessoa"
                 Else Moveto [Codigo           ] TypeIn "~VSDGDESTINAT.." 
              EndIf
              Moveto [Numero do Pedido         ] TypeIn "~VSDGPEDIDO.."
              Moveto [Codigo do Documento      ] TypeIn "~VSDGTPDOCTO.."
              Moveto [Codigo do Representante  ] TypeIn "~VSDGREPRESEN.."
              Moveto [Cidade                   ] TypeIn CIDADE
              Moveto [UF                       ] TypeIn "~VSDGESTADO.."
              Moveto [Codigo da Destinacao     ] TypeIn "~VSDGDESTIN.."
              Moveto [Tipo Movimento Estoque   ] TypeIn "~VSDGTPMOVDESTIN.."
              Switch
                 case VSDGSITUACAODOCTO="NORMAL"                 : Moveto [Situacao                ] TypeIn "Not C"
                                                                   Moveto [Descricao da Destinacao ] TypeIn "Not ..INUT.."
                                                                                  
                 case VSDGSITUACAODOCTO="CANCELADA"              : Moveto [Situacao                ] TypeIn "C"
                     
                 case VSDGSITUACAODOCTO="CANCELADA+DENEGADA"     : Moveto [Situacao                ] TypeIn "C"
                                                                   Moveto [Sistema Gerador         ] TypeIn "DN"
                                                                   
                 case VSDGSITUACAODOCTO="CANCELADA+EXTEMPORANEA" : Moveto [Situacao                ] TypeIn "C"
                                                                   Moveto [Sistema Gerador         ] TypeIn "EX"
      
                 case VSDGSITUACAODOCTO="INUTILIZADA"            : Moveto [Descricao da Destinacao ] TypeIn "..INUT.."
              endSwitch   
              switch
                case VSDGOPDTESI="1" : Moveto [Data de Emissao] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                case VSDGOPDTESI="2" : Moveto [Data de Saida  ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                case VSDGOPDTESI="3" : Moveto [Data_Inclusao  ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
              endswitch
              Moveto [Condicao de Pagamento  ] TypeIn "~VSDGCONDPGTO.."
              Moveto [Forma de Pagamento     ] TypeIn "~VSDGTPPAGTO.."
              Moveto [Numero_Carregamento    ] TypeIn "~VSDGNCARREG.."
              Moveto [Placa do Veiculo       ] TypeIn "~VSDGPLACAVEICULO.."             
              Do_It!
              ClearAll
              
              If IsAssigned(Atividade)
                 Then Delete Atividade
              EndIf
                       
          OtherWise                    :      
              {Ask} {FaturaC} Check  
              Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
              If IsAssigned(Atividade)
                 Then Moveto [Codigo           ] Example "Pessoa"
                 Else Moveto [Codigo           ] TypeIn "~VSDGDESTINAT.." 
              EndIf
              If VSDGTPDOCTO<>""
                 Then Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
                      Moveto [Docto Nota Gerada      ] TypeIn "~VSDGTPDOCTO.."
                 Else Switch
                        Case SYS_APLICATIVO = "BNFCE" :
                             Moveto [Codigo do Representante] TypeIn "~FILTRARVENDEDOR.."
                             Moveto [Docto Nota Gerada      ] TypeIn "NCE.."
                        Case SYS_APLICATIVO = "BALCAO" :
                             Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
                             Moveto [Docto Nota Gerada      ] TypeIn "Blank Or RO.."
                             Moveto [Sistema Gerador        ] TypeIn "Blank or BA"
                        Case SYS_APLICATIVO = "TROCA" :
                             Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
                             Moveto [Descricao da Destinacao] TypeIn "..TROCA.."
                             Moveto [Sistema Gerador        ] TypeIn "Blank or TR"                        
                        OtherWise :
                             Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."                      
                      EndSwitch
              EndIf           
              Moveto [Numero do Pedido         ] TypeIn "~VSDGPEDIDO.."
              Moveto [Cidade                   ] TypeIn CIDADE
              Moveto [UF                       ] TypeIn "~VSDGESTADO.."
              Moveto [Codigo da Destinacao     ] TypeIn "~VSDGDESTIN.."
              Moveto [Tipo Movimento Estoque   ] TypeIn "~VSDGTPMOVDESTIN.."
              Switch
                case VSDGSITUACAODOCTO="AUTORIZADA"           : Moveto [Sistema Gerador] TypeIn "n!"
                case VSDGSITUACAODOCTO="NAO AUTORIZADA"       : Moveto [Sistema Gerador] TypeIn "n"
                case VSDGSITUACAODOCTO="CANCELADA+DENEGADA"   : Moveto [Sistema Gerador] TypeIn "C"
                case VSDGSITUACAODOCTO="MODO DE CONTINGENCIA" : Moveto [Sistema Gerador] TypeIn "s"
              EndSwitch
              ;Switch
              ;  Case SYS_APLICATIVO = "BNFCE" :
              ;       Switch
              ;         case VSDGSITUACAODOCTO="AUTORIZADA"           : Moveto [Sistema Gerador] TypeIn "n!"
              ;         case VSDGSITUACAODOCTO="NAO AUTORIZADA"       : Moveto [Sistema Gerador] TypeIn "n"
              ;         case VSDGSITUACAODOCTO="CANCELADA+DENEGADA"   : Moveto [Sistema Gerador] TypeIn "C"
              ;         case VSDGSITUACAODOCTO="MODO DE CONTINGENCIA" : Moveto [Sistema Gerador] TypeIn "s"
              ;       EndSwitch  
              ;  OtherWise                     :
              ;       Switch
              ;         case VSDGSITUACAODOCTO="NORMAL"                 : Moveto [Sistema Gerador         ] TypeIn "Not C"
              ;                                                           Moveto [Descricao da Destinacao ] TypeIn "Not ..INUT.."
              ;         case VSDGSITUACAODOCTO="CANCELADA"              : Moveto [Sistema Gerador         ] TypeIn "C"
              ;      EndSwitch
              ;EndSwitch
              switch
                case VSDGOPDTESI="1" : Moveto [Data de Emissao] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                case VSDGOPDTESI="2" : Moveto [Data de Saida  ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                case VSDGOPDTESI="3" : Moveto [Data_Inclusao  ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
              endswitch
              Moveto [Condicao de Pagamento  ] TypeIn "~VSDGCONDPGTO.."
              Moveto [Forma de Pagamento     ] TypeIn "~VSDGTPPAGTO.."
              Moveto [Numero_Carregamento    ] TypeIn "~VSDGNCARREG.."
              Moveto [Placa do Veiculo       ] TypeIn "~VSDGPLACAVEICULO.."             
              Do_It!
              ClearAll
              
              If IsAssigned(Atividade)
                 Then Delete Atividade
              EndIf
              Do_It!
              ClearAll
        EndSwitch
EndIf  

Release Vars REG_USUARIO
CriaTabelaControle()

If SYS_APLICATIVO = "NOTA"
   Then ;---- Ajustando Lookup na ta bela NOtaC --------------------------------
        Edit TabelaControle
        For ii From 1 To 4
          Switch
            Case ii=1 : Moveto [Codigo da Empresa  ]
                        {Valcheck} {Define} Enter {TableLookup} TypeIn "\\Sistemas\\Cadastro\\Empresas" Enter {AllCorrespondingFields} {HelpAndFill} 
            Case ii=2 : Moveto [Codigo do Documento]
                        {Valcheck} {Define} Enter {TableLookup} TypeIn "\\Sistemas\\Cadastro\\TpDoctos" Enter {AllCorrespondingFields} {HelpAndFill} 
            Case ii=3 : Moveto [Serie do Documento ]  
            Case ii=4 : Moveto [Numero do Documento]
          EndSwitch
          {Valcheck} {Define} Enter {Picture}     TypeIn "!*!" Enter
        EndFor
        Do_it! 
EndIf

Return True

EndProc  ; (Seleciona)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_DialogOF(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento, Temp, MSG_CAMPO, TECLA
 
Temp=True
MSG_CAMPO=""
TECLA=""                             
          
If Disparo="OPEN"  
   Then AoCriarShowDialog()
        TiraSombraShowDialog()
EndIf                                                                 
                   
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] = -59: 
          if campo="TG_SITUACAODOCTO"
             then If SYS_APLICATIVO = "BNFCE"
                     Then SUB_TIT = "Cupom"
                     Else SUB_TIT = "Documento"
                  EndIf
                  LimpaRodape(0)
                  Switch
                    ;Case SYS_APLICATIVO = "BNFCE" : Usando tambem para o script Fatura
                    ;      
                    Case SYS_APLICATIVO = "NOTA"  :  
                          ShowPopup " Situa‡äes do Documento " CENTERED
                          "~N~ORMAL           "            : " Documento NORMAL                "  : "NORMAL",
                          "~C~ANCELADA        "            : " Documento CANCELADA             "  : "CANCELADA",
                          "~I~NUTILIZADA      "            : " Documento INUTILIZADA           "  : "INUTILIZADA",
                          Separator,
                          "CANCELADA+~D~ENEGADA    "       : " Documento CANCELADA+DENEGADA    "  : "CANCELADA+DENEGADA",
                          "CANCELADA+~E~XTEMPORANEA"       : " Documento CANCELADA+EXTEMPORANEA"  : "CANCELADA+EXTEMPORANEA",
                          Separator,
                          "~T~ODAS            "            : " Todas as situa‡äes              "  : "TODAS"
                          EndMenu
                          To opcaosituacaonota
                    OtherWise : 
                          ShowPopup " Situa‡äes do Documento " CENTERED
                          "~A~UTORIZADA        "  : " "+SUB_TIT+" COM a confirma‡Æo da autoriza‡Æo"  : "AUTORIZADA",
                          "~N~AO AUTORIZADA    "  : " "+SUB_TIT+" SEM a confirma‡Æo da autoriza‡Æo"  : "NAO AUTORIZADA",
                          Separator,
                          "CANCELADA+~D~ENEGADA"  : " "+SUB_TIT+" cancelado ou denegado           "  : "CANCELADA+DENEGADA",
                          "MODO ~C~ONTINGENCIA"   : " "+SUB_TIT+" emitido em modo offline         "  : "MODO DE CONTINGENCIA",
                          Separator,
                          "~T~ODAS            "   : " Todas as situa‡äes                    "  : "TODAS"
                          EndMenu
                          To opcaosituacaonota
                    
                    ;      ShowPopup " Situa‡äes do Documento " CENTERED
                    ;      "~N~ORMAL           "            : " Documento NORMAL                "  : "NORMAL",
                    ;      "~C~ANCELADA        "            : " Documento CANCELADA             "  : "CANCELADA",
                    ;      Separator,
                    ;      "~T~ODAS            "            : " Todas as situa‡äes              "  : "TODAS"
                    ;      EndMenu
                    ;      To opcaosituacaonota
                  EndSwitch
                  if opcaosituacaonota<>"Esc"
                    then VSDGSITUACAODOCTO=opcaosituacaonota 
                    Else VSDGSITUACAODOCTO="" 
                  endif
             else Dialog_F1()     
          endif
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_PEDIDO"        : Campo="TG_EMPRESA"
            Case Campo="TG_NCARREG"       : Campo="TG_PEDIDO"     
            Case Campo="TG_TPDOCTO"       : Campo="TG_NCARREG"     
            Case Campo="TG_DESTINAT"      : Campo="TG_TPDOCTO"     
            Case Campo="TG_REPRESEN"      : Campo="TG_DESTINAT"    
            Case Campo="TG_CIDADE"        : Campo="TG_REPRESEN"    
            Case Campo="TG_ESTADO"        : Campo="TG_CIDADE"      
            Case Campo="TG_DESTIN"        : Campo="TG_ESTADO"      
            Case Campo="TG_TPMOVDESTIN"   : Campo="TG_DESTIN"      
            Case Campo="TG_ATIVIDADE"     : Campo="TG_TPMOVDESTIN" 
            Case Campo="TG_CONDPGTO"      : Campo="TG_ATIVIDADE"   
            Case Campo="TG_TPPAGTO"       : Campo="TG_CONDPGTO"    
            Case Campo="TG_PLACAVEICULO"  : Campo="TG_TPPAGTO"     
            Case Campo="TG_SITUACAODOCTO" : Campo="TG_PLACAVEICULO"
            Case Campo="TG_OPDTESI"       : Campo="TG_SITUACAODOCTO"
            Case Campo="TG_DTINI"         : Campo="TG_OPDTESI"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"     
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"      : Campo="TG_PEDIDO"
                         If Not IsBlank(VSDGEMPRESA) And MODOFILTRAR_EMPRESA<>"" And MODOFILTRAR_EMPRESA<>VSDGEMPRESA
                            Then Mensagem("Empresa informada difere da empresa cadastrada para esse usu rio!")
                                 Campo="TG_EMPRESA"
                         EndIf
                    Case Campo="TG_PEDIDO"       : Campo="TG_NCARREG"     
                    Case Campo="TG_NCARREG"      : Campo="TG_TPDOCTO"     
                    Case Campo="TG_TPDOCTO"      : Campo="TG_DESTINAT"    
                    Case Campo="TG_DESTINAT"     : Campo="TG_REPRESEN"    
                    Case Campo="TG_REPRESEN"     : Campo="TG_CIDADE"      
                    Case Campo="TG_CIDADE"       : Campo="TG_ESTADO"
                         If Upper(VSDGCIDADE)="TODAS"
                            Then CIDADE=""
                            Else CIDADE=VSDGCIDADE
                         EndIf 
                    Case Campo="TG_ESTADO"       : Campo="TG_DESTIN"      
                    Case Campo="TG_DESTIN"       : Campo="TG_TPMOVDESTIN" 
                         If SYS_APLICATIVO = "TROCA" And VSDGDESTIN<>"" 
                            Then GetRecord "\\Sistemas\\Vendas\\Destin" VSDGDESTIN To REG_DESTIN
                                 If Retval
                                    Then If Search("TROCA",Upper(REG_DESTIN["Descricao da Destinacao"]))=0
                                            Then Mensagem("Destina‡„o inv lida, somente destina‡„o de TROCA!") 
                                                 Campo="TG_DESTIN"
                                         EndIf   
                                 EndIf 
                         EndIf
                    Case Campo="TG_TPMOVDESTIN"  : Campo="TG_ATIVIDADE"   
                    Case Campo="TG_ATIVIDADE"    : Campo="TG_CONDPGTO"    
                    Case Campo="TG_CONDPGTO"     : Campo="TG_TPPAGTO"     
                    Case Campo="TG_TPPAGTO"      : Campo="TG_PLACAVEICULO"
                    Case Campo="TG_PLACAVEICULO" : Campo="TG_SITUACAODOCTO"
                         VSDGPLACAVEICULO=ControlValue("TG_PLACAVEICULO")
                    Case Campo="TG_SITUACAODOCTO": Campo="TG_OPDTESI"
                         VSDGSITUACAODOCTO=ControlValue("TG_SITUACAODOCTO")
                         if IsBlank(VSDGSITUACAODOCTO) 
                            Then VSDGSITUACAODOCTO="TODAS" 
                            Else If VSDGSITUACAODOCTO<>"AUTORIZADA"            And
                                    VSDGSITUACAODOCTO<>"NAO AUTORIZADA"        And
                                    VSDGSITUACAODOCTO<>"CANCELADA+DENEGADA"    And 
                                    VSDGSITUACAODOCTO<>"MODO DE CONTINGENCIA"  And
                                    VSDGSITUACAODOCTO<>"TODAS"
                                    then FastMsg("Situa‡Æo inv lida !")
                                         Campo="TG_SITUACAODOCTO"
                                 EndIf        		   
                        EndIf
                        ;Switch
                        ;   Case SYS_APLICATIVO = "BNFCE" :
                        ;        If VSDGSITUACAODOCTO<>"AUTORIZADA"            And
                        ;           VSDGSITUACAODOCTO<>"NAO AUTORIZADA"        And
                        ;           VSDGSITUACAODOCTO<>"CANCELADA+DENEGADA"    And 
                        ;           VSDGSITUACAODOCTO<>"MODO DE CONTINGENCIA"  And
                        ;           VSDGSITUACAODOCTO<>"TODAS"
                        ;           then FastMsg("Situa‡Æo inv lida !")
                        ;	      	    Campo="TG_SITUACAODOCTO"		   
                        ;         EndIf 
                        ;   OtherWise :
                        ;        If VSDGSITUACAODOCTO<>"NORMAL"                     And
                        ;           VSDGSITUACAODOCTO<>"CANCELADA"                  And
                        ;           VSDGSITUACAODOCTO<>"INUTILIZADA"                And
                        ;           VSDGSITUACAODOCTO<>"CANCELADA+DENEGADA"         And
                        ;           VSDGSITUACAODOCTO<>"CANCELADA+EXTEMPORANEA"     And
                        ;           VSDGSITUACAODOCTO<>"TODAS"             
                        ;           then FastMsg("Situa‡Æo inv lida !")
                        ;   			    Campo="TG_SITUACAODOCTO"		   
                        ;        EndIf   
                        ;EndSwitch 
                    Case Campo="TG_OPDTESI"      : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"        : Campo="TG_DTFIM"        
                    Case Campo="TG_DTFIM"        : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="TG_PLACAVEICULO"  : MSG_CAMPO="Em Branco=Todas"
  Case Campo="TG_SITUACAODOCTO" : MSG_CAMPO="Em Branco=Todas, [F1]Consultar tabela"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_DialogOF

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc FiltrarFatura()
Private Result

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

LimpAguarde()                 
Do_It!
ClearAll
                                                                        
Echo Normal
Echo Off

If MODOFILTRAR_EMPRESA<>"" Then VSDGEMPRESA=MODOFILTRAR_EMPRESA EndIf

If SYS_APLICATIVO = "BNFCE"
   Then TIT_NOTA = "Situa‡Æo do Cupom"                    
   Else TIT_NOTA = "Situa‡Æo do Documento"
EndIF  

CONSULTAF1     =  False
SDFILTRO_ATIVO = True
While True
  Result=False
  
  ShowDialog "Crit‚rio para filtro ?" Proc "SD_DialogOF"
  Trigger "OPEN","ARRIVE","SELECT"  
  Mouse "UP"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
  @ 05,00   Height 22 Width 80

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"                                                                        
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP
    
    Label  @ 02,00 "Pedido"  For "TG_PEDIDO"
    Accept @ 03,01 Width 9  "A6"  Picture "[&,#][#*#]" Tag "TG_PEDIDO"    To VSDGPEDIDO
    Accept @ 03,09 Width 25 "A25" Picture "!*!"        Tag "TG_NOMPEDIDO" To VSDGNOMPEDIDO

    Label  @ 04,00 "Carregamento" For "TG_NCARREG"
    Accept @ 05,01 Width 09  "A6"  Picture "[&,#][#*#]" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG
                                                                                                            
    Label  @ 06,00 "Tipo do Documento"  For "TG_TPDOCTO"
    Accept @ 07,01 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO                             
    Accept @ 07,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO                                                

    Label  @ 08,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 09,01 Width 07 "A4"  Picture "!*!" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 09,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMDEST"  To VSDGNOMDEST

    Label  @ 10,00 "Representante"  For "TG_REPRESEN"
    Accept @ 11,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_REPRESEN" To VSDGREPRESEN
    Accept @ 11,09 Width 25 "A15" Picture "!*!" Tag "TG_NOMREPR" To VSDGNOMREPR

    Label  @ 12,00 "Cidade"  For "TG_CIDADE"
    Accept @ 13,01 Width 27 "A20"  Picture "!*!" Tag "TG_CIDADE"  To VSDGCIDADE

    Label  @ 12,27 "Estado"  For "TG_ESTADO"
    Accept @ 13,28 Width 06 "A2"  Picture "!*!" Tag "TG_ESTADO" To VSDGESTADO
    
    Label  @ 14,00 "Destinacao"  For "TG_DESTIN"
    Accept @ 15,02 Width 06 "A3"  Picture "[&,#][#*#]" Tag "TG_DESTIN"    To VSDGDESTIN
    Accept @ 15,09 Width 21 "A30" Picture "!*!" Tag "TG_NOMDESTIN" To VSDGNOMDESTIN

    Label  @ 14,28 "TpMov" For "TG_TPMOVDESTIN"
    Accept @ 15,30 Width 04 "A1"  Picture "E,S" Tag "TG_TPMOVDESTIN" To VSDGTPMOVDESTIN

    Label  @ 00,35 "Atividade"  For "TG_ATIVIDADE"
    Accept @ 01,36 Width 07 "A4"  Picture "!*!" Tag "TG_ATIVIDADE" To VSDGATIVIDADE
    Accept @ 01,44 Width 25 "A30"  Picture "#*#" Tag "TG_NOMATIV" To VSDGNOMATIV
    
    Label  @ 02,35 "Condi‡„o de Pagamento"  For "TG_CONDPGTO"
    Accept @ 03,38 Width 05 "A2"  Picture "!*!" Tag "TG_CONDPGTO"    To VSDGCONDPGTO
    Accept @ 03,44 Width 25 "A25" Picture "!*!" Tag "TG_NOMCONDPGTO" To VSDGNOMCONDPGTO

    Label  @ 04,35 "Forma de Pagamento"  For "TG_TPPAGTO"
    Accept @ 05,38 Width 05 "A2"  Picture "!*!" Tag "TG_TPPAGTO"    To VSDGTPPAGTO
    Accept @ 05,44 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPPG"    To VSDGNOMTPPAGTO

    Label  @ 06,35 "Placa Veiculo" For "TG_PLACAVEICULO"
    Accept @ 07,36 Width 33 "A10"  Picture "!*!" Tag "TG_PLACAVEICULO" To VSDGPLACAVEICULO

    Label  @ 08,35 TIT_NOTA For "TG_SITUACAODOCTO"
    Accept @ 09,36 Width 33 "A25"  Picture "!*!" Tag "TG_SITUACAODOCTO" To VSDGSITUACAODOCTO
 
    Label  @ 10,35 "Op‡äes de Datas" For "TG_OPDTESI"
    Accept @ 11,39 Width 04 "A1"  Picture "1,2,3"  Tag "TG_OPDTESI" To VSDGOPDTESI
    Accept @ 11,44 Width 25 "A18" Picture "!*!"  Tag "TG_NOMOPDTES" To VSDGNOMOPDTES

    Label  @ 12,35 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 13,38 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 13,51 "at‚" For "TG_DTFIM"
    Accept @ 13,56 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    @ 19,52 ?? "[NÆo filtra mˆs fechado!]"

    Pushbutton @ 18,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 18,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If MODOFILTRAR_EMPRESA<>"" And MODOFILTRAR_EMPRESA<>VSDGEMPRESA
     Then Mensagem("O usu rio deve informar a empresa "+MODOFILTRAR_EMPRESA+"!")
          Loop
  EnDIf  

  AGUARDE("Filtrando dados")
  If Not SelecionaFiltroFatura() Then Loop EndIf    
  Result=True

  QuitLoop
EndWhile

SDFILTRO_ATIVO=False

Return Result
EndProc

;*******************************************************************************
;* Rotina Limpa Variaveis do Filtro                                            *
;*******************************************************************************
Proc LimpaFiltroFatura()

CIDADE           = ""
VSDGEMPRESA      = ""
VSDGNOMEMP       = ""
VSDGNCARREG      = ""
VSDGNOMNCARREG   = ""
VSDGTPDOCTO      = ""
VSDGNOMTPDOCTO   = ""
VSDGDESTINAT     = ""
VSDGNOMDEST      = ""
VSDGREPRESEN     = ""
VSDGNOMREPR      = ""
VSDGCIDADE       = ""
VSDGESTADO       = ""
VSDGDESTIN       = ""
VSDGNOMDESTIN    = ""
VSDGTPMOVDESTIN  = ""
VSDGATIVIDADE    = ""
VSDGNOMATIV      = ""
VSDGCONDPGTO     = ""
VSDGNOMCONDPGTO  = ""
VSDGTPPAGTO      = ""
VSDGNOMTPPAGTO   = ""
VSDGPLACAVEICULO = ""
VSDGSITUACAODOCTO= ""
VSDGOPDTESI      = ""
VSDGNOMOPDTES    = ""
VSDGDTINI        = BlankDate()
VSDGDTFIM        = Today()
REGRAFILTRO       = ""

EndProc ;LimpaFiltroFatura()

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc SelecionaFiltroPedido()
ClearAll

If Not IsAssigned(SDFILTRO_ATIVO) Then SDFILTRO_ATIVO = False EndIf

If Not SDFILTRO_ATIVO
   Then {Ask} {PedidoC} Check
        If MODOFILTRAR_EMPRESA<>""
           Then Moveto [Codigo da Empresa] TypeIn "~FILTRAREMPRESA.." 
        EndIf
        Do_It!
        ClearAll      
   Else Switch
          Case MODOFILTRAR_EMPRESA<>"" And VSDGEMPRESA<>"" And MODOFILTRAR_EMPRESA<>VSDGEMPRESA : 
               Mensagem("O usu rio deve informar a empresa "+VSDGEMPRESA+"!")
               Return False
          Case VSDGEMPRESA<>"" And MODOFILTRAR_EMPRESA=""           : 
               MODOFILTRAR_EMPRESA=VSDGEMPRESA 
        EndSwitch
        If VSDGATIVIDADE<>""
           Then {Ask} {\\Sistemas\\Cadastro\\Destinat}
                Moveto [Codigo          ] Check TypeIn "~VSDGDESTINAT.."
                Moveto [Codigo Atividade]       TypeIn "~VSDGATIVIDADE.."
                Do_It!
                ClearAll
               
                If Not IsEmpty("Answer")
                   Then Atividade=Cria_Temp(PrivDir())
                        Copy "Answer" Atividade
                         
                        Adiciona_Indice(Atividade,"Codigo")
                        
                        {Ask} TypeIn Atividade Enter
                        Moveto [Codigo         ] Example "Pessoa"
                EndIf
       EndIf  
       {Ask} {PedidoC} Check   
       Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
       If IsAssigned(Atividade)
          Then Moveto [Codigo           ] Example "Pessoa"
          Else Moveto [Codigo           ] TypeIn "~VSDGDESTINAT.." 
       EndIf
       Moveto [Codigo do Representante  ] TypeIn "~VSDGREPRESEN.."
       Moveto [Cidade                   ] TypeIn CIDADE
       Moveto [UF                       ] TypeIn "~VSDGESTADO.."
       Moveto [Codigo da Destinacao     ] TypeIn "~VSDGDESTIN.."
       Moveto [Situacao do Pedido       ]
       Switch
         case VSDGSITUACAOPEDIDO="JUNTAR ABERTO+SUSPENSO"     : TypeIn "ABERTO or SUSPENSO"
         case VSDGSITUACAOPEDIDO="IGNORAR CANCELADO+SUSPENSO" : TypeIn "not CANCELADO, not SUSPENSO"
         case VSDGSITUACAOPEDIDO="IGNORAR CANCELADO"          : TypeIn "not CANCELADO"
         case VSDGSITUACAOPEDIDO<>"TODAS"                     : TypeIn "~VSDGSITUACAOPEDIDO.."
       Endswitch
       Switch
         case VSDGOPDTPEEI="1" : Moveto [Data de Entrega] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
         case VSDGOPDTPEEI="2" : Moveto [Data de Emissao] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
         case VSDGOPDTPEEI="3" : Moveto [Data_Inclusao  ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
       Endswitch
       Moveto [Condicao de Pagamento  ] TypeIn "~VSDGCONDPGTO.."
       Moveto [Forma de Pagamento     ] TypeIn "~VSDGTPPAGTO.."
       Moveto [Numero_Carregamento    ] TypeIn "~VSDGNCARREG.."             
       Do_It!
       ClearAll
                     
       If IsAssigned(Atividade)
          Then Delete Atividade
       EndIf       
EndIf  

Release Vars REG_USUARIO
CriaTabelaControle()                     

Return True

EndProc  ; (Seleciona)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_DialogPedido(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento, Temp, MSG_CAMPO, TECLA
 
Temp=True
MSG_CAMPO=""
TECLA=""                             
          
If Disparo="OPEN"  
   Then AoCriarShowDialog()
        TiraSombraShowDialog()
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9 : Temp=False
     Case Evento["KeyCode"] = -59 : Dialog_F1()
     Case Evento["KeyCode"] =  27 :
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_NCARREG"       : Campo="TG_EMPRESA"
            Case Campo="TG_DESTINAT"      : Campo="TG_NCARREG"     
            Case Campo="TG_REPRESEN"      : Campo="TG_DESTINAT"    
            Case Campo="TG_CIDADE"        : Campo="TG_REPRESEN"    
            Case Campo="TG_ESTADO"        : Campo="TG_CIDADE"      
            Case Campo="TG_DESTIN"        : Campo="TG_ESTADO"
            Case Campo="TG_ATIVIDADE"     : Campo="TG_DESTIN" 
            Case Campo="TG_CONDPGTO"      : Campo="TG_ATIVIDADE"   
            Case Campo="TG_TPPAGTO"       : Campo="TG_CONDPGTO"     
            Case Campo="TG_SITUACAOPEDIDO": Campo="TG_TPPAGTO"
            Case Campo="TG_OPDTPEEI"      : Campo="TG_SITUACAOPEDIDO"
            Case Campo="TG_DTINI"         : Campo="TG_OPDTPEEI"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"     
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"        : Campo="TG_NCARREG"     
                         If Not IsBlank(VSDGEMPRESA) And MODOFILTRAR_EMPRESA<>"" And MODOFILTRAR_EMPRESA<>VSDGEMPRESA
                           Then Mensagem("Empresa informada difere da empresa cadastrada para esse usu rio!")
                                Campo="TG_EMPRESA"
                         EndIf
                    Case Campo="TG_NCARREG"        : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT"       : Campo="TG_REPRESEN"    
                    Case Campo="TG_REPRESEN"       : Campo="TG_CIDADE"      
                    Case Campo="TG_CIDADE"         : Campo="TG_ESTADO"
                         If Upper(VSDGCIDADE)="TODAS"
                            Then CIDADE=""
                            Else CIDADE=VSDGCIDADE
                         EndIf 
                    Case Campo="TG_ESTADO"         : Campo="TG_DESTIN"      
                    Case Campo="TG_DESTIN"         : Campo="TG_ATIVIDADE"   
                    Case Campo="TG_ATIVIDADE"      : Campo="TG_CONDPGTO"    
                    Case Campo="TG_CONDPGTO"       : Campo="TG_TPPAGTO"     
                    Case Campo="TG_TPPAGTO"        : Campo="TG_SITUACAOPEDIDO"
                    Case Campo="TG_SITUACAOPEDIDO" : Campo="TG_OPDTPEEI"             
                    Case Campo="TG_OPDTPEEI"       : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"          : Campo="TG_DTFIM"        
                    Case Campo="TG_DTFIM"          : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_DialogPedido

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc FiltrarPedido()
Private Result

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

LimpAguarde()                 
Do_It!
ClearAll                                       

Echo Normal
Echo Off

If MODOFILTRAR_EMPRESA<>"" Then VSDGEMPRESA=MODOFILTRAR_EMPRESA EndIf

CONSULTAF1     =  False
SDFILTRO_ATIVO = True
While True
  Result=False
  
  ShowDialog "Crit‚rio para filtro ?" Proc "SD_DialogPedido"
  Trigger "OPEN","ARRIVE","SELECT"  
  Mouse "UP"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
  @ 05,00   Height 22 Width 80

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"                                                                        
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Carregamento" For "TG_NCARREG"
    Accept @ 03,01 Width 09  "A6"  Picture "[&,#][#*#]" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG
                                                                                                            
    Label  @ 04,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 05,01 Width 07 "A4"  Picture "!*!" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMDEST"  To VSDGNOMDEST

    Label  @ 06,00 "Representante"  For "TG_REPRESEN"
    Accept @ 07,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_REPRESEN" To VSDGREPRESEN
    Accept @ 07,09 Width 25 "A15" Picture "!*!" Tag "TG_NOMREPR" To VSDGNOMREPR

    Label  @ 08,00 "Cidade"  For "TG_CIDADE"
    Accept @ 09,01 Width 27 "A20"  Picture "!*!" Tag "TG_CIDADE"  To VSDGCIDADE

    Label  @ 08,27 "Estado"  For "TG_ESTADO"
    Accept @ 09,28 Width 06 "A2"  Picture "!*!" Tag "TG_ESTADO" To VSDGESTADO
    
    Label  @ 10,00 "Destinacao"  For "TG_DESTIN"
    Accept @ 11,02 Width 06 "A3"  Picture "[&,#][#*#]" Tag "TG_DESTIN"    To VSDGDESTIN
    Accept @ 11,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMDESTIN" To VSDGNOMDESTIN

    Label  @ 12,00 "Atividade"  For "TG_ATIVIDADE"
    Accept @ 13,01 Width 07 "A4"  Picture "!*!" Tag "TG_ATIVIDADE" To VSDGATIVIDADE
    Accept @ 13,09 Width 25 "A30"  Picture "#*#" Tag "TG_NOMATIV" To VSDGNOMATIV
    
    Label  @ 14,00 "Condi‡„o de Pagamento"  For "TG_CONDPGTO"
    Accept @ 15,03 Width 05 "A2"  Picture "!*!" Tag "TG_CONDPGTO"    To VSDGCONDPGTO
    Accept @ 15,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMCONDPGTO" To VSDGNOMCONDPGTO

    Label  @ 00,35 "Forma de Pagamento"  For "TG_TPPAGTO"
    Accept @ 01,37 Width 05 "A2"  Picture "!*!" Tag "TG_TPPAGTO"    To VSDGTPPAGTO
    Accept @ 01,43 Width 26 "A20" Picture "!*!" Tag "TG_NOMTPPG"    To VSDGNOMTPPAGTO

    Label  @ 02,35 "Situacao do Pedido"  For "TG_SITUACAOPEDIDO"
    Accept @ 03,36 Width 33 "A30"  Picture "ABERTO,SUSPENSO,CANCELADO,FATURADO,TODAS,!*!" Tag "TG_SITUACAOPEDIDO"  To VSDGSITUACAOPEDIDO
 
    Label  @ 04,35 "Op‡äes de Datas" For "TG_OPDTPEEI"
    Accept @ 05,38 Width 04 "A1"  Picture "1,2,3"  Tag "TG_OPDTPEEI" To VSDGOPDTPEEI
    Accept @ 05,43 Width 26 "A18" Picture "!*!"  Tag "TG_NOMOPDTPEEI" To VSDGNOMOPDTPEEI

    Label  @ 06,35 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 07,38 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 07,51 "at‚" For "TG_DTFIM"
    Accept @ 07,56 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    @ 19,52 ?? "[NÆo filtra mˆs fechado!]"

    Pushbutton @ 18,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 18,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If MODOFILTRAR_EMPRESA<>"" And MODOFILTRAR_EMPRESA<>VSDGEMPRESA
     Then Mensagem("O usu rio deve informar a empresa "+MODOFILTRAR_EMPRESA+"!")
          Loop
  EnDIf  

  AGUARDE("Filtrando dados")
  If Not SelecionaFiltroPedido() Then Loop EndIf    
  Result=True

  QuitLoop
EndWhile

SDFILTRO_ATIVO=False

Return Result
EndProc

;*******************************************************************************
;* Rotina Limpa Variaveis do Filtro                                            *
;*******************************************************************************
Proc LimpaFiltroPedido()

CIDADE           = ""
VSDGEMPRESA      = ""
VSDGNOMEMP       = ""
VSDGNCARREG      = ""
VSDGNOMNCARREG   = ""
VSDGDESTINAT     = ""
VSDGNOMDEST      = ""
VSDGREPRESEN     = ""
VSDGNOMREPR      = ""
VSDGCIDADE       = ""
VSDGESTADO       = ""
VSDGDESTIN       = ""
VSDGNOMDESTIN    = ""
VSDGATIVIDADE    = ""
VSDGNOMATIV      = ""
VSDGCONDPGTO     = ""
VSDGNOMCONDPGTO  = ""
VSDGTPPAGTO      = ""
VSDGNOMTPPAGTO   = ""
VSDGSITUACAOPEDIDO = ""
VSDGOPDTPEEI     = ""
VSDGNOMOPDTES    = ""
VSDGDTINI        = BlankDate()
VSDGDTFIM        = Today()

REGRAFILTRO       = ""

EndProc ;LimpaFiltroPedido()

;******************************************************************************
;** 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,Mensagem_Expedicao,
         Limite_Credito,Pega_Preco,CALC_VENCTOS,Cria_Ficha,Dias_Atraso,CHEQUES,
         Checa_Comissao_Vendedor,Excluir_Rateio_Comissao,RATEIO_COMISSAO_VENCTOS,
         Mensagem_Venda,Rateio_BC_Itens,Checa_SPC,Checa_Pedido,Calcular_Vencimentos,Data_Dialog,
         Checa_Estoque,Estoque,FATURA_NLancto,FATURA_NLancto_Particularidade,
         NFE_GravaCampo,NFE_GravarCampoMemo,NFE_PegaEndereco,NFE_Tira_CharNFE,NFE_CalcMod11,
         NFE_CalcChaveAcesso,NFE_MontarFormasPagtos,
         Carrega_Transportador,Transportador_Dialog,ShowDialog_Transportador,ShowDialog_Redespacho,
         ShowDialog_TranspRedespacho,BibVend_SetaVariaveis,
         OPCAO,FiltrarFatura,SD_DialogOF,SelecionaFiltroFatura,LimpaFiltroFatura,
         SelecionaFiltroPedido,SD_DialogPedido,FiltrarPedido,LimpaFiltroPedido,
         Digita_Pix_Dialog,Digita_Pix_Show,Digita_Pix
