;** NotaEC *********************************************************************
;*  Digitacao de Notas de Entrada                                              *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 01/01/1998 por Anivel Augusto Rodrigues
;Ultima Alteracao: 18/09/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rotina F9
;Ultima Alteracao: 09/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Round() Calculo Fator de Conversao
;Ultima Alteracao: 23/05/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle Mouse
;Ultima Alteracao: 13/06/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Alterar Item e Preco da Tabela - Conc.Vico
;Ultima Alteracao: 23/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Estorno Contas a Pagar                    
;Ultima Alteracao: 13/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Substituicao                          
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                             
;Ultima Alteracao: 28/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes V_FORN                       
;Ultima Alteracao: 14/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Lancto a Prazo
;Ultima Alteracao: 09/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cotacao
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 11/06/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 14/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 5 Casas decimais Ajustes Item
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 05/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Recolhimento Substituicao Tipos
;Ultima Alteracao: 30/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem UF/CFO
;Ultima Alteracao: 13/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pesquisa pelo Codigo do Item do Fornecedor
;Ultima Alteracao: 05/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 01/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem altera‡ao de valores p/ itens
;Ultima Alteracao: 14/07/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Calculo Substituicao MVA/UFO/UFD
;Ultima Alteracao: 28/07/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA_Interno/Itens
;Ultima Alteracao: 11/08/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VCU_BC_SUBST/VCU_VR_SUBST=BlankNum()
;Ultima Alteracao: 03/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta Codigo Empresa Auditoria
;Ultima Alteracao: 06/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Liberacao Digitacao Serie do Documento/ Frete 0=Sem Frete
;Ultima Alteracao: 31/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Iterno->MVA_11 cadastro itens                          
;Ultima Alteracao: 26/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle de Pecas Brasil Textil, inclusao campo Lookup_OCV 
;Ultima Alteracao: 30/11/2009 por Bruno Carvalho
;Motivo Alteracao: Inclusao Parametro PIS/COFINS HF Tecidos  
;Ultima Alteracao: 18/12/2009 por Bruno Carvalho
;Motivo Alteracao: Ajustes visucalicao CST item   
;Ultima Alteracao: 22/12/2009 por Cleber Alves
;Motivo Alteracao: Ajustes campo Data Competencia
;Ultima Alteracao: 18/03/2010 por Cleber Alves
;Motivo Alteracao: Ajustes %Venda
;Ultima Alteracao: 26/03/2010 por Cleber Alves
;Motivo Alteracao: inclusao Data Competencia
;Ultima Alteracao: 16/04/2010 por Cleber Alves
;Motivo Alteracao: Opcao F5 Observacao
;Ultima Alteracao: 11/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Consulta Itens                         
;Ultima Alteracao: 16/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Msg tamanho numero documento max 6      
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha      
;Ultima Alteracao: 24/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item Fundi‡Æo SÆo Geraldo      
;Ultima Alteracao: 14/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 25/10/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes %Reducao BC IPI                     
;Ultima Alteracao: 17/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo BC IPI                     
;Ultima Alteracao: 25/10/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes %Reducao BCIPI FornProd, novos campo Cota‡Æo
;Ultima Alteracao: 02/12/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALC_NOTA BCIMCS-ST
;Ultima Alteracao: 07/12/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir NCM           
;Ultima Alteracao: 23/12/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes "Frete por Conta"
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas            
;Ultima Alteracao: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;Ultima Alteracao: 28/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Novos Campos/Layout/Modo de Trabalho
;Ultima Alteracao: 14/03/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Tributacao de ISSQN  
;Ultima Alteracao: 10/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes numero do documento livre            
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 28/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem VrBCST/VrST conforme codigo recolhimento
;Ultima Alteracao: 15/08/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina para formas de localizar o item e Ajustes "0296" 
;Ultima Alteracao: 13/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Atualizar TabPReco se blank                       
;Ultima Alteracao: 24/10/2011 por Karina Andrade
;Motivo Alteracao: Add Campo="I_CSOSN" ao Digitai()
;Ultima Alteracao: 26/10/2011 por Bruno Carvalho
;Motivo Alteracao: Add Natureza do Frete conforme Codigos de Documento 
;Ultima Alteracao: 27/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFSE Chave_Acesso_NF                             
;Ultima Alteracao: 08/11/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes CST do Item
;Ultima Alteracao: 02/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSTICMS ?90 digitar ST e MVA                        
;Ultima Alteracao: 23/01/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes nas rotinas de vencimento "AVISTA" e "APRAZO"      
;Ultima Alteracao: 09/02/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes OC_VENCTOS()   
;Ultima Alteracao: 13/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Limpa_Campos()                                     
;Ultima Alteracao: 21/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F8 para copiar Base de Calculo e Calcular Impostos menos ICMS
;Ultima Alteracao: 22/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes op‡Æo sair dos showpoup
;Ultima Alteracao: 23/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes MSG para altera‡Æo da Data de Entrada
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IPI_CST OCI->NotaEI                                 
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Showdialog A Prazo                                  
;Ultima Alteracao: 02/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ICMS item debitado or CST =?10 inforamr aliquota        
;Ultima Alteracao: 24/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Item servi‡o pede ISSQN senÆo =N                        
;Ultima Alteracao: 26/04/2012 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes "Digita_AVista"  
;Ultima Alteracao: 27/04/2012 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes nas aliquota dos Itens, setado vari veis sem valores   
;Ultima Alteracao: 30/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F8 para Calcular BC e Vr do imposto conforme rateios            
;Ultima Alteracao: 07/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F8 para Calcular BC e Vr, PIS/COFINS=99 Simples Nacional    
;Ultima Alteracao: 17/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Rotina para inclusÆo de novo resgitro(travar sequencia)     
;Ultima Alteracao: 13/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateio proporcional no item PIS/COFINS                      
;Ultima Alteracao: 19/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo PIS/COFINS Base calculo com e sem IPI, Substituicao COTTA/PONTO CON
;Ultima Alteracao: 25/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes filtro tipo de lancamento conforme tipo da conta /contas a pagar         
;Ultima Alteracao: 27/06/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Chave de acesso obrigatorio para NF-E, CT-E e NFSE
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_CSOSN2()     
;Ultima Alteracao: 10/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes campos=blank se for =0 nos itens(importa‡Æo xml)
;Ultima Alteracao: 16/08/2012 por Bruno Carvalho
;Motivo Alteracao: InclusÆo Digitai() "VSD_I_Referencia"
;Ultima Alteracao: 21/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Ficha do Item" para informar o valor exato VSD_I_Referencia
;Ultima Alteracao: 26/09/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        
;Ultima Alteracao: 04/10/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes fator ce conversao=1 para GM 0319                        
;Ultima Alteracao: 19/10/2012 por Kamila Gomes                       
;Motivo Alteracao: Corrigido problema com vari vel LANCTO 
;Ultima Alteracao: 22/10/2012 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado "CSOSN" na rotina do FornProd, e ajustado novo layout p/ Impostos  
;Ultima Alteracao: 24/10/2012 por Bruno Carvalho                           
;Motivo Alteracao: Ajuste na posi‡Æo do ShowDialog "Dados do Item"   
;Ultima Alteracao: 23/11/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes F1
;Ultima Alteracao: 27/11/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Items CST ?60 nÆo zerar valores de icms
;Ultima Alteracao: 04/12/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes aceitar valor nf zerada para complemento
;Ultima Alteracao: 06/12/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes calculo bc pis/cofins pontocon       
;Ultima Alteracao: 20/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pegar nf/serie/cgc da chave de acesso
;Ultima Alteracao: 20/12/2012 por Bruno Carvalho
;Motivo Alteracao: Add "VERIFICA_CONSULTA"
;Ultima Alteracao: 04/01/2013 por Bruno Carvalho
;Motivo Alteracao: Removido vari vel "VERIFICA_CONSULTA" onde estava sendo setada sem utiliza‡Æo
;Ultima Alteracao: 18/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes checagem total da NF                 
;Ultima Alteracao: 28/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes checagem item com ST usar cst ?60 ou CSOSN ?500 e NCM<>do cadastro
;Ultima Alteracao: 30/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes limpas cst pis/cofins/ipi item sem cotacao/historico              
;Ultima Alteracao: 01/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes titulo mercadoria->produtos              
  
;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Faturamento                         *
;*******************************************************************************
Proc CHAVEC()
INC_COMPRA   =False
FACA_DIGITAC=True
INICIO_PAGINA=True

VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

While True
  VSDGNATFRETE=""
  
  Moveto "NotaEC"
  End
  Moveto [Numero do Lancamento]
  LANCTO=[Numero do Lancamento]

  If OPCAO_FORM="F"
     Then Down
     Else PgDn PgDn PgDn
  EndIf
  Moveto [Numero do Lancamento]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao() 

     Switch
        Case RetVal=-33 : SemFuncoes()
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F3":
             If OPCAO_FORM="F"
                Then OPCAO_FORM="1"
                Else OPCAO_FORM="F"
             EndIf
             Del                    
             CHAVEC=5
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               INC_COMPRA   =False
               FACA_DIGITAC=True
               INICIO_PAGINA=True

               VSDGNATFRETE=""
               VCITENS     =BlankNum()
               VSQTDE      =BlankNum()
               VSVRMERC    =BlankNum()

               If OPCAO_FORM="F"
                  Then PAGINA("NotaEC","MR")
                  Else PAGINA("NotaEC","MT")
               EndIf
               LANCTO=[Numero do Lancamento]
               If Not IsBlank([Data de Entrada])
                  Then MES=ALINHM(StrVal(Month([NotaEC->Data de Entrada])),2)
                       ANO=ALINHM(StrVal(Year([NotaEC->Data de Entrada])),4)
                  Else MES="00"
                       ANO="0000"
               EndIf
               Switch
                 Case EDITAR="S":
                      PickForm "1"
                      Echo Normal
                      Echo Off
                      If Checa_Controle([Numero_Controle_Dia])
                         Then 
                              CHAVEC=0
                              Controla_EdicaoC()
                         Else UnLockRecord
                      EndIf
                 Case EXCLUIR="S":
                      PickForm "1"
                      Echo Normal
                      Echo Off
                      If Checa_Controle([Numero_Controle_Dia]) And
                         Checa_Supervisor()
                         Then If QuerExcluir("")
                                 Then If Carrega_Parametros()
                                         Then EXCLUSAO_C()
                                         Else If Not IsBlank([Codigo da Empresa])
                                                 Then UnLockRecord
                                                 Else EXCLUSAO_C()
                                              EndIf
                                      EndIf
                                 Else UnLockRecord
                              EndIf
                         Else UnLockRecord
                      EndIf
                 OtherWise: QuitLoop
               EndSwitch
               If OPCAO_FORM="1"
                  Then PickForm "1"
                  Else PickForm "F"
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             CHAVEC=9
             Del
             Return
        Case Retval="ENTER":
             registro_automatico=False
             If IsBlank([])
                 Then If IsBlank(LANCTO)
                          Then LANCTO="1"
                          Else LANCTO=StrVal(NumVal(LANCTO)+1)
                       EndIf
                  []=LANCTO
                  registro_automatico=True
             EndIf
             []=ALINH()
             LANCTO=[]
             Del
             PickForm "1"
             Locate LANCTO
             If Retval
                Then CHAVEC=0
                Else CHAVEC=1
                     End
                     If Not IsBlank([Numero do Lancamento])
                        Then PgDn PgDn PgDn
                     EndIf
                     Moveto [Numero do Lancamento]
                     [Numero do Lancamento]=LANCTO
             EndIf
             If Not IsLockRecord()
                Then Echo Normal
                     Echo Off

                     If CHAVEC=1 And registro_automatico=False
                        Then 
                             MSG=    Completa("A inclusÆo de um novo lan‡amento deve seguir a ordem autom tica !"               ,65," ")+"//"
                             MSG=MSG+Completa("O pr¢ximo lan‡amento seria = "+StrVal(NVLANCTO)+"."                              ,65," ")+"// //"                      
                             MSG=MSG+Completa("Vocˆ esta incluindo um novo lan‡amento com a ordem = "+StrVal(NumVal(LANCTO))+".",65," ")+"// //" 

                             If Checa_Supervisor()
                                Then MSG=MSG+"Deseja criar este novo lan‡amento nesta ordem assim mesmo ?"
                                     If ConfGeral(MSG)
                                        Then Return
                                     EndIf
                                Else MSG=MSG+"InclusÆo nÆo permitida !"
                                     Mensagem(MSG)
                             EndIf            
                        Else     
                             If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                                (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
                                Then Return
                             EndIf
                     EndIf
             EndIf
             If CHAVEC=1
                Then Del
             EndIf
             If OPCAO_FORM="F"
                Then PickForm "F"
             EndIf

             QuitLoop
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()

Moveto "NotaEC"
Moveto "NotaECP" SetaCorRegistro("Padrao")
Moveto "NotaEC"
DATAENT_ANT=[Data de Entrada]
If INICIO_PAGINA
   Then If [Sistema Gerador]="NF"
           Then MSG="Lan‡amento gerado automaticamente pelo Faturamento !"
                MSG=MSG+"// Cuidado com as modificacoes efetuadas !"
                Mensagem(MSG)
        EndIf
        If CHAVEC=1
           Then [Codigo da Empresa   ]=SYS_EMPRESA_DEFAULT
           Else If Not Carrega_Parametros()
                    Then CHAVEC=9
                         Return
                EndIf
        EndIf
EndIf

If CHAVEC=0 or Not INICIO_PAGINA
   Then If IsBlank([Data de Entrada])
           Then Moveto [Codigo da Empresa]
           Else MES=ALINHM(StrVal(Month([NotaEC->Data de Entrada])),2)
                ANO=ALINHM(StrVal(Year([NotaEC->Data de Entrada])),4)
                Moveto [Valor BCICMS]
        EndIf
   Else Moveto [Codigo da Empresa]
EndIf

If [Tipo de Operacao]="D"
   Then Moveto [Numero Nota Original]
EndIf

FACA_CHAVEI=True
INICIO_PAGINA=False
CODREP=[Codigo do Representante]
V_FORN=[Codigo]
V_CGC =[CGC   ]
V_NOC =[Numero da OC]

;*** Variaveis Valores Anteriores *******
VANT_CFOP        =[CFO]
VANT_MERCDIG     =[VALOR MERCADORIA]
VANT_DESCTO      =[VALOR DESCONTO]
VANT_SERVDIG     =[VALOR SERVICO]

VANT_SEGURO      =[VALOR DO SEGURO]
VANT_DESPACES    =[VALOR DESPESAS ACESSORIAS]
VANT_ACRESDESC   =[VALOR ACRESCIMOS_DESCTOS]
VANT_FRETE       =[VALOR DO FRETE]
VANT_RECSUBST    =[RECOLHIMENTO SUBSTITUICAO]
VANT_VSUBST      =[VALOR SUBSTITUICAO ICMS]
VANT_VSUBSTDEST  =[VR SUBSTITUICAO DESTINAT]
;****************************************

While True

      TECLA=" Esc=Retornar  "
      If CHAVEC=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf

      If Field()="Codigo da Empresa"        Or
         Field()="Tipo de Operacao"         Or
         Field()="Codigo do Documento"      Or
         Field()="CFO"                      Or
         Field()="Codigo"                   Or
         Field()="Codigo do Representante"  Or
         Field()="Codigo da Tabela"         Or
         Field()="Numero_Carregamento"      Or
         Field()="Numero da OC"             Or
         Field()="ICMS sobre Total NF"      Or
         Field()="Recolhimento Substituicao" Or
         Field()="Tipo CTR"                 Or
         Field()="Natureza do Frete"
         Then TECLA=TECLA+"F1=Tabelas  "
         Else TECLA=TECLA+"            "
      EndIf
      TECLA=TECLA+"Alt+F=Fun‡”es  PgDn  "

      Prompt TECLA

      FORMMSGCAMPO=""
      MSGCAMPO=Field()
      Switch
        Case Field()="CFO"                        : MSGCAMPO="CFOP principal da Nota"

        Case Field()="Tipo Pessoa"                : MSGCAMPO="Tipo de Pessoa = F¡sica, Jur¡dica"
        Case Field()="CGC"                        : MSGCAMPO="CNPJ/CPF"

        Case Field()="Codigo da Tabela"           : MSGCAMPO="C¢digo da Tabela de Pre‡o para devolu‡Æo"
        Case Field()="Numero Nota Original"       : MSGCAMPO="Nota origem da devolu‡Æo"
        Case Field()="Serie Nota Original"        : MSGCAMPO="Serie da nota origem da devolu‡Æo"
        Case Field()="Codigo da Tabela"           : MSGCAMPO="C¢digo da Tabela de Pre‡o para devolu‡Æo"
        Case Field()="Codigo do Representante"    : MSGCAMPO="C¢digo do representante para devolu‡Æo"
        Case Field()="Comissao do Representante"  : MSGCAMPO="ComissÆo do representante para devolu‡Æo"

        Case Field()="Valor Mercadoria"           : MSGCAMPO="Valor total dos produtos"
        Case Field()="Valor Desconto"             : MSGCAMPO="Desconto"
        Case Field()="Valor Servico"              : MSGCAMPO="Valor dos servi‡os"

        Case Field()="Valor do Frete"             : MSGCAMPO="Frete"
        Case Field()="Natureza do Frete"          : MSGCAMPO="Informe a Natureza do Frete, Consulte [F1]"
        Case Field()="Valor do Seguro"            : MSGCAMPO="Seguro"
        Case Field()="Valor Despesas Acessorias"  : MSGCAMPO="Despesas acess¢rias"

        Case Field()="Valor BCICMS"               : MSGCAMPO="Base de c lculo do ICMS"
        Case Field()="Valor ICMS"                 : MSGCAMPO="Valor do ICMS"
        Case Field()="Valor BCSubstituicao ICMS"  : MSGCAMPO="Base de c lculo do ICMS substitui‡„o"
        Case Field()="Valor Substituicao ICMS"    : MSGCAMPO="Valor do ICMS substitui‡„o"
        Case Field()="Valor BCISSQN"              : MSGCAMPO="Base de c lculo do ISSQN"
        Case Field()="Valor ISSQN"                : MSGCAMPO="Valor do ISSQN"

        Case Field()="Valor Acrescimos_Desctos"   : MSGCAMPO="Valor de outros acr‚scimos/descontos a ratear nos custos"

        Case Field()="Valor IPI"                  : MSGCAMPO="IPI"
        Case Field()="Valor Nota Fiscal"          : MSGCAMPO="Valor da nota fiscal"

        Case Field()="Recolhimento Substituicao"  : MSGCAMPO="Tipo recolhimento da substitui‡Æo, Consulte [F1]"
        Case Field()="BC Substituicao Destinat"   : MSGCAMPO="Base de c lculo do ICMS substitui‡„o a pagar pelo destinat rio"
        Case Field()="Vr Substituicao Destinat"   : MSGCAMPO="Valor do ICMS substitui‡„o a pagar pelo destinat rio"        

        Case Field()="Tipo CTR"                   : MSGCAMPO="Frete por conta, Consulte [F1]"
      EndSwitch

      Wait Field
        Message MSGCAMPO
         Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F6",-33,"F9"
 
      If RetVal=-33
               Then Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
;;;;;;;;;;;;;;;;"    ~F~rete              " : " Dados do Frete               " : "F",
                "F6  ~I~mprimir           " : " Imprimir Pedido              " : "F6",
                "F9  ~D~octo/Data Entrada " : " Alterar Docto/Data de Entrada" : "F9",
                "~S~air                   " : " Ignorar op‡äes               " : "CANCELAR"
              EndMenu
              To MenuVar
              echo off
              If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
              EndIf

              RetVal=MenuVar
      EndIf

      Switch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case RetVal="F1":
           If Field()="Codigo da Empresa"        Or
              Field()="Codigo do Documento"      Or
              Field()="CFO"                      Or
              Field()="Codigo"                   Or
              Field()="Codigo do Representante"  Or
              Field()="Codigo da Tabela"         Or
              Field()="Numero_Carregamento"      Or
              Field()="Numero da OC"
              Then CONSULTAF1()
           EndIf
           If Field()="Tipo de Operacao"
              Then
                   ShowPopup " Tipo " CENTERED
                    "~A~plica‡„o Direta" : " Opera‡„o sem crˆdito de impostos e sem controle de estoque."        : "A",
                    "~C~ompras         " : " Compras com/sem crˆdito de impostos e com/sem controle de estoque." : "C",
                    "~D~evolu‡„o       " : " Devolu‡„o de produtos de cliente."                                  : "D",
                    "~T~ransferencia   " : " Transferˆncia entre Matriz/Filiais"                                 : "T",
                    "~O~utras          " : " Outras entradas"                                                    : "O",
                    "~S~air            " : " Ignorar op‡äes"                                                     : "CANCELAR"

                   EndMenu
                    To MenuVar

                   If MenuVar<>"CANCELAR" And MenuVar<>"Esc"
                       Then []=MenuVar
                            Moveto [Codigo do Documento]
                   EndIf

           EndIf
           If Field()="Natureza do Frete"
              Then
                   ShowPopup " Ordem de Compra P£blica  " CENTERED
                    "~0~ : Vendas - com “nus suportado pelo estabelecimento vendedor.    " : " " : "0",  
                     Separator,             
                    "~1~ : Vendas - com “nus suportado pelo adquirente.                  " : " " : "1",
                     Separator,  
                    "~2~ : Compras - (bens p/ revenda, mat‚rias-prima, e outros,         " : " " : "2", 
                    "    geradores de cr‚dito.                                           " : " " : "2", 
                     Separator,
                    "~3~ : Compras - (bens p/ revenda, mat‚rias-prima, e outros,         " : " " : "3",
                    "    n„o geradores de cr‚dito                                        " : " " : "3",
                     Separator,
                    "~4~ : Transferˆncia de produtos acabados entre estabelecimentos     " : " " : "4",
                    "    da pessoa jur¡dica                                              " : " " : "4",
                     Separator,
                    "~5~ : Transferˆncia de produtos em elabora‡„o entre estabelecimentos" : " " : "5", 
                    "    da pessoa jur¡dica                                              " : " " : "5", 
                     Separator,
                    "~9~ : Outras                                                        " : " " : "9",
                     Separator,              
                    "~S~air                                                              " : " Ignorar op‡äes" : "CANCELAR"

                   EndMenu
                    To MenuVar

                   If MenuVar<>"CANCELAR" And MenuVar<>"Esc"
                       Then []=MenuVar                            
                   EndIf
                   
                   Verifica_Natureza_Frete()
                   
           EndIf
           If Field()="Tipo CTR"
              Then FreteporConta()
           EndIf   
      If Field()="Recolhimento Substituicao"
         Then
               ShowPopup " Op‡”es " Centered
                " ~0~ Opera‡„o sem substitui‡Æo tribut ria.                            " : " " : "0",
                " ~1~ Recolhimento substitui‡Æo tribut ria integral pelo Emitente.     " : " " : "1",
                 Separator,
                " ~2~ Pagamento de substitui‡Æo tribut ria efetuada pelo Destinat rio, " : " " : "2",
                "   quando nÆo efetuada ou efetuada a menor pelo substituto.           " : " " : "2",
                 Separator,
                " ~3~ Antecipa‡Æo tribut ria efetuada pelo Destinat rio,               " : " " : "3",
                "   apenas com complementa‡Æo do diferencial de al¡quota.              " : " " : "3",
                 Separator,
                " ~4~ Antecipa‡Æo tribut ria com MVA (Margem de Valor Agregado),       " : " " : "4",
                "   efetuada pelo Destinat rio,sem encerrar a fase de tributa‡Æo.      " : " " : "4",
                 Separator,
                " ~5~ Antecipa‡Æo tribut ria com MVA (Margem de Valor Agregado),       " : " " : "5",
                "   efetuada pelo Destinat rio encerrando a fase de tributa‡Æo.        " : " " : "5",
                 Separator,
                "~S~air                                                                " : " Ignorar op‡äes " : "CANCELAR"

               EndMenu
                To MenuVar
                   If MenuVar<>"Esc"
                      Then [Recolhimento Substituicao]=MenuVar
                   EndIf
       EndIf

      Case RetVal="PGDN":
           If CHECA_DIGITAC()
              Then ALIQ_ICMS()
                   QuitLoop
           EndIf
;;;;;;Case Retval="F":
;;;;;;     DIGITA_FRETE()
      Case Retval="DEL":
           If CHAVEC=0 And Checa_Supervisor()
              Then If QuerExcluir("deste lan‡amento")
                      Then EXCLUSAO_C()
                           CHAVEC=9
                           QuitLoop
                   EndIf
           EndIf


      Case Retval="F9" And CHAVEC=0:
           If SYS_CODIGO_CLIENTE="0117"
              Then Moveto [Codigo do Documento]
              Else If Checa_Supervisor()
                      Then Moveto [Codigo do Documento]
                   EndIf
           EndIf

      Case Retval="F6":
           If IMPRIME()
              Then CHAVEC=9
                   QuitLoop
           EndIf
      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Empresa":
                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then EXCLUSAO_C()
                        EndIf
                        CHAVEC=9
                        QuitLoop
                EndIf
           Case Field()="Numero da OC"        : Moveto [Codigo da Empresa]

           Case Field()="Data de Entrada":
                If CHAVEC=0
                   Then If QuerDesfazer("")
                           Then CHAVEC=9
                                QuitLoop
                        EndIf
                   Else Moveto [Data de Emissao]
                EndIf
           Case Field()="Numero do Documento"      : Moveto [Codigo do Documento      ]
           Case Field()="Codigo do Documento"      : Moveto [Tipo de Operacao         ]

           Case Field()="CFO":
                If CHAVEC=0
                   Then If QuerDesfazer("")
                           Then CHAVEC=9
                                QuitLoop
                        EndIf
                   Else Moveto [Data de Entrada]
                EndIf
           Case Field()="Chave_Acesso_NFe"         : Moveto [CFO                      ]  
           Case Field()="Codigo"                   : Moveto [CFO                      ]
           Case Field()="CGC"                      : Moveto [Codigo                   ]

           Case Field()="Valor BCICMS"             : Moveto [Codigo                   ]
           Case Field()="Valor ICMS"               : Moveto [Valor BCICMS             ]
           Case Field()="Valor BCSubstituicao ICMS": Moveto [Valor ICMS               ]
           Case Field()="Valor Substituicao ICMS"  : Moveto [Valor BCSubstituicao ICMS]
           Case Field()="Valor Servico"            : Moveto [Valor Substituicao ICMS  ]
           Case Field()="Valor BCISSQN"            : Moveto [Valor Servico            ]
           Case Field()="Valor ISSQN"              : Moveto [Valor BCISSQN            ]
           Case Field()="Valor Mercadoria"         : Moveto [Valor ISSQN              ]
           Case Field()="Valor do Frete"           : Moveto [Valor Mercadoria         ]
           Case Field()="Valor do Seguro"          : Moveto [Valor do Frete           ]
           Case Field()="Valor Desconto"           : Moveto [Valor do Seguro          ]
           Case Field()="Valor Despesas Acessorias": Moveto [Valor Desconto           ]
           Case Field()="Valor IPI"                : Moveto [Valor Despesas Acessorias]
           Case Field()="Valor Nota Fiscal"        : Moveto [Valor IPI                ]
           Case Field()="Valor Acrescimos_Desctos" : Moveto [Valor Nota Fiscal        ]
           Case Field()="Recolhimento Substituicao": Moveto [Valor Acrescimos_Desctos ]
           Case Field()="BC Substituicao Destinat" : Moveto [Recolhimento Substituicao]
           Case Field()="Vr Substituicao Destinat" : Moveto [Recolhimento Substituicao]
           Case Field()="Natureza do Frete"        : Moveto [Recolhimento Substituicao]
           Case Field()="Tipo CTR"                 : If Verifica_Natureza_Frete()
                                                        Then Moveto [Natureza do Frete]
                                                        Else Moveto [Recolhimento Substituicao]
                                                     EndIf
           Case Field()="Numero Nota Original":
                If CHAVEC=1
                   Then [Sistema Gerador]=""
                EndIf
                Moveto [CFO]
           Case Field()="Comissao do Representante": Moveto [Codigo do Representante  ]
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER":
           If IsBlank([])
              Then If Field()="Codigo da Empresa"   Or
                      Field()="Tipo de Operacao"    Or
                      Field()="Codigo do Documento" Or
                      Field()="Numero do Documento" Or
                      Field()="Codigo"  Or
                      Field()="CFO"     Or
                      Field()="CGC"
                      Then Loop
                   EndIf
                   If Field()="Chave_Acesso_NFe"
                    Then FastMSg("Informe Chave de Acesso, OBRIGATORIO!")
                         Loop
                   EndIf 
           EndIf
           Switch
           Case Field()="Codigo da Empresa":
                If Not Carrega_Parametros()
                   Then EXCLUSAO_C()
                        CHAVEC=9
                        QuitLoop
                   Else Moveto [Numero da OC]
                EndIf
           Case Field()="Numero da OC":
                If not IsBlank([])
                   Then If [Numero da OC]<>V_NOC
                           Then V_NOC=[Numero da OC]
                                Ativa_Lookup()
                                Moveto [Numero da OC]
                                Locate [NotaEC->Numero da OC    ]
                                WS_COF   =[Codigo               ]
                                WS_CFO   =[CFO                  ]
                                WS_TPG   =[Tipo de Pagamento    ]
                                WS_FRET  =[Frete Incluso na Nota]
                                WS_ICMSNF=[ICMS sobre Total NF  ]
                                WS_SIT   =[Situacao da OC       ]
                                WS_FPGTO =[Forma de Pagamento   ]
                                KeyPress "ESC"
                        EndIf
                        If WS_SIT<>"ABERTO"
                           Then Mensagem("Verificar a Situa‡„o da Ordem de Compra !//Status="+WS_SIT)
                                Loop
                        EndIf

                        [Codigo               ]=WS_COF
                        [CFO                  ]=WS_CFO
                        [Tipo de Pagamento    ]=WS_TPG
                        [Frete Incluso na Nota]=WS_FRET
                        [ICMS sobre Total NF  ]=WS_ICMSNF
                        [Tipo de Operacao     ]="C"
                EndIf
                Moveto [Tipo de Operacao]
           Case Field()="Tipo de Operacao":
                Moveto [Codigo do Documento]
           Case Field()="Codigo do Documento":

                Switch
                  Case [Codigo do Documento]="NF-E": Moveto [Chave_Acesso_NFe  ]
                  OtherWise                        : Moveto [Serie do Documento]
                EndSwitch

           Case Field()="Serie do Documento":
                Moveto [Numero do Documento]
           Case Field()="Numero do Documento":
               ;; If Len([Numero do Documento])>6
               ;;    Then Mensagem("O Sintegra s¢ aceita os £ltimos 6 d¡gitos a direita de um documento! // //Corrigir !")
               ;;         Loop
               ;; EndIf   
                Right
           Case Field()="Data de Emissao":
                If IsBlank([])
                   Then []=Today()
                EndIf
                Right
           Case Field()="Data de Entrada":
                If IsBlank([])
                   Then []=Today()
                EndIf
                If [Data de Entrada]<[Data de Emissao]
                   Then Mensagem("Data de Entrada menor que a de Emiss„o !")
                        Loop
                EndIf

                If Not IntervaloData([Data de Entrada])
                   Then Loop
                EndIf

                If Not IsBlank(DATAENT_ANT)
                   Then If [Data de Entrada]<>DATAENT_ANT
                           Then Moveto "NotaEI"
                                Moveto [Sequencia do Lancamento]
                                If RecordStatus("New")=False
                                   Then DATAOk=True
                                        If Year([NotaEC->Data de Entrada])<>Year(DATAENT_ANT)
                                           Then DATAOk=False
                                           Else If Month([NotaEC->Data de Entrada])<>Month(DATAENT_ANT)
                                                   Then DATAOk=False
                                                EndIf
                                        EndIf
                                        MSG="J  existem itens lan‡ados nesta nota !//"
                                        MSG=MSG+"Repass -los p/ corrigir esta data !"
                                        If Not DATAOk
                                           Then MSG=MSG+"// //O reprocessamento com transferencia //"
                                                MSG=MSG+"dever  ser executado p/ corrigir o Estoque !//"
                                        EndIf
                                        Mensagem(MSG)
                                EndIf
                                Moveto "NotaEC"
                                Moveto [Data de Entrada]
                        EndIf
                EndIf

                DATAENT_ANT=[Data de Entrada]
                MES=ALINHM(StrVal(Month([NotaEC->Data de Entrada])),2)
                ANO=ALINHM(StrVal(Year([NotaEC->Data de Entrada])),4)
                Right
           Case Field()="CFO":
                If NumVAl(SubStr([CFO],1,1))>4
                   Then Mensagem("CFO Invalido !")
                        Loop
                EndIf

                If [Codigo do Documento]="NFSE" Or
                   [Codigo do Documento]="CT-E"   
                   Then Moveto [Chave_Acesso_NFe]
                        Loop
                EndIf

                If [Tipo de Operacao]="D"
                   Then Moveto [Numero Nota Original]
                   Else If CHAVEC=1
                           Then If Not IsBlank([Numero da OC])
                                   Then Moveto [Valor BCICMS]
                                   Else If Not IsBlank([Codigo])
                                           Then Moveto [Valor BCICMS]
                                           Else Moveto [CGC]
                                        EndIf
                                EndIf
                           Else Moveto [Codigo]
                        EndIf
                EndIf
           Case Field()="Chave_Acesso_NFe":

                Switch
                  Case [Codigo do Documento]="NF-E": 
                    [Numero do Documento]=StrVal(NumVal(SubStr([Chave_Acesso_NFe],26,09)))
                    If Len([Numero do Documento])<6
                       Then [Numero do Documento]=AlinhM([Numero do Documento],6)
                    EndIf
                    [Serie do Documento ]=StrVal(NumVal(SubStr([Chave_Acesso_NFe],23,03)))
                    [CGC                ]=SubStr([Chave_Acesso_NFe],07,02)+"."+
                                          SubStr([Chave_Acesso_NFe],09,03)+"."+
                                          SubStr([Chave_Acesso_NFe],12,03)+"/"+
                                          SubStr([Chave_Acesso_NFe],15,04)+"-"+
                                          SubStr([Chave_Acesso_NFe],19,02)

                     CGC_OK=True
                     Moveto [Codigo]
                     Ativa_Lookup()
                     Moveto [CGC]
                     Locate IndexOrder by "CGC" [NotaEC->CGC]
                     If Not RetVal
                        Then CGC_OK=False
                        Else CODIGO_CLIENTE=[Codigo]
                     EndIf
                     KeyPress "ESC"
                     If CGC_OK
                        Then [Codigo]=CODIGO_CLIENTE
                             [Codigo do Representante]=""
                             [Nome Fantasia Represent]=""
                             If [Tipo de Operacao]="D"
                                Then [Codigo do Representante]=CODREP
                             EndIf
                             V_FORN=[Codigo]
                             V_CGC =[CGC]
                             Moveto [Valor BCICMS]
                        Else Mensagem("Emitente n„o encontrado pelo CGC !")
                     EndIf
                     Moveto [Data de Emissao]

                  OtherWise:
                    If [Tipo de Operacao]="D"
                       Then Moveto [Numero Nota Original]
                       Else If CHAVEC=1
                               Then If Not IsBlank([Numero da OC])
                                       Then Moveto [Valor BCICMS]
                                       Else Moveto [CGC]
                                    EndIf
                               Else Moveto [Codigo]
                            EndIf
                    EndIf
                EndSwitch
                
           Case Field()="CGC":
                If Not Checa_CGC_CPF_Formatado([CGC])
                   Then Loop
                EndIf
                If [CGC]<>V_CGC
                   Then V_CGC=[CGC]
                     CGC_OK=True
                     Moveto [Codigo]
                     Ativa_Lookup()
                     Moveto [CGC]
                     Locate IndexOrder by "CGC" [NotaEC->CGC]
                     If Not RetVal
                        Then CGC_OK=False
                        Else CODIGO_CLIENTE=[Codigo]
                     EndIf
                     KeyPress "ESC"
                     If CGC_OK
                        Then [Codigo]=CODIGO_CLIENTE
                             [Codigo do Representante]=""
                             [Nome Fantasia Represent]=""
                             If [Tipo de Operacao]="D"
                                Then [Codigo do Representante]=CODREP
                             EndIf
                             V_FORN=[Codigo]
                             Moveto [Valor BCICMS]
                        Else Mensagem("Emitente n„o encontrado pelo CGC !")
                             Moveto [Codigo]
                     EndIf
                   Else Moveto [Valor BCICMS]
                EndIf
           Case Field()="Codigo":
                If [Codigo]<>V_FORN
                   Then V_FORN=[Codigo]
                        [Codigo do Representante]=""
                        [Nome Fantasia Represent]=""
                        If [Tipo de Operacao]="D"
                           Then [Codigo do Representante]=CODREP
                        EndIf
                EndIf
                Moveto [Valor BCICMS]

           Case Field()="Valor BCICMS"             : Moveto [Valor ICMS               ]
           Case Field()="Valor ICMS"               : Moveto [Valor BCSubstituicao ICMS]
           Case Field()="Valor BCSubstituicao ICMS": Moveto [Valor Substituicao ICMS  ]
           Case Field()="Valor Substituicao ICMS"  : Moveto [Valor Servico            ]
           Case Field()="Valor Servico"            : Moveto [Valor BCISSQN            ]
           Case Field()="Valor BCISSQN"            : Moveto [Valor ISSQN              ]
           Case Field()="Valor ISSQN"              : Moveto [Valor Mercadoria         ]
           Case Field()="Valor Mercadoria"         : Moveto [Valor do Frete           ]
           Case Field()="Valor do Frete"           : Moveto [Valor do Seguro          ]
                If [Valor do Frete]>0 
                   Then [Frete Incluso na Nota]="+"
                   Else [Frete Incluso na Nota]=""
                EndIf   
           Case Field()="Valor do Seguro"          : Moveto [Valor Desconto           ]
           Case Field()="Valor Desconto"           : Moveto [Valor Despesas Acessorias]
                [Valor Mercadoria Liquido ]=[Valor Mercadoria]-[Valor Desconto]
           Case Field()="Valor Despesas Acessorias": Moveto [Valor IPI                ]
           Case Field()="Valor IPI"                : Moveto [Valor Nota Fiscal        ]
           Case Field()="Valor Nota Fiscal"        : Moveto [Valor Acrescimos_Desctos ]
              VRNOTA      =[Valor Mercadoria Liquido]+[Valor IPI                ]+
                           [Valor Despesas Acessorias]+
                           [Valor Substituicao ICMS ]+[Valor do Seguro          ]+
                           [Valor do Frete          ]+[Valor Servico            ]

              If IsBlank([Valor Nota Fiscal]) Then [Valor Nota Fiscal]=0 EndIf
              If IsBlank(VRNOTA)              Then VRNOTA=0              EndIf
             
              If Format("W12.2,EIC",[Valor Nota Fiscal])<>Format("W12.2,EIC",VRNOTA)
                 Then MSG="Valor nota fiscal digitada difere do calculado !// //"
                      MSG=MSG+"Digitado ="+Format("W12.2,EIC,AL",[Valor Nota Fiscal])+"//"
                      MSG=MSG+"Calculado="+Format("W12.2,EIC,AL",VRNOTA             )+"// //"
                      MSG=MSG+"Corrija os dados antes de processeguir !!"
                      Mensagem(MSG)
              EndIf

              If IsBlank([Recolhimento Substituicao])
                 Then If [Valor Substituicao ICMS  ]>0
                         Then [Recolhimento Substituicao]="1"
                      EndIf
              EndIf            

           Case Field()="Valor Acrescimos_Desctos" : Moveto [Recolhimento Substituicao]

           Case Field()="Recolhimento Substituicao":
                If IsBlank([])
                   Then []="0"
                EndIf
                If []="0" Or []="1"
                   Then 
                        [BC Substituicao Destinat ]=BlankNum()
                        [Vr Substituicao Destinat ]=BlankNum()
                        
                        If Verifica_Natureza_Frete()
                           Then Moveto [Natureza do Frete]
                           Else Moveto [Tipo CTR]
                        EndIf
                        
                   Else Moveto [BC Substituicao Destinat]
                EndIf        
           Case Field()="BC Substituicao Destinat" : Moveto [Vr Substituicao Destinat ]
           Case Field()="Vr Substituicao Destinat" : If Verifica_Natureza_Frete()
                                                        Then Moveto [Natureza do Frete]
                                                        Else Moveto [Tipo CTR]
                                                     EndIf
                                                     
            Case Field()="Natureza do Frete"       : 
                 If Verifica_Natureza_Frete()
                    Then If IsBlank([])
                            Then Loop
                            Else Moveto [Tipo CTR]      
                         EndIf
                    Else Moveto [Tipo CTR]      
                 EndIf                             
           Case Field()="Tipo CTR":
                If IsFieldNull([]) 
                   Then Loop 
                EndIf
                Moveto [Flag]
           Case Field()="Flag":
                If CHECA_DIGITAC()
                   Then ALIQ_ICMS()
                        QuitLoop
                EndIf

           Case Field()="Numero Nota Original":
                []=ALINH()
                Right
           Case Field()="Serie Nota Original":
                Moveto [Lookup_NotaC]
                Ativa_Lookup()
                Moveto [Codigo da Empresa]
                Locate [NotaEC->Codigo da Empresa],
                       [NotaEC->Numero Nota Original],
                       [NotaEC->Serie Nota Original]
                If RetVal
                   Then CODCLI=[Codigo                   ]
                        CODREP=[Codigo do Representante  ]
                        COMREP=[Comissao do Representante]
                        CODTAB=[Codigo da Tabela         ]
                        KeyPress "ESC"
                        [Codigo                   ]=CODCLI
                        [Codigo do Representante  ]=CODREP
                        [Comissao do Representante]=COMREP
                        [Codigo da Tabela         ]=CODTAB
                   Else KeyPress "ESC"
                EndIf
                Moveto [Serie Nota Original]
                Right
           Case Field()="Numero_Carregamento":
                Right
           Case Field()="Codigo do Representante":
                CODREP=[Codigo do Representante]
                Moveto [Comissao do Representante]
           Case Field()="Comissao do Representante":
                Moveto [Codigo]
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para Checagem DigitaC                                                *
;*******************************************************************************
Proc CHECA_DIGITAC()
Private Checa_Validade

NCAMPO=Field()

Checa_Validade=False
Switch
  Case IsBlank([Codigo da Empresa])    : Mensagem("Empresa invalida !")
  Case IsBlank([Tipo de Operacao])     : Mensagem("Opera‡„o invalida !")
  Case IsBlank([Codigo do Documento])  : Mensagem("Tipo documento invalido !")
  Case IsBlank([Numero do Documento])  : Mensagem("Numero documento invalido !")
  Case IsBlank([Data de Emissao])      : Mensagem("Data de emissao invalida !")
  Case IsBlank([Data de Entrada])      : Mensagem("Data de entrada invalida !")
  Case IsBlank([CFO])                  : Mensagem("CFOP invalido !")
  Case IsBlank([Codigo])               : Mensagem("Emitente invalido !")
  Case IsBlank([CGC])                  : Mensagem("CGC/CPF invalido !")
  Case IsBlank([UF])                   : Mensagem("Estado invalido !")
;  Case IsBlank([Valor Mercadoria])     : Mensagem("Valor mercadoria invalida !")
;  Case IsBlank([Valor Nota Fiscal])    : Mensagem("Valor nota fiscal invalida !")
  Case IsBlank([Codigo do Representante]) And [Tipo de Operacao]="D":
       Mensagem("Representante invalido !")
  Case NumVal(SubStr([CFO],1,1))>4     : Mensagem("CFOP invalido !")
  Case IsBlank([Natureza do Frete]) And
       Verifica_Natureza_Frete()       : Mensagem("Natureza do Frete Inv lido !")                        
  Case IsBlank([Tipo CTR])             : Mensagem("Frete por conta invalido !")
  OtherWise: 
    Checa_Validade=True                          
    
    ;*** Checagem da Unidade Federativa c/ CFO ***
    UFD        =""
    TPEMPR     ="??"
    ATIVEMPRESA="??"
    AICMSUFD=BlankNum()
    Moveto [Codigo da Empresa]
    Ativa_Lookup()
    Moveto [Codigo da Empresa]
    Locate [NotaEC->Codigo da Empresa]
    If RetVal
       Then UFD        =[UF Empresa]
            TPEMPR     =[Tipo da Empresa]
            ATIVEMPRESA=[Atividade]
            Switch
              Case (SubStr([NotaEC->CFO],1,1)="1" And [NotaEC->UF]<>[UF Empresa]):
                   MSG="O estado \""+[NotaEC->UF]+"\" de origem usado p/ o CFOP \""+[NotaEC->CFO]+"\"// ‚ diferente da sua Empresa \""+[UF Empresa]+"\" ! "
                   MSG=MSG+"// //Tenha certeza que esta situa‡„o ‚ realmente correta ou n„o !!"
                   Mensagem(MSG)
              Case (SubStr([NotaEC->CFO],1,1)="2" And [NotaEC->UF]=[UF Empresa]):
                   MSG="O estado \""+[NotaEC->UF]+"\" de origem usado p/ o CFOP \""+[NotaEC->CFO]+"\"// ‚ igual a sua Empresa \""+[UF Empresa]+"\" ! "
                   MSG=MSG+"// //Tenha certeza que esta situa‡„o ‚ realmente correta ou n„o !!"
                   Mensagem(MSG)
            EndSwitch
    EndIf
    KeyPress "ESC"

    If Not Checa_CGC_CPF_Formatado([CGC])
       Then Checa_Validade=False
    EndIf

    If ([Valor BCSubstituicao ICMS]>0 Or
        [Valor Substituicao ICMS  ]>0) And                            
        [Recolhimento Substituicao]<"1"
       Then Checa_Validade=False
            Mensagem("Tipo recolhimento substitui‡Æo inv lido !//Valores substitui‡Æo maior que ZERO !")
    EndIf            

EndSwitch


If [Valor do Frete]>0 
  Then [Frete Incluso na Nota]="+"
  Else [Frete Incluso na Nota]=""
EndIf   

[Valor Mercadoria Liquido ]=[Valor Mercadoria]-[Valor Desconto]

VRNOTA      =[Valor Mercadoria Liquido ]+[Valor IPI                ]+
             [Valor Despesas Acessorias]+
             [Valor Substituicao ICMS  ]+[Valor do Seguro          ]+
             [Valor do Frete           ]+[Valor Servico            ]

If IsBlank([Valor Nota Fiscal]) Then [Valor Nota Fiscal]=0 EndIf
If IsBlank(VRNOTA)              Then VRNOTA=0              EndIf
             
If Format("W12.2,EIC",[Valor Nota Fiscal])<>Format("W12.2,EIC",VRNOTA)
   Then MSG="Valor nota fiscal digitada difere do calculado !// //"
        MSG=MSG+"Digitado ="+Format("W12.2,EIC,AL",[Valor Nota Fiscal])+"//"
        MSG=MSG+"Calculado="+Format("W12.2,EIC,AL",VRNOTA             )+"// //"
        MSG=MSG+"Corrija os dados antes de processeguir !!"
        Mensagem(MSG)
EndIf

Moveto Field NCAMPO

Carrega_Parametros()

Return Checa_Validade
EndProc  ; (Checa_DigitaC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc Verifica_Natureza_Frete()

Switch
  Case [Natureza do Frete]="0" : VSDGNATFRETE="VEND/VENDEDOR"
  Case [Natureza do Frete]="1" : VSDGNATFRETE="VEND/ADQUIR."
  Case [Natureza do Frete]="2" : VSDGNATFRETE="COMP./C/CRED"
  Case [Natureza do Frete]="3" : VSDGNATFRETE="COMP./S/CRED"
  Case [Natureza do Frete]="4" : VSDGNATFRETE="T. ACABADOS"
  Case [Natureza do Frete]="5" : VSDGNATFRETE="T. SEMI-ACAB"
  Case [Natureza do Frete]="9" : VSDGNATFRETE="OUTRAS"
  OtherWise   : VSDGNATFRETE = ""
EndSwitch

If [Codigo do Documento]="CA"   Or 
   [Codigo do Documento]="CT-E" Or
   [Codigo do Documento]="CTA"  Or
   [Codigo do Documento]="CTAC" Or
   [Codigo do Documento]="CTFC" Or
   [Codigo do Documento]="CTRC" Or
   [Codigo do Documento]="NFST" Or
   [Codigo do Documento]="NFSF" 
   Then Return True
   Else Return False
EndIf                       

EndProc ;Verifica_Natureza_Frete()

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc ALIQ_ICMS()

UFO=[NotaEC->UF]
Moveto [UF]
Ativa_Lookup()
Moveto [UF]
Locate [NotaEC->UF]
If RetVal
   Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
   Else UF_ALIQUOTA_ICMS=BlankNum()
EndIf
AICMSUFO=UF_ALIQUOTA_ICMS

Locate UFD
If RetVal
   Then AICMSUFD=[Aliquota de ICMS]
EndIf

KeyPress "ESC"

Moveto [Codigo da Empresa]
Ativa_Lookup()
Moveto [Codigo da Empresa]
Locate [NotaEC->Codigo da Empresa]
If RetVal
   Then Tp_Empresa=[Tipo da Empresa]
   Else Tp_Empresa=""
EndIf
KeyPress "ESC"

EndProc  ; (Aliq_ICMS)

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC,OPCAON
NE=[NotaEC->Numero do Lancamento]
Do_It!

DISPOSITIVO()
If OK<>""
   Then Play PARAM_RELATORIO
EndIf
ClearAll

Monta_Tabelas()
Return True
EndProc

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEI()
FACA_DIGITAF=True

While True
  Moveto "NotaEI"

  Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
  Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
  Moveto [Sequencia do Lancamento]   VCITENS =ImageCCount()

  Moveto [Sequencia do Lancamento]
  End
  NITEM = [Sequencia do Lancamento]
  Down
  Moveto [Sequencia do Lancamento]

  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Sw_Item_Pesquisado=""

  Opcao_Ver    =False
  SetaCorRegistro("Editar")
  While True
                                                              
    TECLA= " Esc=Retornar F7=Paginar Alt+F=Fun‡”es  PgDn/PgUp "

    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","F3","F7","HOME","UP","PGUP","PGDN","PGUP","F8","F5",-33

    
    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F3  ~V~er Ficha           " : " Ver itens modo Ficha             " : "F3",
              "F5  C~o~nsulta            " : " Consultar Tabela Pre‡o           " : "F5",
              "F8  ~R~ecebe Compra       " : " Receber Ordem de Compra          " : "F8",
              "~S~air                    " : " Ignorar op‡äes                   " : "CANCELAR"
            EndMenu
            To MenuVar
            echo off
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf

            RetVal=MenuVar
    EndIf
		
		
		Switch
    Case Retval="F8":
         Del
         RECEBE_COMPRA()
         QuitLoop
    Case RetVal="F3":
         Del
         Moveto [Sequencia do Lancamento]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Sequencia do Lancamento]
         Inicia_Registro()
         DigitaI()
         QuitLoop
    Case Retval="PGDN":
         Del
         Moveto [Sequencia do Lancamento]
         If RecordStatus("New")=True
            Then MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item Ok !")
                 QuitLoop
         EndIf
         CHAVEI=9
         Return
    Case Retval="PGUP" Or RetVal="ESC":
         Del
         CHAVEI=9
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           PAGINA("NotaEI","MR")
           SEQIT=[Sequencia do Lancamento]
           If EDITAR="S"
              Then CHAVEI=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then Ok=""
                           Switch
                             Case CHAVEC=1 : Ok="S"
                             OtherWise     :
                               If Checa_Supervisor()
                                  Then Ok="S"
                               EndIf   
                           EndSwitch
                           If Ok="S"
                              Then If QuerExcluir("")
                                      Then CHAVEI=8
                                           EXCLUSAO_I()
                                      Else UnLockRecord
                                   EndIf
                              Else UnLockRecord
                            EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
         
         
    Case RetVal="F5":
         VSDGEMPRESA=[NotaEC->Codigo da Empresa]
         VSDGTABELA =PARAM_TABELA_PRECO
         Del
         Moveto "NotaEC"
         UnLockRecord
         KeyPress "F7"
         IsLockRecord()
         OP_INSERT_ITEM=True
         If PARAM_EXIBECUSTO="N"
            Then Play "\\Sistemas\\Vendas\\SW_CONSS"
            Else Play "\\Sistemas\\Vendas\\SW_CONS"
         EndIF

         Moveto "NotaEC"
         Moveto [Numero do Lancamento]
         Locate LANCTO
         KeyPress "F7"
         
         IsLockRecord()
         Moveto "NotaEI"

         If Sw_Item_Pesquisado="" Then QuitLoop EndIf

         While True
           Moveto [Sequencia do Lancamento]
           End
           NITEM= [Sequencia do Lancamento]
           Down
           Moveto [Sequencia do Lancamento]
           Seta_Sequencia(NITEM,False)
           If IsLockRecord()
              Then Del
                   Loop
           EndIf
           QuitLoop
         EndWhile
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf

         SEQIT=[Sequencia do Lancamento]
         CHAVEI=1
         [Numero do Lancamento   ]=LANCTO
         [Sequencia do Lancamento]=SEQIT
         [Codigo do Item  ]=Sw_Item_Pesquisado
         Item_Ins_Consulta=True

         Return

         
         
         
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate LANCTO,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down
                 [Numero do Lancamento   ]=LANCTO
                 [Sequencia do Lancamento]=SEQIT
                 UnLockRecord
                 Locate LANCTO,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5

TECLA=" Esc=Retornar  "
MSG_CAMPO=""
Temp=True

If CHAVEI=0
   Then Moveto [Codigo do Item]
        Ativa_Lookup()
        Locate [Notaei->Codigo do Item]
        VSD_I_Referencia=[Referencia]
        KeyPress "ESC"
EndIf

If INICIO_DIALOG
   Then If Sw_Dialog="Custo"
           Then Campo="I_Flag2"
           Else If CHAVEI=0
                   Then If [Edita Descricao do Item]="S"
                           Then Campo="I_Descricao_Item"
                           Else Campo="I_Quantidade"
                        EndIf
                   Else If IsBlank(Sw_Item_Pesquisado)
                           Then Campo="I_OC"
                           Else 
        									      VSD_I_OC     =""
                                VSD_I_OC_Item=0
        									 
        												VSD_I_Codigo_Fornecedor=""
        												CODFORN_ITEM=""
        												CODFORN_OK  =False									 
        									 
        									      Campo="I_Codigo_Fornecedor"
                        EndIf   
                EndIf
        EndIf
        INICIO_DIALOG=False
EndIf
If Opcao_Ver=True Then Campo="I_Seq" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   
   If Evento["KeyCode"] = -33
      Then Echo Normal
           Echo Off
           ShowPopup " Fun‡”es " CENTERED
           "F6 ~V~er Custo              ": " Visualiza o custo do item          " : "F6", 
           "F7 ~A~ltera Localiza‡„o     ": " Altera forma de localizar o item   " : "F7", 
           "~S~air                      " : " Ignorar op‡äes                    " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off  
          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Return
          EndIf                                         
          Evento["KeyCode"]=MenuVar
   EndIf 
   
   Switch
      Case Opcao_Ver=True:
           Temp=False
           Switch
             Case Evento["KeyCode"] =  27:
                  CancelDialog
             OtherWise:
               Mover_Reg=True
               Switch
                 Case Evento["KeyCode"] = -71:
                      If AtFirst()
                         Then Mover_Reg=False Beep
                         Else Home
                      EndIf
                 Case Evento["KeyCode"] = -79:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else End
                      EndIf
                 Case Evento["KeyCode"] = -73:
                      If AtFirst()
                         Then Mover_Reg=False Beep
                         Else Up
                      EndIf
                      If CHAVEI=0
                         Then Moveto [Codigo do Item]
                              Ativa_Lookup()
                              Locate [Notaei->Codigo do Item]
                              VSD_I_Referencia=[Referencia]
                              KeyPress "ESC"
                      EndIf
                 Case Evento["KeyCode"] = -81:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else Down
                      EndIf
                      If CHAVEI=0
                         Then Moveto [Codigo do Item]
                              Ativa_Lookup()
                              Locate [Notaei->Codigo do Item]
                              VSD_I_Referencia=[Referencia]
                              KeyPress "ESC"
                      EndIf
               EndSwitch
               If Mover_Reg=True
                  Then SEQIT=[Sequencia do Lancamento]
                       Inicia_Registro()
               EndIf
           EndSwitch
       Case Evento["KeyCode"] = -64 Or Evento["KeyCode"] = "F6" :
            Temp=False
            Ver_CalcCusto()
            
       Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
            ShowPopup " Alterar Forma de Localizar o Item " CENTERED
              "Por Codigo do ~I~tem       " : " Localiza o item pelo seu c¢digo           " : "LOC_CODITE",
              "Por Codigo do ~F~ornecedor " : " Localiza o item pelo codigo do fornecedor " : "LOC_CODFOR",
              "Por ~R~eferencia do Item   " : " Localiza o item pela sua referencia       " : "LOC_CODREF",
              "Por Codigo de ~B~arra      " : " Localiza o item pelo c¢digo de barra      " : "LOC_CODBAR",
              Separator,
              "~S~air                     " : " Ignorar op‡äes                            " : "CANCELAR"
            EndMenu
            To MenuVar
            Echo Off
            
            If MenuVar="CANCELAR" or MenuVar="Esc"
                Then Return
            EndIf                                         
            RetVal=MenuVar
            LOCALIZA_CODIGO = MenuVar
            
            Switch 
              Case LOCALIZA_CODIGO="LOC_CODITE" : LOCALIZAR_POR="CodItem" 
              Case LOCALIZA_CODIGO="LOC_CODFOR" : LOCALIZAR_POR="CodFor" 
              Case LOCALIZA_CODIGO="LOC_CODREF" : LOCALIZAR_POR="Ref."
              Case LOCALIZA_CODIGO="LOC_CODBAR" : LOCALIZAR_POR="CodBar"   
            EndSwitch                

       Case Evento["KeyCode"] = -66 Or Evento["KeyCode"] = "F8" :

            Switch
              Case Campo="I_BC_ICMS"      : 
                   If VSD_I_AICMS>0
                      Then VSD_I_BC_ICMS     = Round(([NotaEC->Valor Nota Fiscal]-([NotaEC->Valor IPI]+[NotaEC->Valor Substituicao ICMS]))*
                                                                                           (VSD_I_Preco_Total/[NotaEC->Valor Mercadoria]),2)
                           VSD_I_BC_ICMS     =VSD_I_BC_ICMS-((VSD_I_BC_ICMS*VSD_I_RBC_ICMS)*100)
                   EndIf   
              Case Campo="I_Valor_ICMS"   : VSD_I_Valor_ICMS  = Round(((VSD_I_BC_ICMS*VSD_I_AICMS)/100),2)
              
              Case Campo="I_BC_ST":
                   VSD_I_BC_ST  = Round([NotaEC->Valor BCSubstituicao ICMS]*(VSD_I_Preco_Total/[NotaEC->Valor Mercadoria]),2)
              Case Campo="I_Valor_ST":
                   VSD_I_Valor_ST  = Round([NotaEC->Valor Substituicao ICMS]*(VSD_I_Preco_Total/[NotaEC->Valor Mercadoria]),2)

              Case Campo="I_BC_IPI"       : VSD_I_BC_IPI      = VSD_I_Preco_Total
              Case Campo="I_Valor_IPI"    : VSD_I_Valor_IPI   = Round(((VSD_I_BC_IPI*VSD_I_AIPI)/100),2)

              Case Campo="I_BC_ISSQN"     : VSD_I_BC_ISSQN    = VSD_I_Preco_Total
              Case Campo="I_Valor_ISSQN"  : VSD_I_Valor_ISSQN = Round(((VSD_I_BC_ISSQN*VSD_I_AISSQN)/100),2)

              Case Campo="I_BC_PIS"       : 
                   If VSD_I_APIS>0
                      Then VSD_I_BC_PIS      = VSD_I_Preco_Total
                           VSD_I_BC_PIS      = VSD_I_BC_PIS-Round((VSD_I_Preco_Total*(([NotaEC->Valor Desconto]/[NotaEC->Valor Mercadoria])*100))/100,2)
                           VSD_I_BC_PIS      = VSD_I_BC_PIS+Round((VSD_I_Preco_Total*((([NotaEC->Valor do Frete]+[NotaEC->Valor do Seguro]+
                                                                                        [NotaEC->Valor Despesas Acessorias])/[NotaEC->Valor Mercadoria])*100))/100,2)
                           Switch
                             Case SYS_CODIGO_CLIENTE="0173":
                               VSD_I_BC_PIS      = VSD_I_BC_PIS+VSD_I_Valor_IPI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VSD_I_BC_PIS      = VSD_I_BC_PIS+VSD_I_Valor_ST   ; removido em 06/12/12 pela visao
                             OtherWise                     :
                               If Search("COMERCIO",ATIVEMPRESA)>0
                                  Then VSD_I_BC_PIS      = VSD_I_BC_PIS+VSD_I_Valor_IPI
                               EndIf
                           EndSwitch
                   EndIf   
              Case Campo="I_Valor_PIS"    : VSD_I_Valor_PIS   = Round(((VSD_I_BC_PIS*VSD_I_APIS)/100),2)

              Case Campo="I_BC_COFINS"    :
                   If VSD_I_ACOFINS>0
                      Then VSD_I_BC_COFINS   = VSD_I_Preco_Total
                           VSD_I_BC_COFINS   = VSD_I_BC_COFINS-Round((VSD_I_Preco_Total*(([NotaEC->Valor Desconto]/[NotaEC->Valor Mercadoria])*100))/100,2)
                           VSD_I_BC_COFINS   = VSD_I_BC_COFINS+Round((VSD_I_Preco_Total*((([NotaEC->Valor do Frete]+[NotaEC->Valor do Seguro]+
                                                                                           [NotaEC->Valor Despesas Acessorias])/[NotaEC->Valor Mercadoria])*100))/100,2)
                           Switch
                             Case SYS_CODIGO_CLIENTE="0173":
                               VSD_I_BC_COFINS   = VSD_I_BC_COFINS+VSD_I_Valor_IPI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;VSD_I_BC_COFINS   = VSD_I_BC_COFINS+VSD_I_Valor_ST  ; removido em 06/12/12 pela visao
                             OtherWise                     :
                               If Search("COMERCIO",ATIVEMPRESA)>0
                                  Then VSD_I_BC_COFINS   = VSD_I_BC_COFINS+VSD_I_Valor_IPI
                               EndIf
                           EndSwitch
                   EndIf   

              Case Campo="I_Valor_COFINS" : VSD_I_Valor_COFINS= Round(((VSD_I_BC_COFINS*VSD_I_ACOFINS)/100),2)
            EndSwitch

       Case Evento["KeyCode"] = 9 Or
            Evento["KeyCode"] = -15:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            Ok=""
            Switch
              Case CHAVEI=0 And CHAVEC=1 : Ok="S"
              Case CHAVEI=0 And CHAVEC=0 :
                If Checa_Supervisor()
                   Then Ok="S"
                EndIf   
            EndSwitch
            If Ok="S"
               Then If QuerEXcluir("")
                       Then CHAVEI=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="I_Codigo_Item"       Or
               Campo="I_Tipo_Item"         Or
               Campo="I_Tabela_Preco"      Or
               Campo="I_UN_Item"           Or
               Campo="I_Codigo_Cor_Tecido" Or
               Campo="I_CCusto"            Or 
               Campo="I_CFOP"              Or
               Campo="I_CST_IPI"           Or
               Campo="I_CST_Item"          Or           
               Campo="I_TISSQN"            Or      
               Campo="I_CST_PIS"           Or
               Campo="I_CST_COFINS"        Or
               Campo="I_MUNSERV"           Or
               Campo="I_CSOSN"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="I_Codigo_Item"       Then Moveto [Codigo do Item]       EndIf
                    If Campo="I_Tipo_Item"         Then Moveto [Tipo do Item]         EndIf
                    If Campo="I_Tabela_Preco"      Then Moveto [Lookup_Tabela_Preco]  EndIf
                    If Campo="I_UN_Item"           Then Moveto [Unidade Entrada]      EndIf
                    If Campo="I_Codigo_Cor_Tecido" Then Moveto [Codigo da Cor_Tecido] EndIf
                    If Campo="I_CCusto"            Then Moveto [Codigo CCusto       ] EndIf
                    If Campo="I_CFOP"              Then Moveto [CFO                 ] EndIf


                    If Campo="I_MUNSERV"             
                       Then FI_MUNSERVAnt=VSD_I_MUNSERV
                            FI_UFSERVAnt =VSD_I_UFSERV
                            FC_MUNSERVAnt=[NotaEC->Cidade]
                            FC_UFSERVAnt =[NotaEC->UF]
                            Moveto "NotaEC"
                            Moveto [Cidade]  
                    EndIf

                    Switch
                      Case Campo="I_CST_Item":          
                        CSTNew=VSD_I_CST_Item 
                        VSD_I_CST_Item=Checa_CST("ICMS","E","")
                        If IsBlank(VSD_I_CST_Item)
                           Then VSD_I_CST_Item=CSTNew
                           Else [Tipo Tributacao]=VSD_I_CST_Item
                        EndIf
                        Release Vars CSTNew
                      Case Campo="I_CST_IPI":          
                        CSTNew=VSD_I_CST_IPI 
                        VSD_I_CST_IPI=Checa_CST("IPI","E","")
                        If IsBlank(VSD_I_CST_IPI)
                           Then VSD_I_CST_IPI=CSTNew
                           Else [IPI_CST]=VSD_I_CST_IPI
                        EndIf
                        Release Vars CSTNew
                      Case Campo="I_CST_PIS":          
                        CSTNew=VSD_I_CST_PIS 
                        VSD_I_CST_PIS=Checa_CST("PIS","E","")
                        If IsBlank(VSD_I_CST_PIS)
                           Then VSD_I_CST_PIS=CSTNew
                           Else [PIS_CST]=VSD_I_CST_PIS
                        EndIf
                        Release Vars CSTNew
                      Case Campo="I_CST_COFINS":          
                        CSTNew=VSD_I_CST_COFINS 
                        VSD_I_CST_COFINS=Checa_CST("COFINS","E","")
                        If IsBlank(VSD_I_CST_COFINS)
                           Then VSD_I_CST_COFINS=CSTNew
                           Else [COFINS_CST]=VSD_I_CST_COFINS
                        EndIf
                        Release Vars CSTNew
                      Case Campo="I_CSOSN":     
                        CSTNew=VSD_I_CSOSN 
                        VSD_I_CSOSN=Checa_CSOSN2("","")
                        If IsBlank(VSD_I_CSOSN)
                           Then VSD_I_CSOSN=CSTNew
                           Else [CSOSN    ]=VSD_I_CSOSN
                        EndIf
                        Release Vars CSTNew                 
                      Case Campo="I_TISSQN":          
                        CSTNew=VSD_I_TISSQN 
                        VSD_I_TISSQN=Checa_CST("ISSQN","","")
                        If IsBlank(VSD_I_TISSQN)
                           Then VSD_I_TISSQN         =CSTNew
                           Else [Tributacao de ISSQN]=VSD_I_TISSQN        
                        EndIf
                        Release Vars CSTNew
                      OtherWise:         
                        If ConsultaF1()
                           Then If Campo="I_Codigo_Item"
                                   Then VSD_I_MVA =Reg_ConsultaF1["MVA_1"]
                                EndIf
                                Switch
                                  Case Campo="I_MUNSERV":               
                                        [NotaEC->Cidade   ]=FC_MUNSERVAnt
                                        [NotaEC->UF       ]=FC_UFSERVAnt
                                        Moveto "NotaEI"
                                        [NotaEI->ISSQN_Municipio]=Reg_ConsultaF1["Codigo_Cidade"]
                                        [NotaEI->ISSQN_UF       ]=Reg_ConsultaF1["UF"] 
                                EndSwitch
                                
                                If Campo="I_Codigo_Item" And SYS_CODIGO_CLIENTE="0319"
                                   Then [Fator de Conversao]=1
                                EndIf 
                                
                           Else If Campo="I_MUNSERV"
                                   Then Moveto "NotaEI"
                                EndIf        
                        EndIf
                    EndSwitch                          
  
                    Window Select JANELA
                    WinArray5["FLOATING"]=True
                    Window SetAttributes JANELA From WinArray5

                    echo Normal
                    echo off

                    If Campo="I_Codigo_Item"
                       Then VSD_I_Codigo_Item    =[Codigo do Item       ]
                            VSD_I_Descricao_Item =[Descricao do Item    ]
                            VSD_I_UN_Item        =[Unidade Entrada      ]
                            VSD_I_Unidade_Interna=[Unidade Interna      ]
                            VSD_I_Tipo_Item      =[Tipo do Item         ]
                            VSD_I_Fator_Conversao=[Fator de Conversao   ]
                            VSD_I_CST_Item       =[Tipo Tributacao      ]
                            VSD_I_CST_IPI        =[IPI_CST              ]
                            Campo="I_Codigo_Item"
                    EndIf
                    If Campo="I_Tipo_Item"
                       Then VSD_I_Tipo_Item     =[Tipo do Item     ]
                            Campo="I_Tipo_Item"
                    EndIf
                    If Campo="I_Tabela_Preco"
                       Then VSD_I_Tabela_Preco = [Lookup_Tabela_Preco]
                            Campo="I_Tabela_Preco"
                    EndIf
                    If Campo="I_UN_Item"
                       Then VSD_I_UN_Item     =[Unidade Entrada]
                            Campo="I_UN_Item"
                    EndIf
                    If Campo="I_Codigo_Cor_Tecido"
                       Then VSD_I_Codigo_Cor_Tecido   =[Codigo da Cor_Tecido   ]
                            VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                            Campo="I_Codigo_Cor_Tecido"
                   EndIf
                   If Campo="I_CCusto"
                      Then VSD_I_CCusto          =[Codigo CCusto   ]
                           VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                           Campo="I_CCusto"
                   EndIf
                   If Campo="I_CFOP"
                      Then VSD_I_CFOP            =[CFO             ]
                           Campo="I_CFOP"
                   EndIf

                   If Campo="I_MUNSERV"
                      Then VSD_I_MUNSERV=[NotaEI->ISSQN_Municipio]
                           VSD_I_UFSERV =[NotaEI->ISSQN_UF       ] 
                           Campo="I_MUNSERV"
                           Release Vars FI_MUNSERVAnt,FC_MUNSERVAnt,FI_UFSERVAnt,FC_UFSERVAnt
                   EndIf

                   Moveto "NotaeI"
                   RefreshDialog
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 27: 
           Switch
             Case Campo="I_OC":
                  If QuerDesfazer("")
                     Then CHAVEI=9
                          Del
                          CancelDialog
                  Endif
             Case Campo="I_OC_Item":
                  Campo="I_OC"
             Case Campo="I_Codigo_Fornecedor":
                  If Not IsBlank([Numero da OC])
                     Then Campo="I_OC_Item"
                     Else If QuerDesfazer("")
                             Then Del
                                  CHAVEI=9
                                  CancelDialog
                          EndIf
                  EndIf
             Case Campo="I_Codigo_Item":
                  Campo="I_Codigo_Fornecedor"
             Case Campo="I_Descricao_Item":
                  If CHAVEI=1
                     Then Campo="I_Codigo_Item"
                     Else If QuerDesfazer("")
                             Then CHAVEI=9
                                  CopyFromArray RegItem
                                  UnLockRecord
                                  CancelDialog
                          EndIf
                  EndIf
             Case Campo="I_Tipo_Item":
                  Campo="I_Descricao_Item"
             Case Campo="I_Quantidade":
                  If CHAVEI=1
                     Then If IsBlank(VSD_I_Codigo_Item)
                             Then Campo="I_Tipo_Item"
                             Else Campo="I_Codigo_Item"
                          EndIf
                     Else If QuerDesfazer("")
                             Then CHAVEI=9
                                  CopyFromArray RegItem
                                  CancelDialog
                          EndIf
                  EndIf
             Case Campo="I_UN_Item":
                  Campo="I_Quantidade"
             Case Campo="I_Preco_Unitario":  
                  If IsBlank(VSD_I_Codigo_Item)
                     Then Campo="I_UN_Item"
                     Else Campo="I_Quantidade"
                  EndIf
             Case Campo="I_Taxa_Desconto_Unitario" Or
                  Campo="I_Valor_Desconto_Unitario" Or
                  Campo="I_Preco_Total":        Campo="I_Preco_Unitario"

             Case Campo="I_CST_Item"          : Campo="I_Preco_Total"
     
             Case Campo="I_RBC_ICMS"   Or
                  Campo="I_BC_ICMS"    Or
                  Campo="I_AICMS"      Or
                  Campo="I_Valor_ICMS" Or
                  Campo="I_CSOSN"       : Campo="I_CST_Item"

             Case Campo="I_BC_ST" Or
                  Campo="I_Valor_ST"          : Campo="I_CSOSN"

             Case Campo="I_CST_IPI"           : Campo="I_CSOSN"

             Case Campo="I_MVA"               : Campo="I_CSOSN"
             
             Case Campo="I_BC_IPI" Or
                  Campo="I_AIPI"   Or
                  Campo="I_Valor_IPI"         : Campo="I_CST_IPI"

            Case Campo="I_TISSQN"             : Campo="I_CST_IPI"
            Case Campo="I_BC_ISSQN" Or
                 Campo="I_AISSQN" Or
                 Campo="I_Valor_ISSQN"        : Campo="I_TISSQN"

            Case Campo="I_CST_PIS"            : 
        				 If VSD_I_Tipo_Item="C"
        				    Then Campo="I_TISSQN"
        				    Else Campo="I_CST_IPI"
        				 EndIf

            Case Campo="I_BC_PIS" Or
                 Campo="I_APIS" Or
                 Campo="I_Valor_PIS"         : Campo="I_CST_PIS"

            Case Campo="I_CST_COFINS"        : Campo="I_CST_PIS"
            Case Campo="I_BC_COFINS" Or
                 Campo="I_ACOFINS"   Or
                 Campo="I_Valor_COFINS"      : Campo="I_CST_COFINS"

            Case Campo="I_CFOP"              : Campo="I_CST_COFINS"         
            Case Campo="I_NCM"                Or
                 Campo="I_Acrescimos_Desctos" Or
                 Campo="I_CDSERV"             Or
                 Campo="I_MUNSERV"             : Campo="I_CFOP"

             Case Campo="I_Fator_Conversao"      : Campo="I_Acrescimos_Desctos"
             Case Campo="I_Quantidade_Convertida": Campo="I_Fator_Conversao"
             Case Campo="I_CCusto"               : Campo="I_Fator_Conversao"


           Case Campo="I_Tabela_Preco"   Or
                  Campo="I_Indice_PrVenda" Or
                  Campo="I_Preco_VendaOk"  Or
                  Campo="I_Flag"              : Campo="I_CCusto"

             Case Campo="I_Flag2"             : AcceptDialog
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="I_OC":
                  VSD_I_OC=AlinhM(ControlValue("I_OC"),6)
                  If VSD_I_OC="000000"
                     Then VSD_I_OC     =""
                          VSD_I_OC_Item=0
													Campo="I_Codigo_Fornecedor"
                     Else Campo="I_OC_Item"
                  EndIf
             Case Campo="I_OC_Item":
                  VSD_I_OC_Item=ControlValue("I_OC_Item")
                  If VSD_I_OC_Item=BlankNum()
                     Then VSD_I_OC_Item=0
                  EndIf
                  If Not (VSD_I_OC_Item=Blanknum())
                     Then Moveto "NotaEC"
                          [Numero da OC Link]=VSD_I_OC
                          Moveto "\\Sistemas\\Compras\\OCI"
                          Moveto [Item da OC]
                          Locate NumVal(VSD_I_OC_Item)
                          If Not RetVal
                             Then Mensagem("Item n„o Encontrado !")
                                  Moveto "NotaEI"
                             Else If ([Quantidade]-[Quantidade Entregue])<=0
                                     Then Mensagem("Item da OC c/ Saldo todo Entregue !")
                                  EndIf
                                  Moveto "NotaEI"
                                  Copia_COMPRA_LANCTO()
                                  Registro_Item("Ler")
                                  Campo="I_Quantidade"
                          EndIf
										 Else Campo="I_Codigo_Fornecedor"
                  EndIf
                     
             Case Campo="I_Codigo_Fornecedor":
                  VSD_I_Codigo_Fornecedor=ControlValue("I_Codigo_Fornecedor")
                  
                  CODFORN_ITEM=""
                  CODFORN_OK  =False
                  If Not IsBlank(VSD_I_Codigo_Fornecedor)
										 Then Moveto [Lookup_Codigo_Fornecedor]
                          Ativa_Lookup()

													Moveto [Codigo]
													Locate [NotaEC->Codigo], VSD_I_Codigo_Fornecedor
                          If RetVal
														 Then CopyToArray REG_CODFORN
																	VSD_I_Codigo_Item=[Codigo do Item]
																	CODFORN_ITEM		 =[Codigo do Item]
																	CODFORN_OK=True
                          EndIf
                          KeyPress "ESC"
                          Echo Off

                          Moveto "NotaeI"
                          Moveto [Codigo do Item]

                          If CODFORN_OK
                             Then Moveto [Codigo do Item]
                                  Ativa_Lookup()
                                  Moveto [Codigo do Item]
                                  Locate CODFORN_ITEM
                                  If RetVal
                                     Then VSD_I_Codigo_Item         =[Codigo do Item       ]
                                          KeyPress "ESC"

                                          Moveto "NotaeI"
                                          [Codigo do Item          ]=VSD_I_Codigo_Item
                                          VSD_I_Indice_PrVenda =[Indice Preco de Venda]
                                          VSD_I_TX_ICMS_SAIDA  =[Aliquota de ICMS          ]
                                          VSD_I_RD_ICMS_SAIDA  =[Aliquota Reduzida BCICMS  ]

                                          [Codigo_Fornecedor       ]=VSD_I_Codigo_Fornecedor
                                          [Unidade Entrada         ]=REG_CODFORN["Unidade Entrada"]
                                          [Tributacao de IPI       ]=REG_CODFORN["Tributacao de IPI"]
                                          [Aliquota Reduzida BCIPI ]=REG_CODFORN["Aliquota Reduzida BCIPI"]
                                          [Aliquota de IPI         ]=REG_CODFORN["Aliquota de IPI"]
                                          [Tributacao de ICMS      ]=REG_CODFORN["Tributacao de ICMS"]
                                          [Aliquota Reduzida BCICMS]=REG_CODFORN["Aliquota Reduzida BCICMS"]
                                          [Aliquota de ICMS        ]=REG_CODFORN["Aliquota de ICMS"]
                                          [Fator de Conversao      ]=REG_CODFORN["Fator de Conversao"]
                                          [MVA                     ]=REG_CODFORN["MVA"]
                                          [ICMS UF_ORIGEM          ]=REG_CODFORN["ICMS UF_ORIGEM"]
                                          [Tipo Tributacao         ]=REG_CODFORN["Tipo Tributacao"]
                                          [IPI_CST                 ]=REG_CODFORN["IPI_CST"]
                                          [CFO                     ]=REG_CODFORN["CFO"]

                                          If IsBlank([ICMS UF_ORIGEM ]) Or
                                             [ICMS UF_ORIGEM ]=0
                                             Then [ICMS UF_ORIGEM ]=AICMSUFO
                                          EndIf
                                          [ICMS UF_DESTINO]=AICMSUFD

                                          Registro_Item("Ler")
                                          If CHECA_ESTOQUE()
                                             Then If [NotaEC->Tipo de Operacao]="D" Or
                                                     [NotaEC->Tipo de Operacao]="T"
                                                     Then [Custo Medio Unitario]=NDecimal([SdEstq->Custo Total Atual]/[SdEstq->Saldo Atual],5)
                                                          If [Custo Medio Unitario]=0
                                                             Then [Custo Medio Unitario]=[SdEstq->Ultimo Custo Atual]
                                                          EndIf
                                                          VSD_I_Custo_Unitario=[Custo Medio Unitario]
                                                  EndIf

                                                  VSD_I_Tabela_Preco = PARAM_TABELA_PRECO
                                                  If [Edita Descricao do Item]="S"
                                                     Then Campo="I_Descricao_Item"
                                                     Else Campo="I_Quantidade"
                                                  EndIf
                                          EndIf
                                     Else VSD_I_Codigo_Item=""
                                          KeyPress "ESC"
                                          Campo="I_Codigo_Item"
                                  EndIf
                             Else Campo="I_Codigo_Item"
                          EndIf
                     Else Campo="I_Codigo_Item"
                  EndIf
                  Echo Off     
						 Case Campo="I_Codigo_Item":
                  VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                  If IsBlank(VSD_I_Codigo_Item)
                     Then Campo="I_Descricao_Item"
                     Else Moveto [Codigo do Item]
                          Ativa_Lookup()
                          Localizar_Item_Por()         
                          If RetVal
                             Then VSD_I_Referencia     =[Referencia]
                                  VSD_I_Codigo_Item    =[Codigo do Item       ]
                                  VSD_I_Indice_PrVenda =[Indice Preco de Venda]
                                  VSD_I_TX_ICMS_SAIDA  =[Aliquota de ICMS          ]
                                  VSD_I_RD_ICMS_SAIDA  =[Aliquota Reduzida BCICMS  ]
                                  VSD_I_MVA            =[MVA_1]
                                  If [Inativo]="S"
                                     Then Mensagem("Este item://"+[Codigo do Item]+" "+[Descricao do Item]+"//"+"Referˆncia: "+[Referencia]+"//"+
                                                  "Fornecedor: "+[Codigo Fornecedor]+"// // esta inativo !")
                                          KeyPress "ESC"
                                     Else KeyPress "ESC"
                                          Moveto "NotaeI"
                                          [Codigo do Item]=VSD_I_Codigo_Item
                                          [MVA           ]=VSD_I_MVA
                                          If ([Tributacao de ICMS]="D" Or SubStr([Tipo Tributacao],2,2)="10") And Not CODFORN_OK
                                             Then [Aliquota de ICMS]=UF_ALIQUOTA_ICMS
                                          EndIf
                                          [CFO                     ]=[NotaEC->CFO]
                                          [ICMS UF_ORIGEM ]=AICMSUFO
                                          [ICMS UF_DESTINO]=AICMSUFD
                                          [IPI_CST        ]=""

                                          VSD_I_CSOSN=SubStr([Tipo Tributacao],1,1)+[CSOSN]

                                          If SYS_CODIGO_CLIENTE="0319"
                                             Then [Fator de Conversao]=1
                                          EndIf 

                                          If [IPI_CST   ]>="50" Then [IPI_CST   ]="" Endif
                                          If [PIS_CST   ]< "50" Then [PIS_CST   ]="" Endif
                                          If [COFINS_CST]< "50" Then [COFINS_CST]="" Endif

                                          Registro_Item("Ler")      
                                          VSD_I_AIPI   =BlankNum() ; Al¡quota de IPI
                                          VSD_I_APIS   =BlankNum() ; Al¡quota de PIS
                                          VSD_I_ACOFINS=BlankNum() ; Al¡quota de COFIN
                                          
                                          If CHECA_ESTOQUE()
                                             Then If [NotaEC->Tipo de Operacao]="D" Or
                                                     [NotaEC->Tipo de Operacao]="T"
                                                     Then [Custo Medio Unitario]=NDecimal([SdEstq->Custo Total Atual]/[SdEstq->Saldo Atual],5)
                                                          If [Custo Medio Unitario]=0
                                                             Then [Custo Medio Unitario]=[SdEstq->Ultimo Custo Atual]
                                                          EndIf
                                                          VSD_I_Custo_Unitario=[Custo Medio Unitario]
                                                  EndIf

                                                  VSD_I_Tabela_Preco = PARAM_TABELA_PRECO                                                 
                                                 
                                                  If [Edita Descricao do Item]="S"
                                                     Then Campo="I_Descricao_Item"
                                                     Else Campo="I_Quantidade"
                                                  EndIf
                                          EndIf
                                  EndIf
                             Else Mensagem("Item n„o Cadastrado !")
                                  VSD_I_Codigo_Item   =""
                                  VSD_I_Descricao_Item=""
                                  VSD_I_UN_Item       =""
                                  VSD_I_Tipo_Item     =""
                                  VSD_I_CST_Item      =""
                                  VSD_I_CST_IPI       =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_Descricao_Item":
                  VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                  Campo="I_Tipo_Item"
             Case Campo="I_Tipo_Item":
                  VSD_I_Tipo_Item=ControlValue("I_Tipo_Item")
                  If Not IsBlank(VSD_I_Tipo_Item)
                     Then Moveto [Tipo do Item]
                          Ativa_Lookup()
                          Moveto [Tipo do Item]
                          Locate VSD_I_Tipo_Item
                          If RetVal
                             Then VSD_I_Tipo_Item=[Tipo do Item]
                                  KeyPress "ESC"
                                  Moveto "NotaeI"
                                  [Tipo do Item]=VSD_I_Tipo_Item

                                  Campo="I_Quantidade"
                             Else Mensagem("Tipo do Item n„o Cadastrado !")
                                  VSD_I_Tipo_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_Quantidade":
                  VSD_I_Quantidade=ControlValue("I_Quantidade")
                  [Quantidade]=VSD_I_Quantidade
                  If CHECA_ESTOQUE()
                     Then Campo="I_UN_Item"
                  EndIf

                  If VSD_I_Fator_Conversao<>0
                     Then If Not IsBlank(VSD_I_Fator_Conversao)
                             Then
                                  If VSD_I_Fator_Conversao<1
                                     Then VSD_I_Quantidade_Convertida=Round(VSD_I_Quantidade*VSD_I_Fator_Conversao,0)
                                     Else VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao
                                  EndIf
                          EndIf
                  EndIf

             Case Campo="I_UN_Item":
                  VSD_I_UN_Item=ControlValue("I_UN_Item")
                  If Not IsBlank(VSD_I_UN_Item)
                     Then Moveto [Unidade Entrada]
                          Ativa_Lookup()
                          Moveto [Sigla da Unidade]
                          Locate VSD_I_UN_Item
                          If RetVal
                             Then VSD_I_UN_Item=[Sigla da Unidade]
                                  KeyPress "ESC"
                                  Moveto "NotaEI"
                                  [Unidade Entrada]=VSD_I_UN_Item
                                  Campo="I_Preco_Unitario"
                             Else Mensagem("Unidade n„o Cadastrada !")
                                  VSD_I_UN_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_Preco_Unitario":
                  VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                  If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                     Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                     Else If VSD_I_Preco_Unitario>0
                             Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                          EndIf
                 EndIf
                 Campo="I_Taxa_Desconto_Unitario"
             Case Campo="I_Taxa_Desconto_Unitario":
                  VSD_I_Taxa_Desconto_Unitario=ControlValue("I_Taxa_Desconto_Unitario")
                  If VSD_I_Taxa_Desconto_Unitario>0
                     Then VSD_I_Valor_Desconto_Unitario=NDecimal((VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100,6)
                          Campo="I_Preco_Total"
                     Else Campo="I_Valor_Desconto_Unitario"
                  EndIf
                  If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                     Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                     Else If VSD_I_Preco_Unitario>0
                             Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                          EndIf
                 EndIf
             Case Campo="I_Valor_Desconto_Unitario":
                  VSD_I_Valor_Desconto_Unitario=ControlValue("I_Valor_Desconto_Unitario")
                  Campo="I_Preco_Total"
                  If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                     Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                     Else If VSD_I_Preco_Unitario>0
                             Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                          EndIf
                  EndIf
             Case Campo="I_Preco_Total":
                  VSD_I_Preco_Total=ControlValue("I_Preco_Total")
                  Campo="I_CST_Item"

             Case Campo="I_CST_Item":
                  VSD_I_CST_Item=ControlValue("I_CST_Item")
                  If Not IsBlank(VSD_I_CST_Item)
                     Then TribCST=Checa_CST("ICMS","E",VSD_I_CST_Item)
                          If SubStr(VSD_I_CST_Item,1,1)<>"0"  And
            								 SubStr(VSD_I_CST_Item,1,1)<>"1"  And
            								 SubStr(VSD_I_CST_Item,1,1)<>"2" 
                              Then Mensagem("CST inv lido para tipo de tributa‡„o de ICMS !")
                                   VSD_I_CST_Item=""
                          EndIf                             
                          If TribCST<>""
                             Then TribCST=SubStr(VSD_I_CST_Item,2,2)
                                  Switch
                                    Case (TribCST="00")                  : 
                                         VSD_I_TICMS="D"
                                         VSD_I_RBC_ICMS  =BlankNum()

                                         VSD_I_BC_ST   =BlankNum()
                                         VSD_I_MVA     =BlankNum()
                                         VSD_I_Valor_ST=BlankNum()

                                         Campo="I_AICMS"

                                    Case (TribCST="10")                  : 
                                         VSD_I_TICMS="S"
                                         VSD_I_RBC_ICMS  =BlankNum()
                                         
                                         Campo="I_AICMS"

                                    Case (TribCST="20")                  : 
                                         VSD_I_TICMS="D"

                                         VSD_I_BC_ST   =BlankNum()
                                         VSD_I_MVA     =BlankNum()
                                         VSD_I_Valor_ST=BlankNum()

                                         Campo="I_RBC_ICMS"

                                    Case (TribCST="30")  : 
                                         VSD_I_TICMS="S"
                                         VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()

                                         CalcImposto(Campo)
                                         ;Campo="I_BC_ST"
                                         Campo="I_CSOSN"
                                         
                                    Case (TribCST="40")                  :  
                                         VSD_I_TICMS="I"

                                         VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()

                                         VSD_I_BC_ST   =BlankNum()
                                         VSD_I_MVA     =BlankNum()
                                         VSD_I_Valor_ST=BlankNum()

                                         ;Campo="I_CST_IPI"
                                         Campo="I_CSOSN"
                                         
                                    Case (TribCST="41")                  : 
                                         VSD_I_TICMS="N"

                                         VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()

                                         VSD_I_BC_ST   =BlankNum()
                                         VSD_I_MVA     =BlankNum()
                                         VSD_I_Valor_ST=BlankNum()

                                         ;Campo="I_CST_IPI"
                                         Campo="I_CSOSN"
                                         
                                    Case (TribCST="50" Or TribCST="51")  : 
                                         VSD_I_TICMS="O"

                                         VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()

                                         VSD_I_BC_ST   =BlankNum()
                                         VSD_I_MVA     =BlankNum()
                                         VSD_I_Valor_ST=BlankNum()

                                         ;Campo="I_CST_IPI"
                                         Campo="I_CSOSN"
                                         
                                    Case (TribCST="60")                  :
                                         VSD_I_TICMS="S"

                                        ;VSD_I_RBC_ICMS  =BlankNum()
                                        ;VSD_I_BC_ICMS   =BlankNum()
                                        ;VSD_I_AICMS     =BlankNum()
                                        ;VSD_I_Valor_ICMS=BlankNum()

                                         CalcImposto(Campo)
                                         ;Campo="I_BC_ST"
                                         ;Campo="I_CSOSN"
                                         Campo="I_RBC_ICMS"

                                    Case (TribCST="70")                  : 
                                         VSD_I_TICMS="S"

                                         Campo="I_RBC_ICMS"

                                    Case (TribCST="90")                  : 
                                         VSD_I_TICMS="O"

                                         Campo="I_RBC_ICMS"           
                                          
                                  EndSwitch
                          EndIf
                 EndIf                                              
            Case Campo="I_RBC_ICMS":
                 VSD_I_RBC_ICMS=ControlValue("I_RBC_ICMS")
                 Campo="I_AICMS"
            Case Campo="I_AICMS":
                 VSD_I_AICMS=ControlValue("I_AICMS")
                 CalcImposto(Campo)
                 Campo="I_BC_ICMS"
            Case Campo="I_BC_ICMS":
                 VSD_I_BC_ICMS=ControlValue("I_BC_ICMS")
                 Campo="I_Valor_ICMS"
            Case Campo="I_Valor_ICMS":
                 VSD_I_Valor_ICMS=ControlValue("I_Valor_ICMS")   
                 Campo="I_CSOSN"
            Case Campo="I_CSOSN":
                 VSD_I_CSOSN=ControlValue("I_CSOSN")
                 TribCST=SubStr(VSD_I_CST_Item,2,2)
                 Switch
                   Case TribCST="10"       Or 
                        TribCST="30"       Or 
                        TribCST="60"       Or 
                        TribCST="70"       Or 
                        TribCST="90"        : Campo="I_MVA"    
                   OtherWise                : VSD_I_BC_ST   =BlankNum()
                                              VSD_I_MVA     =BlankNum()
                                              VSD_I_Valor_ST=BlankNum() 
                                              Campo="I_CST_IPI"      
                 EndSwitch 
                 If IsBlank(VSD_I_CSOSN)
                    Then If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                            Then Campo="I_CSOSN"
                            Else VSD_I_CSOSN="0900"
                         EndIf    
                    Else TribCST=SubStr(Checa_CSOSN2("",VSD_I_CSOSN),2,3) 
                         If TribCST=""
                            Then Campo="I_CSOSN" 
                         EndIf     
                 EndIf

            Case Campo="I_MVA":
                 VSD_I_MVA=ControlValue("I_MVA")
                 TribCST=SubStr(VSD_I_CST_Item,2,2)
                 Campo="I_BC_ST"                 
            Case Campo="I_BC_ST":
                 VSD_I_BC_ST=ControlValue("I_BC_ST")
                 Campo="I_Valor_ST"
            Case Campo="I_Valor_ST":
                 VSD_I_Valor_ST=ControlValue("I_Valor_ST")
                 Campo="I_CST_IPI"
            Case Campo="I_CST_IPI":
                 VSD_I_CST_IPI=ControlValue("I_CST_IPI")

                 If (VSD_I_BC_ST>0 Or VSD_I_Valor_ST>0) And
                     VSD_I_Tipo_Item<>"P"                    
                    Then 
                         If Search("10",VSD_I_CST_Item)>0 Or
                            Search("30",VSD_I_CST_Item)>0 Or
                            Search("70",VSD_I_CST_Item)>0
                            Then MSG=    "Item com substitui‡Æo tribut ria deve usar CST ICMS://" 
                                 MSG=MSG+"[60] COBRADO ANTERIORMENTE POR ST. // //Verificar o cadastro do produto com o supervisor!"
                                 Mensagem(MSG)
                         EndIf   

                         If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                            Then
                                 If Search("201",VSD_I_CSOSN)>0 Or
                                    Search("202",VSD_I_CSOSN)>0 Or
                                    Search("203",VSD_I_CSOSN)>0
                                    Then MSG=    "Item com substitui‡Æo tribut ria deve usar CSOSN ICMS://" 
                                         MSG=MSG+"[500] COBRADO ANTERIORMENTE POR ST. // //Verificar o cadastro do produto com o supervisor!"
                                         Mensagem(MSG)
                                 EndIf   
                         EndIf   
                 EndIf    

                 If Not IsBlank(VSD_I_CST_IPI)
                    Then TribCST=Checa_CST("IPI","E",VSD_I_CST_IPI)
                         If TribCST<>""
                            Then TribCST=VSD_I_CST_IPI
								                 Switch
                                  Case (TribCST="00" Or TribCST="01"):
                                       VSD_I_TIPI="D" 

                                       Campo="I_AIPI"
                                       
                                  Case (TribCST="02")                : 
                                       VSD_I_TIPI="I"

                                       VSD_I_AIPI     =BlankNum()
                                       VSD_I_BC_IPI   =BlankNum()
                                       VSD_I_Valor_IPI=BlankNum()
                                       
                                       Campo="I_TISSQN"

                                  Case (TribCST="03")                : 
                                       VSD_I_TIPI="N"

                                       VSD_I_AIPI     =BlankNum()
                                       VSD_I_BC_IPI   =BlankNum()
                                       VSD_I_Valor_IPI=BlankNum()
                                       
                                       Campo="I_TISSQN"

                                  Case (TribCST="04" Or TribCST="05"): 
                                       VSD_I_TIPI="O"

                                       VSD_I_AIPI     =BlankNum()
                                       VSD_I_BC_IPI   =BlankNum()
                                       VSD_I_Valor_IPI=BlankNum()

                                       Campo="I_TISSQN"
                                       
                                  Case (TribCST="49")                :
                                       VSD_I_TIPI="O" 

                                       Campo="I_AIPI"
                                       
        											  EndSwitch
        											  
        											  If Campo="I_TISSQN" And VSD_I_Tipo_Item<>"C"
        											     Then VSD_I_TISSQN="N"
                                        VSD_I_BC_ISSQN   =BlankNum()
                                        VSD_I_AISSQN     =BlankNum()
                                        VSD_I_Valor_ISSQN=BlankNum()
                                        Campo="I_CST_PIS"

                                        If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                           Then
                                                 VSD_I_CST_PIS     ="99"
                                                 VSD_I_BC_PIS      =BlankNum()
                                                 VSD_I_APIS        =BlankNum()
                                                 VSD_I_Valor_PIS   =BlankNum()
        
                                                 VSD_I_CST_COFINS  ="99"
                                                 VSD_I_BC_COFINS   =BlankNum()
                                                 VSD_I_ACOFINS     =BlankNum()
                                                 VSD_I_Valor_COFINS=BlankNum()
        
                                                 Campo="I_CFOP"
                                        EndIf   
                                EndIf        
        											  
                            Else Mensagem("CST IPI inv lido, use F1 para consultar !")   
                         EndIf
                  EndIf
             Case Campo="I_AIPI":
                  VSD_I_AIPI=ControlValue("I_AIPI")
                  CalcImposto(Campo)
                  Campo="I_BC_IPI"
             Case Campo="I_BC_IPI":
                  VSD_I_BC_IPI=ControlValue("I_BC_IPI")
                  Campo="I_Valor_IPI"
             Case Campo="I_Valor_IPI":
                  VSD_I_Valor_IPI=ControlValue("I_Valor_IPI")
								  If VSD_I_Tipo_Item="C"
								     Then Campo="I_TISSQN"
								     Else VSD_I_TISSQN="N"
                          VSD_I_BC_ISSQN   =BlankNum()
                          VSD_I_AISSQN     =BlankNum()
                          VSD_I_Valor_ISSQN=BlankNum()
                          Campo="I_CST_PIS"

                          If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                             Then
                                   VSD_I_CST_PIS     ="99"
                                   VSD_I_BC_PIS      =BlankNum()
                                   VSD_I_APIS        =BlankNum()
                                   VSD_I_Valor_PIS   =BlankNum()
         
                                   VSD_I_CST_COFINS  ="99"
                                   VSD_I_BC_COFINS   =BlankNum()
                                   VSD_I_ACOFINS     =BlankNum()
                                   VSD_I_Valor_COFINS=BlankNum()
         
                                   Campo="I_CFOP"
                           EndIf
                  EndIf

            Case Campo="I_TISSQN":
                 VSD_I_TISSQN=ControlValue("I_TISSQN")
                 If IsBlank(VSD_I_TISSQN)
                    Then VSD_I_TISSQN="N"
                 EndIf        
                 If Not IsBlank(VSD_I_TISSQN)
                    Then TribCST=Checa_CST("ISSQN","",VSD_I_TISSQN)
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then VSD_I_BC_ISSQN   =BlankNum()
                                         VSD_I_AISSQN     =BlankNum()
                                         VSD_I_Valor_ISSQN=BlankNum()
                                         Campo="I_CST_PIS"
                                    Else Campo="I_AISSQN"
                                EndIf
                            Else Mensagem("CST ISSQN inv lida, use F1 para consultar !")   
                        EndIf
                 EndIf

            Case Campo="I_AISSQN":
                 VSD_I_AISSQN=ControlValue("I_AISSQN")
                 CalcImposto(Campo)
                 Campo="I_BC_ISSQN" 
            Case Campo="I_BC_ISSQN":
                 VSD_I_BC_ISSQN=ControlValue("I_BC_ISSQN")
                 Campo="I_Valor_ISSQN"
            Case Campo="I_Valor_ISSQN":
                 VSD_I_Valor_ISSQN=ControlValue("I_Valor_ISSQN")
                 Campo="I_CST_PIS"

            Case Campo="I_CST_PIS":
                 VSD_I_CST_PIS=ControlValue("I_CST_PIS")
                 If IsBlank(VSD_I_CST_PIS)
                    Then VSD_I_CST_PIS="99"
                 EndIf        

                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                    Then
                          VSD_I_CST_PIS     ="99"
                          VSD_I_BC_PIS      =BlankNum()
                          VSD_I_APIS        =BlankNum()
                          VSD_I_Valor_PIS   =BlankNum()

                          VSD_I_CST_COFINS  ="99"
                          VSD_I_BC_COFINS   =BlankNum()
                          VSD_I_ACOFINS     =BlankNum()
                          VSD_I_Valor_COFINS=BlankNum()

                          Campo="I_CFOP"
                    Else
                           If Not IsBlank(VSD_I_CST_PIS)
                              Then TribCST=Checa_CST("PIS","E",VSD_I_CST_PIS)
                                   If TribCST<>""
                                      Then If TribCST="N"
                                              Then VSD_I_BC_PIS   =BlankNum()
                                                   VSD_I_APIS     =BlankNum()
                                                   VSD_I_Valor_PIS=BlankNum()
                                                   Campo="I_CST_COFINS"
                                              Else Campo="I_APIS"
                                          EndIf
                                      Else Mensagem("CST PIS inv lido, use F1 para consultar !")   
                                   EndIf
                           EndIf
                 EndIf   
            Case Campo="I_APIS":
                 VSD_I_APIS=ControlValue("I_APIS")
                 CalcImposto(Campo)
                 Campo="I_BC_PIS" 
            Case Campo="I_BC_PIS":
                 VSD_I_BC_PIS=ControlValue("I_BC_PIS")
                 Campo="I_Valor_PIS"
            Case Campo="I_Valor_PIS":
                 VSD_I_Valor_PIS=ControlValue("I_Valor_PIS")
                 Campo="I_CST_COFINS"

            Case Campo="I_CST_COFINS":
                 VSD_I_CST_COFINS=ControlValue("I_CST_COFINS")
                 If IsBlank(VSD_I_CST_COFINS)
                    Then VSD_I_CST_COFINS="99"
                 EndIf        
                 If Not IsBlank(VSD_I_CST_COFINS)
                    Then TribCST=Checa_CST("COFINS","E",VSD_I_CST_COFINS)
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then VSD_I_BC_COFINS   =BlankNum()
                                         VSD_I_ACOFINS     =BlankNum()
                                         VSD_I_Valor_COFINS=BlankNum()
                                         Campo="I_CFOP"
                                    Else Campo="I_ACOFINS"
                                EndIf
                            Else Mensagem("CST COFINS inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf
            Case Campo="I_ACOFINS":
                 VSD_I_ACOFINS=ControlValue("I_ACOFINS")
                 CalcImposto(Campo)
                 Campo="I_BC_COFINS"
            Case Campo="I_BC_COFINS":
                 VSD_I_BC_COFINS=ControlValue("I_BC_COFINS")
                 Campo="I_Valor_COFINS"
            Case Campo="I_Valor_COFINS":
                 VSD_I_Valor_COFINS=ControlValue("I_Valor_COFINS")
                 Campo="I_CFOP"
           
            Case Campo="I_CFOP":
                 VSD_I_CFOP=ControlValue("I_CFOP")
                 Moveto [CFO]
                 Ativa_Lookup()
                 Moveto [Codigo Fiscal de Operacao]
                 Locate VSD_I_CFOP
                 If RetVal
                    Then KeyPress "ESC"
                         If SubStr(VSD_I_CFOP,1,1)<>
                            SubStr([NotaEC->CFO],1,1)
                            Then Mensagem("CFOP "+VSD_I_CFOP+" difere da nota "+[NotaEC->CFO]+" !")
                            Else Campo="I_NCM" 
                         EndIf
                    Else Mensagem("CFOP "+VSD_I_CFOP+" n„o Cadastrado !")
                         VSD_I_CFOP=""
                         KeyPress "ESC"
                 EndIf
                 Echo Off
   
            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 VSD_I_CDSERV =BlankNum()
                 VSD_I_MUNSERV=BlankNum()     
                 VSD_I_UFSERV =""
                 If VSD_I_Tipo_Item="C"
                    Then Campo="I_CDSERV"
                    Else VSD_I_CDSERV =BlankNum()
                         VSD_I_MUNSERV=BlankNum()     
                         VSD_I_UFSERV =""
                         Campo="I_Acrescimos_Desctos"
                 EndIf
                 
             Case Campo="I_CDSERV":
                  VSD_I_CDSERV=ControlValue("I_CDSERV")
                  Campo="I_MUNSERV"

             Case Campo="I_MUNSERV":
                  VSD_I_MUNSERV=ControlValue("I_MUNSERV")
                  Campo="I_Acrescimos_Desctos"

             Case Campo="I_Acrescimos_Desctos":
                  VSD_I_Acrescimos_Desctos=ControlValue("I_Acrescimos_Desctos")
                  Campo="I_Fator_Conversao"

             Case Campo="I_Fator_Conversao":
                  VSD_I_Fator_Conversao=ControlValue("I_Fator_Conversao")

                  Campo="I_Quantidade_Convertida"
                  If VSD_I_Fator_Conversao<>0
                     Then If Not IsBlank(VSD_I_Fator_Conversao)
                             Then
                                  If VSD_I_Fator_Conversao<1
                                     Then VSD_I_Quantidade_Convertida=Round(VSD_I_Quantidade*VSD_I_Fator_Conversao,0)
                                     Else VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao
                                  EndIf

                                  Campo="I_CCusto"
                          EndIf
                  EndIf

             Case Campo="I_Quantidade_Convertida":
                  VSD_I_Quantidade_Convertida=ControlValue("I_Quantidade_Convertida")
                  Campo="I_CCusto"

             Case Campo="I_CCusto"             : 
                  VSD_I_CCusto=ControlValue("I_CCusto")
                  If Not IsBlank(VSD_I_CCusto)
                     Then Moveto [Codigo CCusto]
                          Ativa_Lookup()
                          Moveto [Codigo CCusto]
                          Locate VSD_I_CCusto
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Centros de Custos a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_I_CCusto          =""
                                          VSD_I_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_I_CCusto          =[Codigo CCusto]
                                          VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                                          KeyPress "ESC"
                                          [Codigo CCusto]       =VSD_I_CCusto
                                          If PARAM_ATTAB_PRECO="S" And 
                                             VSD_I_Tipo_Item="T"   And
                                             [NotaEC->Tipo de Operacao]="C"
                                             Then Switch
                                                    Case CHAVEI=1 Or IsBlank(VSD_I_Tabela_Preco): Campo="I_Tabela_Preco"
                                                    Case CHAVEI=0 : Campo="I_Indice_PrVenda"
                                                  EndSwitch
                                             Else Campo="I_Flag"
                                          EndIf
                                  Endif
                             Else Mensagem("Centro de Custo n„o Cadastrado !")
                                  VSD_I_CCusto          =""
                                  VSD_I_Descricao_CCusto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_I_Descricao_CCusto=""

                          If PARAM_ATTAB_PRECO="S" And 
                             VSD_I_Tipo_Item="T"   And
                             [NotaEC->Tipo de Operacao]="C"
                             Then Switch
                                    Case CHAVEI=1 Or IsBlank(VSD_I_Tabela_Preco): Campo="I_Tabela_Preco"
                                    Case CHAVEI=0 : Campo="I_Indice_PrVenda"
                                  EndSwitch
                             Else Campo="I_Flag"
                          EndIf

                  EndIf

             Case Campo="I_Tabela_Preco":
                  VSD_I_Tabela_Preco=ControlValue("I_Tabela_Preco")
                  If Not IsBlank(VSD_I_Tabela_Preco)
                     Then Moveto [Lookup_Tabela_Preco]
                          Ativa_Lookup()
                          Moveto [Codigo da Tabela]
                          Locate VSD_I_Tabela_Preco
                          If RetVal
                             Then VSD_I_Tabela_Preco=[Codigo da Tabela]
                                  KeyPress "ESC"
                                  Moveto "NotaeI"
                                  [Lookup_Tabela_Preco]=VSD_I_Tabela_Preco
                                  Campo="I_Indice_PrVenda"
                                  Tabela_Preco("Procura")
                             Else Mensagem("Tabela de Pre‡o n„o Cadastrada !")
                                  VSD_I_Tabela_Preco=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_I_Indice_PrVenda=BlankNum()
                          VSD_I_Preco_Tabela  =BlankNum()
                          VSD_I_Preco_VendaOk =BlankNum()   
                          Campo="I_Flag"
                  EndIf
             Case Campo="I_Indice_PrVenda":
                  VSD_I_Indice_PrVenda = ControlValue("I_Indice_PrVenda")
                  VSD_I_Preco_VendaOk=VSD_I_Preco_VendaI
                  Campo="I_Preco_VendaOk"

             Case Campo="I_Preco_VendaOk":
                  VSD_I_Preco_VendaOk=ControlValue("I_Preco_VendaOk")
                  Campo="I_Flag"

             Case Campo="I_Flag" : AcceptDialog
             Case Campo="I_Flag2": CancelDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf

If CHAVEI<>9 Then Registro_Item("Gravar") EndIf
If Campo="I_Preco_VendaOk"
   Then VSD_I_Preco_VendaOk=VSD_I_Preco_VendaI
EndIf

If Not IsAssigned(LOCALIZAR_POR)
   Then Switch 
          Case SYS_CODIGO_CLIENTE="0296" : LOCALIZAR_POR="CodFor"
          OtherWise                      : LOCALIZAR_POR="CodItem"
        EndSwitch   
EndIf

SelectControl Campo
Switch
  Case Campo="I_OC"                      : MSGCAMPO="Ordem de compra"
  Case Campo="I_OC_Item"                 : MSGCAMPO="Item da ordem de compra"
  Case Campo="I_Seq"                     : MSGCAMPO="Sequencia"
  Case Campo="I_Codigo_Fornecedor"       : MSGCAMPO="Informe o c¢digo do item do fornecedor (conforme NF/Romaneio)"
  
  Case Campo="I_Codigo_Item" : 
       Switch
         Case LOCALIZAR_POR="CodItem": MSGCAMPO="C¢digo do Item"
         Case LOCALIZAR_POR="CodFor" : MSGCAMPO="C¢digo do Fornecedor"
         Case LOCALIZAR_POR="Ref."   : MSGCAMPO="Referˆncia"
         Case LOCALIZAR_POR="CodBar" : MSGCAMPO="C¢digo de Barra"
       EndSwitch  
  Case Campo="I_Descricao_Item"          : MSGCAMPO="Descri‡„o do item"
  Case Campo="I_Tipo_Item"               : MSGCAMPO="Tipo do item"
  Case Campo="I_Quantidade"              : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"                 : MSGCAMPO="Unidade de entrada"
  Case Campo="I_Preco_Unitario"          : MSGCAMPO="Pre‡o unit rio"
  Case Campo="I_Taxa_Desconto_Unitario"  : MSGCAMPO="Taxa desconto unit rio"
  Case Campo="I_Valor_Desconto_Unitario" : MSGCAMPO="Valor desconto unit rio"
  Case Campo="I_Preco_Total"             : MSGCAMPO="Pre‡o total"

  Case Campo="I_CST_Item"                : MSGCAMPO="Codigo da situa‡„o tribut ria para o ICMS"
  Case Campo="I_RBC_ICMS"                : MSGCAMPO="Informe a aliquota de redu‡Æo na base de c lculo do ICMS"
  Case Campo="I_BC_ICMS"                 : MSGCAMPO="Informe a base de c lculo do ICMS com seus rateios, [F8]=Calcular"
  Case Campo="I_AICMS"                   : MSGCAMPO="Informe a al¡quota do ICMS"
  Case Campo="I_Valor_ICMS"              : MSGCAMPO="Informe o valor do ICMS, [F8]=Calcular"

  Case Campo="I_BC_ST"                   : MSGCAMPO="Informe a base de c lculo da substitui‡Æo tribut ria com seus rateios, [F8]=Calcular"
  Case Campo="I_Valor_ST"                : MSGCAMPO="Informe o valor da substitui‡Æo tribut ria, [F8]=Calcular"

  Case Campo="I_CST_IPI"                 : MSGCAMPO="Codigo da situa‡„o tribut ria para o IPI"
  Case Campo="I_BC_IPI"                  : MSGCAMPO="Informe a base de c lculo do IPI, [F8]=Calcular"
  Case Campo="I_AIPI"                    : MSGCAMPO="Informe a al¡quota do IPI"
  Case Campo="I_Valor_IPI"               : MSGCAMPO="Informe o valor do IPI, [F8]=Calcular"

  Case Campo="I_TISSQN"                  : MSGCAMPO="Codigo da situa‡„o tribut ria para o ISSQN"
  Case Campo="I_BC_ISSQN"                : MSGCAMPO="Informe a base de c lculo do ISSQN com seus rateios, [F8]=Calcular"
  Case Campo="I_AISSQN"                  : MSGCAMPO="Informe a al¡quota do ISSQN"
  Case Campo="I_Valor_ISSQN"             : MSGCAMPO="Informe o valor do ISSQN, [F8]=Calcular"

  Case Campo="I_CST_PIS"                 : MSGCAMPO="Codigo da situa‡„o tribut ria para o PIS"
  Case Campo="I_BC_PIS"                  : MSGCAMPO="Informe a base de c lculo do PIS com seus rateios, [F8]=Calcular"
  Case Campo="I_APIS"                    : MSGCAMPO="Informe a al¡quota do PIS"
  Case Campo="I_Valor_PIS"               : MSGCAMPO="Informe o valor do PIS, [F8]=Calcular"

  Case Campo="I_CST_COFINS"              : MSGCAMPO="Codigo da situa‡„o tribut ria para o COFINS"
  Case Campo="I_BC_COFINS"               : MSGCAMPO="Informe a base de c lculo do COFINS com seus rateios, [F8]=Calcular"
  Case Campo="I_ACOFINS"                 : MSGCAMPO="Informe a al¡quota do COFINS"
  Case Campo="I_Valor_COFINS"            : MSGCAMPO="Informe o valor do COFINS, [F8]=Calcular"

  Case Campo="I_NCM"                     : MSGCAMPO="NCM"
  Case Campo="I_CFOP"                    : MSGCAMPO="CFOP para este item"
  Case Campo="I_MVA"                     : MSGCAMPO="Margem de valor agregado para Base C lculo ST"
  Case Campo="I_CSOSN"                   : MSGCAMPO="ICMS - C¢digo de situa‡Æo da opera‡Æo no Simples Nacional"

  Case Campo="I_CDSERV"                  : MSGCAMPO="C¢digo do servi‡o"
  Case Campo="I_MUNSERV"                 : MSGCAMPO="C¢digo do munic¡pio onde o servi‡o foi prestado"

  Case Campo="I_Acrescimos_Desctos"      : MSGCAMPO="Valor de ajuste para o custo final !"
  Case Campo="I_Fator_Conversao"         : MSGCAMPO="Fator de convers„o de entrada"
  Case Campo="I_CCusto"                  : MSGCAMPO="Centro de custo"

  Case Campo="I_Tabela_Preco"            : MSGCAMPO="Informe a tabela de pre‡o"
  Case Campo="I_Indice_PrVenda"          : MSGCAMPO="Öndice p/ c lculo do pre‡o de venda"
  Case Campo="I_Preco_VendaOk"           : MSGCAMPO="Pre‡o de venda a praticar"

  OtherWise                              : MSGCAMPO=""
EndSwitch

If Sw_Dialog="Item"
   Then                                          
        If CHAVEI=0
            Then TECLA=TECLA+"Ctrl+Del=Excluir  "
            Else TECLA=TECLA+"                  "
        EndIf
        If Campo="I_Codigo_Item"  Or
           Campo="I_Tipo_Item"    Or
           Campo="I_Tabela_Preco" Or
           Campo="I_CCusto"       Or
           Campo="I_UN_Item"      Or
           Campo="I_CFOP"         Or
           Campo="I_CST_Item"     Or  
           Campo="I_CST_IPI"      Or  
           Campo="I_MUNSERV"      Or      
           Campo="I_CSOSN"      
           Then TECLA=TECLA+"F1=Tabelas  "
           Else TECLA=TECLA+"            "
        EndIf
        TECLA=TECLA+"Alt+F=Fun‡”es  Localizar-> "+LOCALIZAR_POR
EndIf                
If Opcao_Ver=True           
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
EndIf

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

;*******************************************************************************
;* Rotina para checagem MVA                                                    *
;*******************************************************************************
Proc Localizar_Item_Por()

Switch
 Case SYS_CODIGO_CLIENTE="0296"      : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODFOR" 
                                       EndIf
 Case SYS_CODIGO_CLIENTE="0046" And 
      PARAM_UTILIZACDBARRA="S"       : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODBAR" 
                                       EndIf
 OtherWise                           : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODITE" 
                                       EndIf
EndSwitch             
              
Switch
  Case LOCALIZA_CODIGO="LOC_CODITE" : If Len(ControlValue("I_Codigo_Item"))<=10
                                         Then Moveto [Codigo do Item]
                                              Locate ALINHM(ControlValue("I_Codigo_Item"),10)
                                      EndIf
  Case LOCALIZA_CODIGO="LOC_CODFOR" : Moveto [Codigo Fornecedor]
                                      Locate ControlValue("I_Codigo_Item")
  Case LOCALIZA_CODIGO="LOC_CODREF" : Moveto [Referencia]
                                      Locate ControlValue("I_Codigo_Item")
  Case LOCALIZA_CODIGO="LOC_CODBAR" : Moveto [Codigo de Barras]
                                      Locate IndexOrder by "cod_barras" ControlValue("I_Codigo_Item")  
EndSwitch     

EndProc ;Proc Localizar_Item_Por()

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc CalcImposto(Campo)
Private Campo

; *** nÆo implementado !!

;--- ICMS/ICMS ST -------------------------------------------------------------- 
Switch
  Case Campo="I_CST_Item":

  Case Campo="I_AICMS"   :
EndSwitch

;--- IPI ----------------------------------------------------------------------- 
Switch
  Case Campo="I_AIPI" :
EndSwitch

;--- ISSQN --------------------------------------------------------------------- 
Switch
  Case Campo="I_AISSQN" :
EndSwitch

;--- PIS ----------------------------------------------------------------------- 
Switch
  Case Campo="I_APIS" :
EndSwitch

;--- COFINS -------------------------------------------------------------------- 
Switch
  Case Campo="I_ACOFINS" :
EndSwitch

EndPRoc

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()

INICIO_DIALOG=True
Moveto [Sequencia do Lancamento]
Locate [NotaEC->Numero do Lancamento],SEQIT
CopyToArray RegItem

QTDCONV =[Quantidade Convertida]
QUANT   =[Quantidade ]
CTTOTAL =NDecimal(([Quantidade ]*[Custo Medio Unitario]),2)
VSD_I_Flag=""

VSD_I_TX_ICMS_SAIDA=0
VSD_I_RD_ICMS_SAIDA=0
If Not IsBlank([Codigo do Item])
   Then VSD_I_Codigo_Item=[Codigo do Item]
        Moveto [Codigo do Item]
        Ativa_Lookup()
        Moveto [Codigo do Item]
        Locate VSD_I_Codigo_Item
        If RetVal
           Then VSD_I_TX_ICMS_SAIDA  =[Aliquota de ICMS     ]
                VSD_I_RD_ICMS_SAIDA  =[Aliquota Reduzida BCICMS  ]
        EndIf
        KeyPress "ESC"
EndIf

Registro_Item("Ler")

EndProc ; (Inicia_Registro)

;***********************************************************
;** Rotina para elaboracao de historico lancamento        **
;***********************************************************
Proc HISTORICO()
HISTORICO = VSD_V_Descri_Hist
POS       = Search("*",HISTORICO)
NOVOHIST  = SubStr(HISTORICO,1,POS-1)
While True
      POSN = SearchFrom("*",HISTORICO,POS+1)
      If POSN = 0
         Then NOVOHIST = NOVOHIST + SubStr(HISTORICO,POS+1,70)
              QuitLoop
      EndIf

      COMP = SubStr(HISTORICO,POS,(POSN-POS)+1)

      Switch
      Case COMP = "*CHEQUE*":
           NOVOHIST = NOVOHIST + VSD_V_NoCheque
      Case COMP = "*CONTDEST*":
           NOVOHIST = NOVOHIST + VSD_V_Descricao_Conta
      Case COMP = "*CONTORIG*":
           NOVOHIST = NOVOHIST + VSD_V_Descricao_Conta               
      Case COMP = "*TPDOCTO*":
           NOVOHIST = NOVOHIST + [Notaec->Tipo do Documento] +"/"+ [Notaec->Serie do Documento]
      Case COMP = "*LIVRE*":
           COMPLEMENTO()
      Case COMP = "*DOCTO*":
           NOVOHIST = NOVOHIST + [Notaec->Numero do Documento]
      OtherWise:
           NOVOHIST = NOVOHIST + SubStr(COMP,2,SearchFrom("*",COMP,2)-2)
      EndSwitch
      POS = POSN
EndWhile
VSD_V_Descri_Hist = NOVOHIST
EndProc ; (HISTORICO)

;***********************************************************
;** Rotina para Digitacao de Complemento                  **
;***********************************************************
Proc COMPLEMENTO()
LIVRE=""
ShowDialog "[ Complemento ]" @ 13,12 height 06 width 53
  @ 0,1 ?? "Texto:"

  Accept @ 00,07 width 43 "A60" Picture "!*!" tag "LIVRE" to LIVRE

  Pushbutton @ 02,20 width 11 "OK"        OK default Value "Say Yes" Tag "YES" to BottonValue
  Pushbutton @ 07,20 width 11 "~C~ancela" CANCEL                     Tag "NO"  to BottonValue

Enddialog
Mouse Show
NOVOHIST = NOVOHIST + LIVRE
EndProc ; (COMPLEMENTO)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
Private TIT_COFINS1, TIT_CONFIS2

Sw_Dialog="Item"
Echo Normal
Echo Off
Showdialog "Dados do Item [     ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP",-33,"F6","F7","F8"
    @ 03,0 height 20 width 80

   Accept @ -01,43 Width 5 "A2" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,08 "Compra" For "I_OC"
   Accept @ 01,08 Width 09 "A06" picture "#*#" Tag "I_OC" to VSD_I_OC
   Label  @ 00,16 "/Item" For "I_OC_Item"
   Accept @ 01,18 Width 05 "N" picture "!*!" Tag "I_OC_Item" to VSD_I_OC_Item
   Label  @ 00,32 "Codigo Item/Fornecedor" For "I_Codigo_Fornecedor"
   Accept @ 01,33 Width 23 "A20" picture "!*!" Tag "I_Codigo_Fornecedor" to VSD_I_Codigo_Fornecedor
   Label  @ 00,56 "Referˆncia" For "I_Referencia"
   Accept @ 01,57 Width 14 "A12" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia

   Label  @ 02,01 "Codigo Item" For "I_Codigo_Item"
   Accept @ 03,01 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 02,18 "Descricao Item" For "I_Descricao_Item"
   Accept @ 03,18 Width 33 "A30" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 02,51 "Tipo" For "I_Tipo_Item"
   Accept @ 03,52 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   Label  @ 04,01 "Quantidade" For "I_Quantidade"
   Accept @ 05,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 04,15 "UnC" For "I_UN_Item"
   Accept @ 05,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 04,21 "Pr.Unitario" For "I_Preco_Unitario"
   Accept @ 05,21 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario

   Label  @ 04,34 "%/" For "I_Taxa_Desconto_Unitario"
   Accept @ 05,34 Width 11 "N" picture "#*#.[####]" Tag "I_Taxa_Desconto_Unitario" to VSD_I_Taxa_Desconto_Unitario
   Label  @ 04,37 "Vr.Desconto" For "I_Valor_Desconto_Unitario"
   Accept @ 05,46 Width 12 "N" picture "#*#.[#####]" Tag "I_Valor_Desconto_Unitario" to VSD_I_Valor_Desconto_Unitario
   Label  @ 04,59 "Pr.Total" For "I_Preco_Total"
   Accept @ 05,59 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total
   
   @ 06,00 ?? "Impostos CST  %Red     Aliq.  BC         Valor" 
   Label  @ 07,00 "  ICMS" For "I_CST_Item"
   Accept @ 07,80 Width 03 "A1" picture "!" Tag "I_TICMS" to VSD_I_TICMS ; Ficar invisivel
   Accept @ 07,08 Width 06 "A3" picture "###" Tag "I_CST_Item" to VSD_I_CST_Item
   Accept @ 07,13 Width 10 "N" picture "#*#.[####]" Tag "I_RBC_ICMS" to VSD_I_RBC_ICMS
   Accept @ 07,22 Width 08 "N" picture "#*#.[##]" Tag "I_AICMS" to VSD_I_AICMS
   Accept @ 07,29 Width 12 "$" picture "#*#.[##]" Tag "I_BC_ICMS" to VSD_I_BC_ICMS
   Accept @ 07,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ICMS" to VSD_I_Valor_ICMS

   Label  @ 08,00 " CSOSN" For "I_CSOSN"
   Accept @ 08,08 Width 07 "A4" picture "####" Tag "I_CSOSN" to VSD_I_CSOSN
   PaintCanvas Attribute 112 08, 10, 08, 51

   Label  @ 09,00 "    ST" For "I_BC_ST"
   Accept @ 09,14 Width 09 "N" picture "#*#.[##]" Tag "I_MVA" to VSD_I_MVA
   @ 09,10 ?? "%MVA"
   PaintCanvas Attribute 112 09, 08, 09, 21
   Accept @ 09,22 Width 08 "N" picture "#*#.[##]" Tag "I_AST" to VSD_I_AST
   Accept @ 09,29 Width 12 "$" picture "#*#.[##]" Tag "I_BC_ST" to VSD_I_BC_ST
   Accept @ 09,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ST" to VSD_I_Valor_ST

   Label  @ 10,00 "   IPI" For "I_CST_IPI"
   Accept @ 10,80 Width 03 "A1" picture "!" Tag "I_TIPI" to VSD_I_TIPI ; Ficar invisivel
   Accept @ 10,08 Width 16 "A2" picture "##" Tag "I_CST_IPI" to VSD_I_CST_IPI  
   Accept @ 10,22 Width 08 "N" picture "#*#.[##]" Tag "I_AIPI" to VSD_I_AIPI
   Accept @ 10,29 Width 12 "$" picture "#*#.[##]" Tag "I_BC_IPI" to VSD_I_BC_IPI
   Accept @ 10,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_IPI" to VSD_I_Valor_IPI

   Label  @ 11,00 " ISSQN" For "I_TISSQN"
   Accept @ 11,08 Width 21 "A1" picture "D,N,I,S,R" Tag "I_TISSQN" to VSD_I_TISSQN
   Accept @ 11,22 Width 08 "N" picture "#*#.[##]"   Tag "I_AISSQN" to VSD_I_AISSQN
   Accept @ 11,29 Width 12 "$" picture "#*#.[##]"   Tag "I_BC_ISSQN" to VSD_I_BC_ISSQN
   Accept @ 11,40 Width 12 "$" picture "#*#.[##]"   Tag "I_Valor_ISSQN" to VSD_I_Valor_ISSQN

   Label  @ 12,00 "   PIS" For "I_CST_PIS"
   Accept @ 12,08 Width 16 "A2" picture "##" Tag "I_CST_PIS" to VSD_I_CST_PIS  
   Accept @ 12,22 Width 08 "N" picture "#*#.[##]" Tag "I_APIS" to VSD_I_APIS
   Accept @ 12,29 Width 12 "$" picture "#*#.[##]" Tag "I_BC_PIS" to VSD_I_BC_PIS
   Accept @ 12,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_PIS" to VSD_I_Valor_PIS

   Label  @ 13,00 "COFINS" For "I_CST_COFINS"
   Accept @ 13,08 Width 16 "A2" picture "##" Tag "I_CST_COFINS" to VSD_I_CST_COFINS
   Accept @ 13,22 Width 08 "N" picture "#*#.[##]" Tag "I_ACOFINS" to VSD_I_ACOFINS
   Accept @ 13,29 Width 12 "$" picture "#*#.[##]" Tag "I_BC_COFINS" to VSD_I_BC_COFINS
   Accept @ 13,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_COFINS" to VSD_I_Valor_COFINS

   Label  @ 06,52 "CFOP" For "I_CFOP"
   Accept @ 07,53 Width 10 "A4" picture "####" Tag "I_CFOP" to VSD_I_CFOP
   Label  @ 06,63 "NCM" For "I_NCM"
   Accept @ 07,64 Width 12 "A8" picture "#*#" Tag "I_NCM" to VSD_I_NCM

   Label  @ 10,53 "Servi‡o" For "I_CDSERV"
   Accept @ 11,53 Width 10 "N" picture "#*#" Tag "I_CDSERV" to VSD_I_CDSERV
   Label  @ 10,63 "Munic¡pio" For "I_MUNSERV"
   Accept @ 11,63 Width 10 "N" picture "#*#" Tag "I_MUNSERV" to VSD_I_MUNSERV
   Label  @ 10,73 "UF" For "I_UFSERV"
   Accept @ 11,73 Width 5  "A2" picture "!!" Tag "I_UFSERV" to VSD_I_UFSERV

   Label  @ 14,01 "Ajustes +/-" For "I_Acrescimos_Desctos"
   Accept @ 15,01 Width 13 "N" picture "[-]#*#.[#####]" Tag "I_Acrescimos_Desctos" to VSD_I_Acrescimos_Desctos
   @ 14,14 ?? "/"
   Accept @ 15,15 Width 05 "A2" picture "!*!" to VSD_I_UN_Item

   Label  @ 14,21 "Ft.Conversao=>" For "I_Fator_Conversao"
   Accept @ 15,22 Width 13 "N" picture "#*#.[#####]" Tag "I_Fator_Conversao" to VSD_I_Fator_Conversao
   Label  @ 14,36 "Quantidade" For "I_Quantidade_Convertida"
   Accept @ 15,36 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade_Convertida" to VSD_I_Quantidade_Convertida
   Label  @ 14,49 "UnI" For "I_Unidade_Interna"
   Accept @ 15,49 Width 05 "A2" picture "!!" Tag "I_Unidade_Interna" to VSD_I_Unidade_Interna
   Label  @ 14,55 "Custo" For "I_Ct_Unitario"
   Accept @ 15,55 Width 12 "N" picture "#*#.[#####]" Tag "I_Ct_Unitario" to VSD_I_Ct_Unitario
   @ 15,35 ?? "="
   @ 15,54 ?? "/"

   Label  @ 16,01 "Centro Custo" For "I_CCusto"
   Accept @ 17,01 Width 10 "A7" picture "###.###" Tag "I_CCusto" to VSD_I_CCusto
   Accept @ 17,10 Width 25 "A25" picture "!*!" Tag "I_Descricao_CCusto" to VSD_I_Descricao_CCusto

   Label  @ 16,35 "Tabela=" For "I_Tabela_Preco"
   Accept @ 17,36 Width 08 "A5" picture "!*!" Tag "I_Tabela_Preco" to VSD_I_Tabela_Preco
   Label  @ 16,42 "Pre‡o/" For "I_Preco_Tabela"
   Accept @ 17,44 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   @ 16,49 ?? VSD_I_Unidade_Interna
   Label  @ 16,54 "%Venda" For "I_Indice_PrVenda"
   Accept @ 17,54 Width 09 "$" picture "#*#.[##]" Tag "I_Indice_PrVenda" to VSD_I_Indice_PrVenda
   Label  @ 16,63 "PrVenda/" For "I_Preco_VendaOk"
   Accept @ 17,63 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_VendaOk" to VSD_I_Preco_VendaOk
   @ 16,72 ?? VSD_I_Unidade_Interna

   Accept @ 17,75 Width 1 "A1" picture "!" Tag "I_Flag" to VSD_I_Flag

EndDialog
Mouse Show
If RetVal
   Then Finaliza_Registro(True)
   Else Finaliza_Registro(False)
EndIf
EndProc  ;  (DigitaI)


;*******************************************************************************
;* Rotina para Ver Calculo do Custo                                            *
;*******************************************************************************
Proc Ver_CalcCusto()
Private Tit

Sw_Dialog="Custo"
Tit=" C lculo custo unit rio por ["+VSD_I_UN_Item+"] "
INICIO_DIALOG=True
Showdialog Tit Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "ESC"
     @ 15,0 height 08 width 80

   @ 00,00 ?? "(=)Pre‡o.."+Format("W11.2,EIC",VCU_Preco_Unitario)+Spaces(3)
   @ 01,00 ?? "(-)Descto."+Format("W14.5,EIC",VCU_Desconto)
   @ 02,00 ?? "(=)Liquido"+Format("W14.5,EIC",VCU_Preco_Unitario-VCU_Desconto)
   @ 03,00 ?? "(+)Outros."+Format("W14.5,EIC",VCU_Acrescimos)
   @ 04,00 ?? "("+VCU_SINAL_IPI+     ")IPI...."+Format("W14.5,EIC",VCU_IPI)
   @ 05,00 ?? "(+)ST....."+Format("W14.5,EIC",VCU_VR_Subst)

   @ 00,25 ?? "("+VCU_SINAL_COFINSCR+")"+TIT_COFINSCR+Format("W14.5,EIC",VCU_COFINSCR)
   @ 01,25 ?? "("+VCU_SINAL_COFINSDB+")"+TIT_COFINSDB+Format("W14.5,EIC",VCU_COFINSDB)
   @ 02,25 ?? "("+VCU_SINAL_ICMSCR  +")"+TIT_ICMSCR  +Format("W14.5,EIC",VCU_ICMSCR)
   @ 03,25 ?? "("+VCU_SINAL_ICMSDB  +")"+TIT_ICMSDB  +Format("W14.5,EIC",VCU_ICMSDB)
   @ 04,25 ?? "("+VCU_SINAL_PIS     +")"+TIT_PIS     +Format("W14.5,EIC",VCU_PIS)
   @ 05,25 ?? "("+VCU_SINAL_AJUSTES +")Ajustes.."    +Format("W14.5,EIC",VCU_AJUSTES)           
   
   @ 00,52 ?? "(=)Custo."+Format("W14.5,EIC",VSD_I_Custo_Unitario)
   @ 01,52 ?? "(*)BC.PV."+Format("W14.5,EIC",VCU_BC_PrVenda)
   @ 02,52 ?? "(+)IC.PV."+Format("W14.5,EIC",VCU_VrIndice_PrVenda)
   @ 03,52 ?? "(=)Venda."+Format("W11.2,EIC",VSD_I_Preco_Venda)+"/"+VSD_I_UN_Item
   @ 04,52 ?? "         "+Format("W11.2,EIC",VSD_I_Preco_VendaI)+"/"+VSD_I_Unidade_Interna

   Accept @ 05,75 Width 1 "A1" picture "!" Tag "I_Flag2" to VSD_I_Flag2

   PaintCanvas Attribute 32  00, 00, 05, 77

   PaintCanvas Attribute 47  00, 11, 05, 23
   PaintCanvas Attribute 47  00, 37, 05, 50
   PaintCanvas Attribute 47  00, 61, 00, 77
   PaintCanvas Attribute 47  03, 61, 03, 77

EndDialog
Sw_Dialog="Item"
EndProc  ;  (DigitaI)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Numero da OC              ]=VSD_I_OC
       If Not IsBlank(VSD_I_OC_Item)
          Then [Item da OC                ]=NumVal(VSD_I_OC_Item)
       EndIf
       [Codigo da Empresa         ]=[NotaEC->Codigo da Empresa]
       [Codigo do Item            ]=VSD_I_Codigo_Item
       [Descricao do Item         ]=VSD_I_Descricao_Item
       [Tipo do Item              ]=VSD_I_Tipo_Item
       [Codigo_Fornecedor         ]=VSD_I_Codigo_Fornecedor

       [Lookup_Tabela_Preco       ]=VSD_I_Tabela_Preco
       [Indice Preco de Venda     ]=VSD_I_Indice_PrVenda

       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Fiscal            ]=VSD_I_UN_Item
       [Unidade Entrada           ]=VSD_I_UN_Item
       [Preco Unitario            ]=VSD_I_Preco_Unitario
       [Taxa Desconto Unitario    ]=VSD_I_Taxa_Desconto_Unitario
       [Valor Desconto Unitario   ]=VSD_I_Valor_Desconto_Unitario
       [Preco Total               ]=Round(VSD_I_Preco_Total,2)

       [Preco Unitario Tabela     ]=VSD_I_Preco_Tabela
       [Custo Medio Unitario      ]=VSD_I_Custo_Unitario

       [Tipo Tributacao           ]=VSD_I_CST_Item
       [Tributacao de ICMS        ]=VSD_I_TICMS
       [Aliquota Reduzida BCICMS  ]=VSD_I_RBC_ICMS
       [ICMS_BC                   ]=VSD_I_BC_ICMS
       [Aliquota de ICMS          ]=VSD_I_AICMS
       [Valor do ICMS             ]=VSD_I_Valor_ICMS

       [ICMS_ST_BC                ]=VSD_I_BC_ST   
       [ICMS_ST_Valor             ]=VSD_I_Valor_ST   

       [IPI_CST                   ]=VSD_I_CST_IPI  
       [Tributacao de IPI         ]=VSD_I_TIPI
       [IPI_BC                    ]=VSD_I_BC_IPI 
       [Aliquota de IPI           ]=VSD_I_AIPI
       [Valor do IPI              ]=VSD_I_Valor_IPI

       [Tributacao de ISSQN       ]=VSD_I_TISSQN
       [ISSQN_BC                  ]=VSD_I_BC_ISSQN 
       [Aliquota de ISSQN         ]=VSD_I_AISSQN
       [Valor do ISSQN            ]=VSD_I_Valor_ISSQN
       [Codigo_Servico            ]=VSD_I_CDSERV   
       [ISSQN_UF                  ]=VSD_I_UFSERV   
       [ISSQN_Municipio           ]=VSD_I_MUNSERV   

       [PIS_CST                   ]=VSD_I_CST_PIS                
       [PIS_BC                    ]=VSD_I_BC_PIS 
       [PIS_Aliquota              ]=VSD_I_APIS                  
       [PIS_Valor                 ]=VSD_I_Valor_PIS              

       [COFINS_CST                ]=VSD_I_CST_COFINS              
       [COFINS_BC                 ]=VSD_I_BC_COFINS 
       [COFINS_Aliquota           ]=VSD_I_ACOFINS                
       [COFINS_Valor              ]=VSD_I_Valor_COFINS           

       [Codigo CCusto             ]=VSD_I_CCusto
       [Descricao CCusto          ]=VSD_I_Descricao_CCusto

       [Fator de Conversao        ]=VSD_I_Fator_Conversao
       [Quantidade Convertida     ]=VSD_I_Quantidade_Convertida

       [Valor Acrescimos_Desctos  ]=VSD_I_Acrescimos_Desctos
       [Preco_Venda               ]=VSD_I_Preco_VendaOk

       [NCM                       ]=VSD_I_NCM                
       [CFO                       ]=VSD_I_CFOP                
       [MVA                       ]=VSD_I_MVA    
       [CSOSN                     ]=SubStr(VSD_I_CSOSN,2,3)          

       Calc_Custo_Unitario()
       UnLockRecord
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia do Lancamento   ]
       VSD_I_OC                     =[Numero da OC              ]
       VSD_I_OC_Item                =[Item da OC                ]
       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]
       VSD_I_Descricao_Item         =[Descricao do Item         ]
       VSD_I_Tabela_Preco           =[Lookup_Tabela_Preco       ]
       VSD_I_Indice_PrVenda         =[Indice Preco de Venda     ]
       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Entrada           ]
       VSD_I_Preco_Unitario         =[Preco Unitario            ]
       VSD_I_Taxa_Desconto_Unitario =[Taxa Desconto Unitario    ]
       VSD_I_Valor_Desconto_Unitario=[Valor Desconto Unitario   ]
       VSD_I_Preco_Total            =Round([Preco Total         ],2)
       VSD_I_Preco_Tabela           =[Preco Unitario Tabela     ]
       VSD_I_Custo_Unitario         =[Custo Medio Unitario      ]

       VSD_I_CST_Item               =[Tipo Tributacao           ]
       VSD_I_TICMS                  =[Tributacao de ICMS        ]
       VSD_I_RBC_ICMS               =[Aliquota Reduzida BCICMS  ]
       VSD_I_BC_ICMS                =[ICMS_BC                   ]
       VSD_I_AICMS                  =[Aliquota de ICMS          ]
       VSD_I_Valor_ICMS             =[Valor do ICMS             ]

       VSD_I_BC_ST                  =[ICMS_ST_BC                ]   
       VSD_I_AST                    =BlankNum()                       
       VSD_I_Valor_ST               =[ICMS_ST_Valor             ]   

       VSD_I_TIIPI                  =[Tributacao de IPI         ]
       VSD_I_CST_IPI                =[IPI_CST                   ]  
       VSD_I_BC_IPI                 =[IPI_BC                    ]
       VSD_I_AIPI                   =[Aliquota de IPI           ]
       VSD_I_Valor_IPI              =[Valor do IPI              ]

       VSD_I_TISSQN                 =[Tributacao de ISSQN       ]
       VSD_I_BC_ISSQN               =[ISSQN_BC                  ]
       VSD_I_AISSQN                 =[Aliquota de ISSQN         ]
       VSD_I_Valor_ISSQN            =[Valor do ISSQN            ]
       VSD_I_CDSERV                 =[Codigo_Servico            ]   
       VSD_I_UFSERV                 =[ISSQN_UF                  ]   
       VSD_I_MUNSERV                =[ISSQN_Municipio           ]   

       VSD_I_CST_PIS                =[PIS_CST                   ]
       VSD_I_BC_PIS                 =[PIS_BC                    ]
       VSD_I_APIS                   =[PIS_Aliquota              ]
       VSD_I_Valor_PIS              =[PIS_Valor                 ]

       VSD_I_CST_COFINS             =[COFINS_CST                ]
       VSD_I_BC_COFINS              =[COFINS_BC                 ]
       VSD_I_ACOFINS                =[COFINS_Aliquota           ]
       VSD_I_Valor_COFINS           =[COFINS_Valor              ]

       VSD_I_CCusto                 =[Codigo CCusto             ]
       VSD_I_Descricao_CCusto       =[Descricao CCusto          ]
       VSD_I_Fator_Conversao        =[Fator de Conversao        ]
       VSD_I_Acrescimos_Desctos     =[Valor Acrescimos_Desctos  ]
       VSD_I_Preco_Venda            =[Preco_Venda               ]
       VSD_I_Preco_VendaOk          =[Preco_Venda               ]
       VSD_I_Unidade_Interna        =[Unidade Interna           ]
       VSD_I_Quantidade_Convertida  =[Quantidade Convertida     ]
       VSD_I_Codigo_Fornecedor      =[Codigo_Fornecedor         ]

       VSD_I_Flag                   =""
       VSD_I_Ct_Unitario            =BlankNum()
       VSD_I_Preco_VendaI           =BlankNum()

       VSD_I_NCM                    =[NCM                       ]
       VSD_I_CFOP                   =[CFO                       ]
       VSD_I_MVA                    =[MVA                       ]    
       VSD_I_CSOSN                  =SubStr([Tipo Tributacao],1,1)+[CSOSN]
              
       Calc_Custo_Unitario()
EndSwitch
EndProc  ; (Registro_Item)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok
If Ok
   Then Registro_Item("Gravar")
        Switch
          Case CHAVEI=1 or CHAVEI=0: Tabela_Preco("IncAlt")
          Case VSD_I_OC>"000000" And
               VSD_I_OC_Item>0 : Tabela_Preco("IncAlt")
        EndSwitch
        ESTOQUE()
       ;;CONSIGNACAO("IncAlt")
        ATUA_COMPRA()
   Else If CHAVEI=8
           Then CopyFromArray RegItem
                Exclusao_I()
        EndIf
EndIf
EndProc   ; (Finaliza_Registro)

;*******************************************************************************
;* Rotina para Calculo do Custo Unitario                                       *
;*******************************************************************************
Proc Calc_Custo_Unitario()
Private VR_ICMSDB, VR_ICMSCR, VR_COFINSDB, VR_COFINSCR, VR_BASE,
        RSD_BCSUBST, RSD_VRSUBST, RSD_VRACRESC, TXPROPORC,
        a,b,t,i,x

VCU_SINAL_IPI       ="+"
VCU_SINAL_ICMSCR    =":"
VCU_SINAL_ICMSDB    =":"
VCU_SINAL_COFINSCR  =":"
VCU_SINAL_COFINSDB  =":"
VCU_SINAL_PIS       =":"
VCU_SINAL_AJUSTES   =":"

TIT_COFINSCR        ="COFINS..."
TIT_COFINSDB        ="........."
TIT_ICMSCR          ="ICMS....."
TIT_ICMSDB          ="........."
TIT_PIS             ="PIS......"
 
VCU_Preco_Unitario  =BlankNum()
VCU_Desconto        =BlankNum()
VCU_Acrescimos      =BlankNum()
VCU_IPI             =BlankNum()
VCU_VR_SUBST        =BlankNum()

VCU_COFINSCR        =BlankNum()
VCU_COFINSDB        =BlankNum()
VCU_ICMSDB          =BlankNum()
VCU_ICMSCR          =BlankNum()
VCU_PIS             =BlankNum()
VCU_AJUSTES         =BlankNum()

VCU_BC_PrVenda      =BlankNum()
VCU_VrIndice_PrVenda=BlankNum()

VR_ICMSDB           =BlankNum()
VR_ICMSCR           =BlankNum()
VR_COFINSDB         =BlankNum()
VR_COFINSCR         =BlankNum()
VR_BASE             =BlankNum()

VRMERC   = [NotaEC->Valor Mercadoria]
TXDESCTO = ([NotaEC->Valor Desconto]/VRMERC)*100
[Valor Desconto Total]=NDecimal(([Preco Total]*TXDESCTO)/100,5)

If [Tipo do Item]="C" Or
   [Tipo do Item]="D" Or
   [Tipo do Item]="G" Or
   [Tipo do Item]="H" Or
   [Tipo do Item]="I" Or
   [NotaEC->Tipo de Operacao]="A" Or
   [NotaEC->Tipo de Operacao]="D" Or
   [NotaEC->Tipo de Operacao]="T"
   Then 
        VSD_I_Preco_Venda   =BlankNum()
        VSD_I_Preco_VendaI  =BlankNum()

        [Custo Medio Unitario]=[Preco Total]-[Valor Desconto Total]
        If [Quantidade]>0
           Then Divisor_Custo=[Quantidade]
           Else Divisor_Custo=1
        EndIf
        [Custo Medio Unitario]=NDecimal(([Custo Medio Unitario]/Divisor_Custo),5)
        VSD_I_Custo_Unitario=[Custo Medio Unitario]

        Return
EndIf

If ([Tipo do Item]="M" Or [Tipo do Item]="E") And
   [NotaEC->Tipo de Operacao]="C"
   Then VCU_SINAL_IPI=":"
EndIf

If PARAM_CALC_COFLUCR="S"
   Then 
        TIT_COFINSDB      ="COFINS/DB"
        VCU_SINAL_COFINSDB="+"
        If PARAM_USA_COFINS_DBCR="S"
           Then TIT_COFINSCR      ="COFINS/CR"
                VCU_SINAL_COFINSCR="-"
        EndIf

        TIT_ICMSCR      ="ICMS/CR.."
        VCU_SINAL_ICMSCR="-"
        TIT_ICMSDB      ="ICMS/DB.."
        VCU_SINAL_ICMSDB="+"
   Else 
        If PARAM_CCE_SUBICMS="S"
           Then TIT_ICMSCR      ="ICMS/CR.."
                VCU_SINAL_ICMSCR="-"
        EndIf
        If PARAM_CCE_SUBCOFINS="S"
           Then TIT_COFINSCR      ="COFINS/CR"
                VCU_SINAL_COFINSCR="-"
        EndIf
EndIf

Switch
  Case IsBlank([Valor Acrescimos_Desctos]) : VCU_SINAL_AJUSTES   =":"
  Case [Valor Acrescimos_Desctos]>0        : VCU_SINAL_AJUSTES   ="+"
  Case [Valor Acrescimos_Desctos]<0        : VCU_SINAL_AJUSTES   ="-"
EndSwitch

If [Tipo do Item]="T" And
   [NotaEC->Tipo de Operacao]="C" And
   PARAM_CCE_SUBPIS="S"
   Then TIT_PIS      ="PIS/CR..."
        VCU_SINAL_PIS="-"
EndIf

VRACRESC=0 
VRACRESC=VRACRESC+[NotaEC->Valor do Frete           ]
VRACRESC=VRACRESC+[NotaEC->Valor do Seguro          ]
VRACRESC=VRACRESC+[NotaEC->Valor Despesas Acessorias]
VRACRESC=VRACRESC+[NotaEC->Valor Acrescimos_Desctos ]
VRACRESC=VRACRESC+[NotaEC->Valor Servico            ]

TXACRESC=(VRACRESC/(VRMERC+[NotaEC->Valor Servico]))*100
[Valor Acrescimo Total]=([Preco Total]*TXACRESC)/100

[Custo Medio Unitario]=[Preco Total]-[Valor Desconto Total]
If [Quantidade]>0
   Then Divisor_Custo=[Quantidade]
   Else Divisor_Custo=1
EndIf

If PARAM_CALC_COFLUCR="S"
   Then
        [Custo Medio Unitario]=[Custo Medio Unitario]+[Valor Acrescimo Total]
        [Custo Medio Unitario]=[Custo Medio Unitario]+[ICMS_ST_Valor        ]
        [Custo Medio Unitario]=[Custo Medio Unitario]+[Valor do IPI         ]
        [Custo Medio Unitario]=NDecimal(([Custo Medio Unitario]/Divisor_Custo),5)

        VR_BASE  =[Custo Medio Unitario]+(([Custo Medio Unitario]*PARAM_TAXA_LUCRATIV)/100)
        VR_COFINSDB=(VR_BASE*PARAM_TAXA_COFINS)/100

        If SYS_CODIGO_CLIENTE="0117" And SubStr(Directory(),1,1)="V"
           Then VR_COFINSDB=0
        EndIf

        [Custo Medio Unitario]=[Custo Medio Unitario]+VR_COFINSDB

        If PARAM_USA_COFINS_DBCR="S"
           Then VR_BASE=NDecimal((([Preco Total]-[Valor Desconto Total])/Divisor_Custo),2)
                VR_COFINSCR=(VR_BASE*PARAM_TAXA_COFINS)/100
                [Custo Medio Unitario]=[Custo Medio Unitario]-VR_COFINSCR
        EndIf

        VR_BASE  =[Custo Medio Unitario]+(([Custo Medio Unitario]*PARAM_TAXA_LUCRATIV)/100)
        VR_BASE  =VR_BASE-((VR_BASE*VSD_I_RD_ICMS_SAIDA)/100)
        VR_ICMSDB=(VR_BASE*VSD_I_TX_ICMS_SAIDA)/100

        If SYS_CODIGO_CLIENTE="0117" And SubStr(Directory(),1,1)="V"
           Then VR_ICMSDB=0
        EndIf

        [Custo Medio Unitario]=[Custo Medio Unitario]+VR_ICMSDB
        
        VCU_ICMSCR     =([Valor do ICMS]-(([Valor do ICMS]*TXDESCTO)/100))/Divisor_Custo
        [Custo Medio Unitario]=[Custo Medio Unitario]-VCU_ICMSCR

        VCU_COFINSDB   =VR_COFINSDB
        VCU_COFINSCR   =VR_COFINSCR
        VCU_ICMSDB     =VR_ICMSDB   

   Else 
        [Custo Medio Unitario]=NDecimal(([Custo Medio Unitario]/Divisor_Custo),5)
        If PARAM_CCE_SUBICMS = "S"
           Then VCU_ICMSCR  =([Valor do ICMS]-(([Valor do ICMS]*TXDESCTO)/100))/Divisor_Custo
                [Custo Medio Unitario]=[Custo Medio Unitario]-VCU_ICMSCR
        EndIf
        If PARAM_CCE_SUBCOFINS = "S"
           Then VR_BASE     =NDecimal((([Preco Total]-[Valor Desconto Total])/Divisor_Custo),2)
                VCU_COFINSCR=(VR_BASE*PARAM_TAXA_COFINS)/100           
                [Custo Medio Unitario]=[Custo Medio Unitario]-VCU_COFINSCR
        EndIf
        [Custo Medio Unitario]=[Custo Medio Unitario]+(([Valor Acrescimo Total]+[ICMS_ST_Valor])/Divisor_Custo)
EndIf

VCU_VR_SUBST=NDecimal(([ICMS_ST_Valor]/Divisor_Custo),5)

If PARAM_CCE_SUBPIS = "S"
   Then VR_BASE    =NDecimal((([Preco Total]-[Valor Desconto Total])/Divisor_Custo),2)
        VCU_PIS    =(VR_BASE*PARAM_TAXA_PIS)/100           
        [Custo Medio Unitario]=[Custo Medio Unitario]-VCU_PIS
EndIf
If VCU_SINAL_IPI="+"
   Then VCU_IPI        =[Valor do IPI ]/Divisor_Custo
        [Custo Medio Unitario]=[Custo Medio Unitario]+VCU_IPI
EndIf

[Custo Medio Unitario]=[Custo Medio Unitario]+[Valor Acrescimos_Desctos]

[Custo Medio Unitario]=NDecimal([Custo Medio Unitario],5)

If INC_COMPRA
   Then Return
EndIf

If [Quantidade]>0
   Then VCU_Preco_Unitario=[Preco Unitario]
   Else VCU_Preco_Unitario=[Preco Total]+[Valor Desconto Unitario]+([Valor Desconto Total]/Divisor_Custo)
EndIf
VCU_Desconto   =[Valor Desconto Unitario]+([Valor Desconto Total]/Divisor_Custo)
VCU_Acrescimos =[Valor Acrescimo Total]/Divisor_Custo

VCU_AJUSTES    =[Valor Acrescimos_Desctos]
VCU_BC_PrVenda =BlankNum()
VCU_VrIndice_PrVenda=BlankNum()

VSD_I_Custo_Unitario=[Custo Medio Unitario]
VSD_I_Ct_Unitario   =NDecimal(((VSD_I_Custo_Unitario*Divisor_Custo)/VSD_I_Quantidade_Convertida),5)

If Not IsBlank(VSD_I_Indice_PrVenda) And PARAM_ATTAB_PRECO="S"
   Then If PARAM_BCPV_SUBICMS="S"
           Then If PARAM_CCE_SUBICMS="S"
                   Then VCU_BC_PrVenda = VSD_I_Custo_Unitario
                   Else VCU_BC_PrVenda = VSD_I_Custo_Unitario-VCU_ICMSCR
                EndIf
           Else If PARAM_CCE_SUBICMS="S"
                   Then VCU_BC_PrVenda = VSD_I_Custo_Unitario+VCU_ICMSCR
                   Else VCU_BC_PrVenda = VSD_I_Custo_Unitario
                EndIf
        EndIf
        VCU_VrIndice_PrVenda=(VCU_BC_PrVenda*VSD_I_Indice_PrVenda)/100
        VSD_I_Preco_Venda = Round(VCU_BC_PrVenda+VCU_VrIndice_PrVenda,2)
        VSD_I_Preco_VendaI= Round(((VSD_I_Preco_Venda*Divisor_Custo)/VSD_I_Quantidade_Convertida),2)
   Else VSD_I_Preco_Venda = BlankNum()
        VSD_I_Preco_VendaI= BlankNum()
EndIf

EndProc ; (Calc_Custo_Unitario)

;*******************************************************************************
;* Atualiza Tabela Preco                                                       *
;*******************************************************************************
Proc Tabela_Preco(Acao)
Private Acao,Reajusta
If IsBlank(VSD_I_Tabela_Preco) Or
   PARAM_ATTAB_PRECO<>"S" Or
   [NotaEI->Tipo do Item]<>"T" Or
   [NotaEC->Tipo de Operacao]<>"C"
   Then Return
EndIf

Reajusta=True
Moveto "\\Sistemas\\Vendas\\TbprIte"
Switch
  Case Acao="Procura":
       Moveto [Codigo da Tabela]
       Locate VSD_I_Tabela_Preco,VSD_I_Codigo_Item
       If Not RetVal
          Then VSD_I_Preco_Tabela=BlankNum()
          Else VSD_I_Preco_Tabela=[Preco Unitario]
       EndIf
  Case Acao="IncAlt":
       Moveto [Codigo da Tabela]
       Locate VSD_I_Tabela_Preco,VSD_I_Codigo_Item
       If Not RetVal
          Then End
               Down
               [Codigo da Tabela ] = VSD_I_Tabela_Preco
               [Codigo do Item   ] = VSD_I_Codigo_Item
               [Lookup_Item      ] = VSD_I_Codigo_Item
               [Lookup_Item      ] = ""
       EndIf
       If VSD_I_Preco_VendaOk>0
          Then MSG=    Completa("Valor da Tabela: "+Format("W10.2,EIC",[Preco Unitario     ]),30," ")+"//"
               MSG=MSG+Completa("Data Referente.: "+Format("D13",[Data Ultimo Reajuste     ]),30," ")+"// //"
               MSG=MSG+Completa("Valor Calculado: "+Format("W10.2,EIC",VSD_I_Preco_VendaOk  ),30," ")
               MSG=MSG+"// //Atualiza Tabela de Pre‡o ?"
               ConfGeral(MSG)
               If OK="N" Then Reajusta=False EndIf
          Else Reajusta=False
       EndIf
       If Reajusta
          Then [Preco Unitario      ] = VSD_I_Preco_VendaOk
               [Data Ultimo Reajuste] = Today()
               [Taxa Ultimo Reajuste] = Round(((VSD_I_Preco_VendaOk*100)/VSD_I_Preco_Tabela)-100,2)
               UnLockRecord
       EndIf
EndSwitch
Moveto "NotaeI"
EndProc ; (Tabela_Preco)

;*******************************************************************************
;* Atualiza Quantidade Entregue da Ordem de Compra                             *
;*******************************************************************************
Proc ATUA_COMPRA()
If Not IsBlank([NotaEI->Numero da OC]) And
   Not IsBlank([NotaEI->Item da OC])
   Then Moveto "NotaEC"
        [Numero da OC link]=[NotaEI->Numero da OC]
        Moveto "\\Sistemas\\Compras\\OCI"
        Moveto [Item da OC]
        Locate [NotaEI->Item da OC]
        If RetVal
           Then If CHAVEI<>8
                   Then [Quantidade Entregue]=([Quantidade Entregue]-QUANT)+[NotaEI->Quantidade]
                   Else [Quantidade Entregue]=[Quantidade Entregue]-[NotaEI->Quantidade]
                EndIf
                UnLockRecord
                ATUA_SITUACAO_COMPRA()
        EndIf
EndIf
EndProc   ; (Atua_COMPRA)

;*******************************************************************************
;* Atualiza Situacao da Ordem de Compra                                        *
;*******************************************************************************
Proc ATUA_SITUACAO_COMPRA()
Private WC_NUMCOM, WC_COMENT

WC_NUMCOM=0
WC_COMENT=0
Scan
  WC_NUMCOM=WC_NUMCOM+1
  If ([Quantidade]-[Quantidade Entregue])<=0
     Then WC_COMENT=WC_COMENT+1
  EndIf
EndScan
If WC_NUMCOM>0
   Then Moveto "\\Sistemas\\Compras\\OCC"
        If WC_NUMCOM=WC_COMENT
           Then [Situacao da OC]="ENTREGUE"
           Else [Situacao da OC]="ABERTO"
        EndIf
        UnLockRecord
EndIf
EndProc     ; (Atua_Situacao_COMPRA)

;*******************************************************************************
;* Recebimento da Ordem de Compra                                              *
;*******************************************************************************
Proc RECEBE_COMPRA()
Private COMPRA_RECEBER, COMPRA_REC, OK, SEQI
COMPRA_REC=[NotaEC->Numero da OC]
OK=""
ShowDialog "" proc "OPCAO" @ 08,20 height 03 width 32
  @ 0,1 ?? "N§ Ordem de Compra"
   Accept @ 00,20 width 9 "A6" Picture "#*#" tag "COMPRA_RECEBER" to COMPRA_REC
   PushButton @ 02,06 Width 10 "Sim"     OK Value "Sim" Tag "Sim" to Button
   PushButton @ 02,15 Width 10 "N„o" CANCEL Value "Nao" Tag "N„o" to Button
Enddialog
Mouse Show
If OK="N"
   Then Return
EndIf
COMPRA_RECEBER=AlinhM(COMPRA_RECEBER,6)

Moveto "NotaEC"
[Numero da OC link]=COMPRA_RECEBER
Moveto "\\Sistemas\\Compras\\OCC"
If RecordStatus("New")
   Then Mensagem("Ordem de Compra n„o Encontrada !")
        Return
   Else If [Codigo]<>[NotaEC->Codigo]
           Then Mensagem("Ordem de Compra c/ Fornecedor diferente deste Lan‡amento !")
                Return
        EndIf
EndIf
Moveto "\\Sistemas\\Compras\\OCI"
INC_COMPRA=True

Scan For ([Quantidade]-[Quantidade Entregue])>0
  Moveto "NotaEI"
  End
  SEQI=[Sequencia do Lancamento]
  If Isblank(SEQI)
     Then SEQI=1
     Else SEQI=SEQI+1
  EndIf
  Down
  [Numero do Lancamento     ]=[NotaEC->Numero do Lancamento]
  [Sequencia do Lancamento  ]=SEQI
  COPIA_COMPRA_LANCTO()

  Calc_Custo_Unitario()

  CHAVEI=1
  ESTOQUE()

  Moveto "\\Sistemas\\Compras\\OCI"
  [Quantidade Entregue]=[Quantidade Entregue]+[NotaEI->Quantidade]
EndScan
UnlockRecord
ATUA_SITUACAO_COMPRA()
INC_COMPRA=False
EndProc   ;  (RECEBE_COMPRA)

;*******************************************************************************
;* 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="COMPRA_RECEBER"
                   Then COMPRA_RECEBER=ControlValue("COMPRA_RECEBER")
                        SelectControl "Sim"
                        OK="S"
                   Else OK="N"
                EndIf
                CancelDialog
                Temp=False
        EndSwitch
Endif
Return Temp
EndProc   ;  (Opcao)

;*******************************************************************************
;* Copia Dados do Item da OC p/ Item do Lancamento                             *
;*******************************************************************************
Proc COPIA_COMPRA_LANCTO()
[Numero da OC            ]=[\Sistemas\Compras\OCi->Numero da OC            ]
[Item da OC              ]=[\Sistemas\Compras\OCi->Item da OC              ]
[Codigo da Empresa       ]=[NotaEC->Codigo da Empresa                      ]
[Codigo do Item          ]=[\Sistemas\Compras\OCi->Codigo do Item          ]
[Tipo do Item            ]=[\Sistemas\Compras\OCi->Tipo do Item            ]
[Descricao do Item       ]=[\Sistemas\Compras\OCi->Descricao do Item       ]
[Codigo da Cor_Tecido    ]=[\Sistemas\Compras\OCi->Codigo da Cor_Tecido    ]
[Descricao da Cor_Tecido ]=[\Sistemas\Compras\OCi->Descricao da Cor_Tecido ]
[Tamanho                 ]=[\Sistemas\Compras\OCi->Tamanho                 ]
[Quantidade              ]=[\Sistemas\Compras\OCi->Quantidade]-[\Sistemas\Compras\OCi->Quantidade Entregue]
[Unidade Fiscal          ]=[\Sistemas\Compras\OCi->Unidade Fiscal          ]
[Unidade Entrada         ]=[\Sistemas\Compras\OCi->Unidade Fiscal          ]
[Unidade Interna         ]=[\Sistemas\Compras\OCi->Unidade Interna         ]
[Preco Unitario          ]=[\Sistemas\Compras\OCi->Preco Unitario          ]
[Taxa Desconto Unitario  ]=[\Sistemas\Compras\OCi->Taxa Desconto Unitario  ]
[Valor Desconto Unitario ]=[\Sistemas\Compras\OCi->Valor Desconto Unitario ]
[IPI_CST                 ]=[\Sistemas\Compras\OCi->IPI_CST                 ]
[Tributacao de IPI       ]=[\Sistemas\Compras\OCi->Tributacao de IPI       ]
[Aliquota Reduzida BCIPI ]=[\Sistemas\Compras\OCi->Aliquota Reduzida BCIPI ]
[Aliquota de IPI         ]=[\Sistemas\Compras\OCi->Aliquota de IPI         ]
[Tributacao de ICMS      ]=[\Sistemas\Compras\OCi->Tributacao de ICMS      ]
[Aliquota Reduzida BCICMS]=[\Sistemas\Compras\OCi->Aliquota Reduzida BCICMS]
[Aliquota de ICMS        ]=[\Sistemas\Compras\OCi->Aliquota de ICMS        ]
[Fator de Conversao      ]=[\Sistemas\Compras\OCi->Fator de Conversao      ]

[Quantidade Convertida   ]=[Quantidade]
If [Fator de Conversao]<>0
   Then If Not IsBlank([Fator de Conversao])
           Then
               If [Fator de Conversao]<1
                  Then [Quantidade Convertida]=Round([Quantidade]*[Fator de Conversao],0)
                  Else [Quantidade Convertida]=[Quantidade]*[Fator de Conversao]
               EndIf

        EndIf
EndIf

[Codigo CCusto           ]=[\Sistemas\Compras\OCi->Codigo CCusto           ]
[Descricao CCusto        ]=[\Sistemas\Compras\OCi->Descricao CCusto        ]

If [Quantidade]>0 and [Preco Unitario]>0
    Then [Preco Total]=Round([Quantidade]*([Preco Unitario]-[Valor Desconto Unitario]),2)
    Else If [Preco Unitario]>0
            Then [Preco Total]=Round([Preco Unitario]-[Valor Desconto Unitario],2)
         EndIf
EndIf

If [Tributacao de ICMS]<>"D"
   Then If Not IsBlank([Tributacao de ICMS      ])
            Then [Aliquota Reduzida BCICMS]=BlankNum()
                 [Aliquota de ICMS        ]=BlankNum()
                 [Valor do ICMS           ]=BlankNum()
         EndIf
EndIf

If [Aliquota Reduzida BCICMS]>0 And
   [Aliquota de ICMS        ]>0
   Then [Valor do ICMS]=NDecimal((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
   Else [Valor do ICMS]=NDecimal(([Preco Total]*[Aliquota de ICMS])/100,2)
EndIf

If [Aliquota Reduzida BCIPI ]>0 And
   [Aliquota de IPI         ]>0
   Then [Valor do IPI ]=NDecimal((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCIPI ])/100))*[Aliquota de IPI])/100,2)
   Else [Valor do IPI ]=NDecimal(([Preco Total]*[Aliquota de IPI ])/100,2)
EndIf

QTDCONV =0
QUANT   =0
CTTOTAL =0

VSD_I_TX_ICMS_SAIDA=0
VSD_I_RD_ICMS_SAIDA=0
If Not IsBlank([Codigo do Item])
   Then VSD_I_Codigo_Item=[Codigo do Item]
        Moveto [Codigo do Item]
        Ativa_Lookup()
        Moveto [Codigo do Item]
        Locate VSD_I_Codigo_Item
        If RetVal
           Then VSD_I_TX_ICMS_SAIDA  =[Aliquota de ICMS     ]
                VSD_I_RD_ICMS_SAIDA  =[Aliquota Reduzida BCICMS  ]
                VSD_I_MVA            =[MVA_1                     ]
        EndIf
        KeyPress "ESC"
EndIf

;* Seta Variaveis PegaCFOP
Checa_CFOP   ="E"
CFO_C        =[NotaEC->CFO       ]
CFOP_TPITEM  =[Tipo do Item      ]
CFOP_TRIBICMS=[Tributacao de ICMS]
Play "\\Sistemas\\Exporta\\PegaCFOP"
[CFO        ]=CFO_C

[MVA            ]=VSD_I_MVA
[ICMS UF_ORIGEM ]=AICMSUFO
[ICMS UF_DESTINO]=AICMSUFD

;; Incluido em 12/04/2005 Anivel
If PARAM_ATTAB_PRECO<>"S"
   Then Return
EndIf
VSD_I_Tabela_Preco=PARAM_TABELA_PRECO
VSD_I_Codigo_Item =[Codigo do Item]
VSD_I_Preco_Tabela=BlankNum()

If Not IsBlank(VSD_I_Tabela_Preco)
   Then Moveto [Lookup_Tabela_Preco]
        Ativa_Lookup()
        Moveto [Codigo da Tabela]
        Locate VSD_I_Tabela_Preco
        If RetVal
           Then KeyPress "ESC"
                Moveto "NotaeI"
                [Lookup_Tabela_Preco]=VSD_I_Tabela_Preco
                Tabela_Preco("Procura")
           Else Mensagem("Tabela de Pre‡o n„o Cadastrada !")
                KeyPress "ESC"
        EndIf
        Echo Off
EndIf
[Preco Unitario Tabela]=VSD_I_Preco_Tabela

EndProc    ; (Copia_COMPRA_LANCTO)

;*******************************************************************************
;* Rotina Montar Vencimentos pela Ordem de Compra                              *
;*******************************************************************************
Proc OC_VENCTOS()
Private SEQ,ncampo,executa,seq

Moveto "NotaEcp"
Exclusao_Cabeca=False
While RecordStatus("New")=False
  CopyToArray RegItem
  CHAVEAP=8
  TITULOS()
EndWhile

Moveto "NotaEC"
[Numero da OC Link]=[Numero da OC]

 ncampo=Field()
    seq=-1
Executa=True 

While Executa
  Moveto "NotaEC"
  Moveto [Lookup_OCV]
  Ativa_Lookup()
  Moveto [Numero da OC]
  Locate [NotaEC->Numero da OC Link]
  If Not RetVal
     Then QuitLoop
     Else Executa=False 
          While [Numero da OC]=[NotaEC->Numero da OC Link]
            If [sequencia do Lancamento]>Seq
               Then Seq=[sequencia do Lancamento]
  
                    CopyToArray REGOCV
                    REGOCV["Numero da OC"]       =[NotaEC->Numero do Lancamento]
                    REGOCV["Codigo do Documento"]=[NotaEC->Codigo do Documento ]
                    REGOCV["Tipo do Documento"]  =[NotaEC->Tipo do Documento   ]
                    REGOCV["Serie do Documento"] =[NotaEC->Serie do Documento  ]
                    REGOCV["Numero do Documento"]=[NotaEC->Numero do Documento ]
                    KeyPress "ESC"
          
                    Moveto "NotaEcp"
                    Moveto [Sequencia do Lancamento]
                    End
                    Down
                    CopyFromArray REGOCV
                    UnLockRecord
                    
                    Executa=True     
                    QuitLoop
            EndIf   
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf
EndWhile
KeyPress "ESC"
Moveto Field ncampo

titoc=False
If PARAM_ATUA_CAPG="S"
   Then
        Moveto "NotaEC"
        UnLockRecord
        KeyPress "F7"

        Moveto "NotaECP"
        Moveto [Numero do Lancamento]
        Locate [NotaEC->Numero do Lancamento]
        If RetVal
           Then While [Numero do Lancamento]=[NotaEC->Numero do Lancamento] And
                      Not IsBlank([NotaEcp->Numero Lancamento Titulos])

                  oktit=False
                  Moveto "\\sistemas\\ctapag\\Titulos"
                  Moveto [Numero do Lancamento]
                  Locate [NotaEcp->Numero Lancamento Titulos]
                  If Not RetVal
                     Then MSG="O lan‡amento "+[NotaEcp->Numero Lancamento Titulos]+" no Contas a Pagar,//"
                          MSG=MSG+"referente a OC ["+[NotaEC->Numero da OC]+"] n„o foi encontrado !//"
                          MSG=MSG+"Verificar dados da OC e no Contas a Pagar Ok !//"
                          MSG=MSG+"Esta altera‡„o no Contas a Pagar n„o ser  efefuada !"
                          Mensagem(MSG)
                     Else If [Sistema Gerador       ]="OC" And
                             [Lancamento Gerador    ]=[NotaEC->Numero da OC] And
                             [Sequencia Gerador     ]=[NotaEcp->Sequencia do Lancamento] And
                             [Documento Referente   ]=RTrim(("OC/"+[NotaEC->Numero da OC]))
                             Then oktit=True
                          EndIf

                          If Not OkTit
                             Then MSG="O lan‡amento no Contas a Pagar n„o corresponde a OC ["+[NotaEC->Numero da OC]+"] !//"
                                  MSG=MSG+"Verificar dados da OC e no Contas a Pagar Ok !//"
                                  MSG=MSG+"Esta alter‡„o no Contas a Pagar n„o ser  efefuado !//"
                                  MSG=MSG+"Talvez algum outro erro gerou este problema !"
                                  Mensagem(MSG)
                             Else If [Saldo do Documento]<>[Valor do Documento]
                                     Then Oktit=False
                                          MSG="A altera‡„o do lan‡amento no Contas a Pagar,//"
                                          MSG=MSG+"referente a este documento: "+
                                              [NotaEC->Codigo da Empresa]+" / "+
                                              [NotaEC->Tipo do Documento]+" / "+
                                              [NotaEC->Numero do Documento]+"//"
                                          MSG=MSG+"n„o ser  efetuado, pois o T¡tulo J  teve baixa ! // //"
                                          MSG=MSG+"Verificar !"
                                          Mensagem(MSG)
                                     Else [Codigo do Documento ]=[NotaEcp->Codigo do Documento ]
                                          [Numero do Documento ]=[NotaEcp->Numero do Documento ]
                                          Controle_Dia()
                                          [Sistema Gerador     ]="NE"
                                          [Lancamento Gerador  ]=[NotaEcp->Numero do Lancamento   ]
                                          [Sequencia Gerador   ]=[NotaEcp->Sequencia do Lancamento]
                                          [Documento Referente ]=RTrim([NotaEC->Tipo do Documento]+"/"+[NotaEC->Numero do Documento ])
                                          UnLockRecord
                                          titoc=True
                                  EndIf
                          EndIf
                  EndIf

                  Moveto "NotaEcp"
                  Skip
                  If EOT() Then QuitLoop EndIf
                EndWhile
        EndIf
        Moveto "NotaEC"
        KeyPress "F7"
EndIf

Moveto "NotaEcp"

MSG="N„o esqueca de completar e confirmar os dados dos Vencimentos !"
If titoc
   Then MSG=MSG+"// //Os vencimentos da OC "+[NotaEC->Numero da OC]+" programados no Contas a Pagar,//"
        MSG=MSG+"foram substituidos por este lancamento da Nota !"
EndIf
Mensagem(MSG)
EndProc    ; (OC_Vectos)

;*******************************************************************************
;* Rotina para campos=0 -> blankNum()                                         *
;*******************************************************************************
Proc Limpa_Campos()

If [Valor BCICMS              ]=0 Then [Valor BCICMS             ]=BlankNum() EndIf
If [Valor ICMS                ]=0 Then [Valor ICMS               ]=BlankNum() EndIf
If [Valor BCSubstituicao ICMS ]=0 Then [Valor BCSubstituicao ICMS]=BlankNum() EndIf
If [Valor Substituicao ICMS   ]=0 Then [Valor Substituicao ICMS  ]=BlankNum() EndIf
If [Valor Servico             ]=0 Then [Valor Servico            ]=BlankNum() EndIf
If [Valor BCISSQN             ]=0 Then [Valor BCISSQN            ]=BlankNum() EndIf
If [Valor ISSQN               ]=0 Then [Valor ISSQN              ]=BlankNum() EndIf

If [Valor Mercadoria Liquido  ]=0 Then [Valor Mercadoria Liquido ]=BlankNum() EndIf
If [Valor do Frete            ]=0 Then [Valor do Frete           ]=BlankNum() EndIf
If [Valor do Seguro           ]=0 Then [Valor do Seguro          ]=BlankNum() EndIf
If [Valor Desconto            ]=0 Then [Valor Desconto           ]=BlankNum() EndIf
If [Valor Despesas Acessorias ]=0 Then [Valor Despesas Acessorias]=BlankNum() EndIf
If [Valor IPI                 ]=0 Then [Valor IPI                ]=BlankNum() EndIf
If [Valor Nota Fiscal         ]=0 Then [Valor Nota Fiscal        ]=BlankNum() EndIf

If [Valor Mercadoria          ]=0 Then [Valor Mercadoria         ]=BlankNum() EndIf
If [Valor Acrescimos_Desctos  ]=0 Then [Valor Acrescimos_Desctos ]=BlankNum() EndIf
If [BC Substituicao Destinat  ]=0 Then [BC Substituicao Destinat ]=BlankNum() EndIf
If [Vr Substituicao Destinat  ]=0 Then [Vr Substituicao Destinat ]=BlankNum() EndIf

EndProc

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc CALC_NOTA()
Private OkDifer,
        VRMERC, VRSERV, BCICMS, VICMS, BCST, VST, VIPI, VRNOTA

Aguarde("Calculando Totais")
Limpa_Campos()

VRMERC =0.00
VRSERV =0.00
BCICMS =0.00
VICMS  =0.00
BCST   =0.00
VST    =0.00
VIPI   =0.00
BCISSQN=0.00
VISSQN =0.00
VRNOTA =0.00

DIF_VRMERC =BlankNum() 
DIF_VRSERV =BlankNum() 
DIF_BCICMS =BlankNum() 
DIF_ICMS   =BlankNum() 
DIF_BCST   =BlankNum() 
DIF_ST     =BlankNum() 
DIF_IPI    =BlankNum() 
DIF_BCISSQN=BlankNum() 
DIF_ISSQN  =BlankNum() 
DIF_NOTA   =BlankNum() 

Moveto "NotaEI"
Scan

  If [IPI_BC             ]=0 Then [IPI_BC             ]=BlankNum() EndIf
  If [Aliquota de IPI    ]=0 Then [Aliquota de IPI    ]=BlankNum() EndIf
  If [Valor do IPI       ]=0 Then [Valor do IPI       ]=BlankNum() EndIf

  If [ICMS_BC            ]=0 Then [ICMS_BC            ]=BlankNum() EndIf
  If [Aliquota de ICMS   ]=0 Then [Aliquota de ICMS   ]=BlankNum() EndIf
  If [Valor do ICMS      ]=0 Then [Valor do ICMS      ]=BlankNum() EndIf

  If [Aliquota de ISSQN  ]=0 Then [Aliquota de ISSQN  ]=BlankNum() EndIf
  If [ISSQN_BC           ]=0 Then [ISSQN_BC           ]=BlankNum() EndIf
  If [Valor do ISSQN     ]=0 Then [Valor do ISSQN     ]=BlankNum() EndIf

  If [PIS_BC             ]=0 Then [PIS_BC             ]=BlankNum() EndIf
  If [PIS_Aliquota       ]=0 Then [PIS_Aliquota       ]=BlankNum() EndIf
  If [PIS_Valor          ]=0 Then [PIS_Valor          ]=BlankNum() EndIf

  If [Cofins_BC          ]=0 Then [Cofins_BC          ]=BlankNum() EndIf
  If [Cofins_Aliquota    ]=0 Then [Cofins_Aliquota    ]=BlankNum() EndIf
  If [Cofins_Valor       ]=0 Then [Cofins_Valor       ]=BlankNum() EndIf

  If [Codigo_Servico     ]=0 Then [Codigo_Servico     ]=BlankNum() EndIf
  If [ISSQN_Municipio    ]=0 Then [ISSQN_Municipio    ]=BlankNum() EndIf

  If [ICMS_ST_Aliquota   ]=0 Then [ICMS_ST_Aliquota   ]=BlankNum() EndIf
  If [ICMS_ST_Valor      ]=0 Then [ICMS_ST_Valor      ]=BlankNum() EndIf

  If [Valor Frete Total  ]=0 Then [Valor Frete Total  ]=BlankNum() EndIf
  If [Valor Seguro Total ]=0 Then [Valor Seguro Total ]=BlankNum() EndIf
  If [Valor OutDesp Total]=0 Then [Valor OutDesp Total]=BlankNum() EndIf


  BCICMS =BCICMS +[ICMS_BC                ]
  VICMS  =VICMS  +[Valor do ICMS          ]

  BCST   =BCST   +[ICMS_ST_BC             ]
  VST    =VST    +[ICMS_ST_Valor          ]

  VIPI   =VIPI   +[Valor do IPI           ]
  BCISSQN=BCISSQN+[ISSQN_BC               ]
  VISSQN =VISSQN +[Valor do ISSQN         ]

  If [Tipo do Item]<>"C"
     Then VRMERC=VRMERC+[Preco Total    ]
     Else VRSERV=VRSERV+[Preco Total    ]
  EndIf
EndScan

Moveto "NotaEC"

VRNOTA      =(VRMERC-[Valor Desconto])+VRSERV+VIPI+VST+
             [Valor Despesas Acessorias]+[Valor do Seguro]+[Valor do Frete]

If Format("W12.2,EIC",VRMERC*1 )<>Format("W12.2,EIC",[Valor Mercadoria          ]*1)       Then DIF_VRMERC  =VRMERC -[Valor Mercadoria ] EndIf
If Format("W12.2,EIC",VRSERV*1 )<>Format("W12.2,EIC",[Valor Servico             ]*1)       Then DIF_VRSERV  =VRSERV -[Valor Servico    ] EndIf
If Format("W12.2,EIC",BCICMS*1 )<>Format("W12.2,EIC",[Valor BCICMS              ]*1)       Then DIF_BCICMS  =BCICMS -[Valor BCICMS     ] EndIf
If Format("W12.2,EIC",VICMS*1  )<>Format("W12.2,EIC",[Valor ICMS                ]*1)       Then DIF_ICMS    =VICMS  -[Valor ICMS       ] EndIf
If Format("W12.2,EIC",BCST*1   )<>Format("W12.2,EIC",[Valor BCSubstituicao ICMS ]*1)       Then DIF_BCST    =BCST   -[Valor BCSubstituicao ICMS] EndIf
If Format("W12.2,EIC",VST*1    )<>Format("W12.2,EIC",[Valor Substituicao ICMS   ]*1)       Then DIF_ST      =VST    -[Valor Substituicao ICMS  ] EndIf
If Format("W12.2,EIC",VIPI*1   )<>Format("W12.2,EIC",[Valor IPI                 ]*1)       Then DIF_IPI     =VIPI   -[Valor IPI        ] EndIf
If Format("W12.2,EIC",BCISSQN*1)<>Format("W12.2,EIC",[Valor BCISSQN             ]*1)       Then DIF_BCISSQN =BCISSQN-[Valor BCISSQN    ] EndIf
If Format("W12.2,EIC",VISSQN*1 )<>Format("W12.2,EIC",[Valor ISSQN               ]*1)       Then DIF_ISSQN   =VISSQN -[Valor ISSQN      ] EndIf
If Format("W12.2,EIC",VRNOTA*1 )<>Format("W12.2,EIC",[Valor Nota Fiscal         ]*1)       Then DIF_NOTA    =VRNOTA -[Valor Nota Fiscal] EndIf

OkDifer=False

If Not IsBlank(DIF_VRMERC ) Then OkDifer=True EndIf
If Not IsBlank(DIF_VRSERV ) Then OkDifer=True EndIf
If Not IsBlank(DIF_BCICMS ) Then OkDifer=True EndIf
If Not IsBlank(DIF_ICMS   ) Then OkDifer=True EndIf
If Not IsBlank(DIF_BCST   ) Then OkDifer=True EndIf
If Not IsBlank(DIF_ST     ) Then OkDifer=True EndIf
If Not IsBlank(DIF_IPI    ) Then OkDifer=True EndIf
If Not IsBlank(DIF_BCISSQN) Then OkDifer=True EndIf
If Not IsBlank(DIF_ISSQN  ) Then OkDifer=True EndIf
If Not IsBlank(DIF_NOTA   ) Then OkDifer=True EndIf

Moveto [Tipo de Pagamento]

Echo Normal
Echo Off
LimpAguarde()

If OkDifer
   Then MSG=    "Detectada diferen‡a dos //totais DIGITADOS x CALCULADOS!// //"
        MSG=MSG+"Corrigir o erro !// //Fique atento aos valores //informados "
        MSG=MSG+"nos itens//para que os c lculos//dos custos fiquem corretos e"
        MSG=MSG+"//o registro de entrada!!"
        Mensagem(MSG)
EndIf
EndProc  ; (Calc_Nota)

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DIGITAF()
CHAVEF=0

Moveto "NotaEC"
CALC_NOTA()

Moveto [Tipo de Pagamento]
TPPAGTO=[Tipo de Pagamento]

While True

      TECLA=" Esc=Retornar  "
      If Field()="Tipo de Pagamento"
         Then TECLA=TECLA+"F1=Tabelas  "
         Else TECLA=TECLA+"            "
      EndIf
      TECLA=TECLA+"Alt+F=Fun‡”es  PgUp  PgDn=Finalizar  "

      MSGCAMPO=Field()

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","PGDN","PGUP","F1","F5","F6",-33
           
    If RetVal=-33
      Then Echo Normal
           Echo Off
           ShowPopup " Fun‡”es " CENTERED
             "F5  ~O~bserva‡äes        " : " Observa‡äes                  " : "F5",
             "F6  ~I~mprimir           " : " Imprimir                     " : "F6",
             "~S~air                   " : " Ignorar op‡äes               " : "CANCELAR"
           EndMenu
           To MenuVar
           echo off
           If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Loop
           EndIf
   
           RetVal=MenuVar
    EndIf
           
    Switch
      Case RetVal="F1":
           If Field()="Tipo de Pagamento"
              Then CONSULTAF1()
            EndIf
      Case RetVal="PGUP":
           CHAVEF=9
           If Not CHECA_TPPAGTO() Then Loop EndIf
           QuitLoop
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento])     Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           If Not CHECA_TPPAGTO() Then Loop EndIf
           QuitLoop
      Case Retval="F5":
           CampoAnt=Field()
           Edita_Memo("Observacao",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA
      Case Retval="F6":
           If IsBlank([Tipo de Pagamento])     Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           If Not CHECA_TPPAGTO() Then Loop EndIf
           If IMPRIME()
              Then QuitLoop
           EndIf
      Case RetVal="ESC":
        Switch
           Case Field()="Tipo de Pagamento"         :  
                CHAVEF=9
                QuitLoop
           OtherWise:
                Left
        EndSwitch        
      Case RetVal="ENTER": 
        Switch
           Case Field()="Tipo de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If Not CHECA_TPPAGTO() Then Loop EndIf
                If []="V" Then Digita_AVista() EndIf
                If []="P"
                   Then SetaCorRegistro("Padrao")
                        Moveto "NotaEcp"
                        While True
                          CHAVEAP()
                          If CHAVEAP=9 Or                   
                             CHAVEAP=7 
                             Then SetaCorRegistro("Padrao") 
                                  QuitLoop 
                          EndIf
                          
                          Controla_EdicaoAP()
                        EndWhile
                        Moveto "NotaEC"
                        SetaCorRegistro("Editar")
                        Moveto [Tipo de Pagamento]
                        
                        If CHAVEAP=7
                           Then QuitLoop
                        EndIf   
                        
                EndIf
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc   ; (DigitaF)

;*******************************************************************************
;* Rotina para Checagem do Tipo de Pagamento                                   *
;*******************************************************************************
Proc CHECA_TPPAGTO()
Private Valido_TpPagto

Valido_TpPagto=True
If [Tipo de Pagamento]<>TPPAGTO And
   Not IsBlank(TPPAGTO)
   Then If TPPAGTO="V"
           Then ConfGeral("Confirma exclus„o do lan‡amento a vista no Caixa/Banco ?")
                If OK="S"
                   Then Exclusao_Cabeca=False
                        CHAVEAV=8
                        CONTA()
                        Moveto "NotaEC"
                        TPPAGTO=[Tipo de Pagamento]
                   Else [Tipo de Pagamento]=TPPAGTO
                        Valido_TpPagto=False
                EndIf
        EndIf
        If TPPAGTO="P"
           Then ConfGeral("Confirma exclus„o do lan‡amento a prazo no Contas a Pagar ?")
                If OK="S"
                   Then Exclusao_Cabeca=False
                        Moveto "NotaEcp"
                        While RecordStatus("New")=False
                          CHAVEAP=8
                          CopyToArray RegItem
                          TITULOS()
                        EndWhile
                        Moveto "NotaEC"
                        TPPAGTO=[Tipo de Pagamento]
                   Else [Tipo de Pagamento]=TPPAGTO
                        Valido_TpPagto=False
                EndIf
        EndIf
EndIf
Moveto "NotaEC"
Moveto [Tipo de Pagamento]
Return Valido_TpPagto
EndProc ; (Checa_TpPagto)

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Geral_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = 27:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso":
                  CancelDialog
             Case Campo="Valor_Frete":
                  SelectControl "Frete_Incluso"
             Case Campo="VICMS_Frete":
                  SelectControl "Valor_Frete"
           EndSwitch

           Temp=False
      Case Evento["KeyCode"] = 13:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso":
                  VSD_Frete_Incluso=ControlValue("Frete_Incluso")
                  If IsBlank(VSD_Frete_Incluso)
                     Then VSD_Frete_Incluso="N"
                  Endif
                  SelectControl "Valor_Frete"
             Case Campo="Valor_Frete":
                  VSD_Frete=ControlValue("Valor_Frete")
                  SelectControl "VICMS_Frete"
             Case Campo="VICMS_Frete":
                  VSD_VICMS_Frete=ControlValue("VICMS_Frete")

                  If VSD_Frete_Incluso="S"
                     Then [Frete Incluso na Nota ]="+"
                     Else [Frete Incluso na Nota ]=":"
                  EndIf
                  [Valor do Frete  ]=VSD_Frete
                  [Valor ICMS Frete]=VSD_VICMS_Frete

                  CancelDialog

           EndSwitch

           RefreshDialog
           Temp=False
   EndSwitch
EndIf
Mouse Hide
Return TEMP
EndProc  ; (Geral_Dialog)

;*******************************************************************************
;* Digitacao dos Dados do Frete                                                *
;*******************************************************************************
Proc Digita_Frete()
If [Frete Incluso na Nota ]="+" Or
   [Frete Incluso na Nota ]="S"
   Then VSD_Frete_Incluso="S"
   Else VSD_Frete_Incluso="N"
EndIf
VSD_Frete        =[Valor do Frete  ]
VSD_VICMS_Frete  =[Valor ICMS Frete]

Showdialog "Dados do Frete" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC","ClearArea"
     @ 08,13 height 07 width 47

   Label  @ 0,00 "Soma na Nota" for "Frete_Incluso"
   Label  @ 1,05 "Sim/N„o" for "Frete_Incluso"
   Accept @ 1,01  Width 4 "A1" picture "S,N" Tag "Frete_Incluso" to VSD_Frete_Incluso

   Label  @ 0,16 "Valor Frete" For "Valor_Frete"
   Accept @ 1,16 Width 13 "$" picture "#*#.[##]" Tag "Valor_Frete" to VSD_Frete

   Label  @ 0,31 "Valor ICMS" for "VICMS_Frete"
   Accept @ 1,31 Width 13 "$" picture "#*#.[##]" Tag "VICMS_Frete" to VSD_VICMS_Frete

   @ 03,00 ?? "*Obs: Estes valores serÆo utilizados para" 
   @ 04,00 ?? "      rateio no custo dos itens !"
    
Enddialog
Mouse Show
EndProc  ; (Digita_Frete)

;*******************************************************************************
;* Rotina para Lancamento a Vista                                              *
;*******************************************************************************
Proc Digita_AVista()
Private MSG_ATUA

If PARAM_ATUA_CXBC="S"
   Then MSG_ATUA=" - ATUALIZANDO !"
   Else MSG_ATUA=" - NAO ATUALIZA !"
EndIf

Exclusao_Cabeca=False
Moveto "NotaECV"
VALORANT=[Valor]
If RecordStatus("New")
   Then CHAVEAV=1
        [Tipo do Lancamento ]="A"
        [Codigo do Documento]=[NotaEC->Codigo do Documento]
        [Numero do Documento]=[NotaEC->Numero do Documento]
        [Valor              ]=[NotaEC->Valor Nota Fiscal  ]
   Else CHAVEAV=0
EndIf

INICIO_DIALOG=True
CopyToArray RegItem

Registro_AVista("Ler")

Showdialog "Caixa/Banco"+MSG_ATUA Proc "AVista_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC","ClearArea"
     @ 04,02 height 18 width 74

   Label  @ 00,00 "Conta" For "V_Conta"
   Accept @ 01,01 Width 07 "A4" picture "#*#" Tag "V_Conta" to VSD_V_Conta
   Accept @ 01,07 Width 48 "A27" picture "!*!" Tag "V_Descricao_Conta" to VSD_V_Descricao_Conta

   Label  @ 00,56 "Lan‡to Cxa/Bco" For "V_Lancamento"
   Accept @ 01,62 Width 09 "A6" picture "#*#" Tag "V_Lancamento" to VSD_V_Lancamento

   Label  @ 02,00 "Tipo Opera‡„o" For "V_Tpoper"                    
   Accept @ 03,01 Width 05 "A2" picture "#*#" Tag "V_Tpoper" to VSD_V_Tpoper
   Accept @ 03,05 Width 22 "A20" picture "!*!" Tag "I_Descricao_Tpoper" to VSD_I_Descricao_Tpoper

   Label  @ 02,27 "Tipo Lan‡amento" For "V_TpLancto"
   Accept @ 03,28 Width 04 "A1" picture "!" Tag "V_TpLancto" to VSD_V_TpLancto
   Accept @ 03,32 Width 23 "A20" picture "!*!" Tag "V_Descricao_TpLancto" to VSD_V_Descricao_TpLancto

   Label  @ 04,00 "Codigo Documento" For "V_CdDocto"
   Accept @ 05,01 Width 07 "A4" picture "!*!" Tag "V_CdDocto" to VSD_V_CdDocto
   Accept @ 05,08 Width 07 "A4" picture "!*!" Tag "V_TpDocto" to VSD_V_TpDocto
   Accept @ 05,15 Width 07 "A4" picture "!*!" Tag "V_SrDocto" to VSD_V_SrDocto
   
   Label  @ 04,22 "N§ Documento" For "V_NoDocto"
   Accept @ 05,23 Width 16 "A10" picture "!*!" Tag "V_NoDocto" to VSD_V_NoDocto

   Label  @ 06,00 "Vr.Lan‡to" For "V_Vr_Lancto"
   Accept @ 07,01 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Lancto" to VSD_V_Vr_Lancto

   Label  @ 06,13 "Vr.Juros" For "V_Vr_Juros"
   Accept @ 07,14 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Juros" to VSD_V_Vr_Juros
   
   Label  @ 06,26 "Vr.Descto" For "V_Vr_Descto"
   Accept @ 07,27 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Descto" to VSD_V_Vr_Descto

   Label  @ 08,00 "N§ Cheque" For "V_NoCheque"                                                          
   Accept @ 09,01 Width 13 "A11" picture "!*!" Tag "V_NoCheque" to VSD_V_NoCheque

   Label  @ 08,14 "Dt   Pre-Datado" For "I_DtCPrDat"
   Accept @ 09,15 Width 04 "A1" picture "S,N" Tag "I_ChPreDat" to VSD_I_ChPreDat
   Accept @ 09,19 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_DtCPrDat" to VSD_I_DtCPrDat

   Label  @ 08,32 "Dt.Descto" For "V_DtDescto"
   Accept @ 09,33 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtDescto" to VSD_V_DtDescto

   Label  @ 10,00 "Plano Contas" For "V_PlContas"
   Accept @ 11,01 Width 16 "A13" picture "!*!" Tag "V_PlContas" to VSD_V_PlContas
   Accept @ 11,17 Width 38 "A35" picture "!*!" Tag "V_Descricao_PlContas" to VSD_V_Descricao_PlContas

   Label  @ 12,00 "Centro Custo" For "V_CCusto"
   Accept @ 13,01 Width 10 "A7" picture "###.###" Tag "V_CCusto" to VSD_V_CCusto
   Accept @ 13,11 Width 28 "A25" picture "!*!" Tag "V_Descricao_CCusto" to VSD_V_Descricao_CCusto

   Label  @ 14,00 "Historico" For "V_Codigo_Hist"
   Accept @ 15,01 Width 07 "A4" picture "#*#" Tag "V_Codigo_Hist" to VSD_V_Codigo_Hist
   Accept @ 15,08 Width 63 "A70" picture "!*!" Tag "V_Descri_Hist" to VSD_V_Descri_Hist

Enddialog
Mouse Show
If CHAVEAV<>9
   Then CONTA()
EndIf
Moveto "NotaEC"
Moveto [Tipo de Pagamento]
EndProc  ; (Digita_AVista)

;*******************************************************************************
;* Rotina de Digitacao Dados a Vista                                           *
;*******************************************************************************
Proc AVista_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5

CAIXA_BANCO=True
TECLA=" Esc=Retornar  "
MSG_CAMPO=""

If INICIO_DIALOG
   Then TECLA=TECLA+"F1=Tabelas  "
        SelectControl "V_Conta"
        INICIO_DIALOG=False
EndIf

Temp=True

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
       Case Evento["KeyCode"] = 9:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEAV=0
               Then If QuerExcluir("")
                       Then CopyFromArray RegItem
                            Exclusao_Cabeca=False
                            CHAVEAV=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="V_Conta"     Or
               Campo="V_CdDocto"   Or
               Campo="V_PlContas"  Or
               Campo="V_CCusto"    Or
               Campo="V_Codigo_Hist"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="V_Conta"       Then Moveto [Codigo da Conta    ] EndIf
                    If Campo="V_CdDocto"     Then Moveto [Codigo do Documento] EndIf
                    If Campo="V_CCusto"      Then Moveto [Codigo CCusto      ] EndIf
                    If Campo="V_PlContas"    Then Moveto [Codigo Plano_Conta ] EndIf
                    If Campo="V_Codigo_Hist" Then Moveto [Codigo do Historico] EndIf
                    ConsultaF1()

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

                    echo Normal
                    echo off

                    If Campo="V_Conta"
                       Then VSD_V_Conta          =[Codigo da Conta   ]
                            VSD_V_Descricao_Conta=[Descricao da Conta]
                            VSD_V_Tipo_Conta     =[Tipo da Conta     ]
                            SelectControl "V_Conta"
                    EndIf
                    If Campo="V_CdDocto"
                       Then VSD_V_CdDocto           =[Codigo do Documento]
                            VSD_V_TpDocto           =[Tipo do Documento  ]
                            VSD_V_SrDocto           =[Serie do Documento ]
                            SelectControl "V_CdDocto"
                    EndIf
                    If Campo="V_PlContas"
                       Then VSD_V_PlContas          =[Codigo Plano_Conta   ]
                            VSD_V_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                            SelectControl "V_PlContas"
                   EndIf
                   If Campo="V_CCusto"
                       Then VSD_V_CCusto          =[Codigo CCusto   ]
                            VSD_V_Descricao_CCusto=LTrim([Descricao CCusto])
                            SelectControl "V_CCusto"
                   EndIf
                    If Campo="V_Codigo_Hist"
                       Then VSD_V_Codigo_Hist     =[Codigo do Historico]
                            VSD_V_Descri_Hist     =[Descricao do Historico]
                            Campo="V_Codigo_Hist"
                   EndIf
                   TECLA=TECLA+"F1=Tabelas  "
                   Moveto "NotaECV"
                   RefreshDialog
           EndIf
           
           If Campo="V_Tpoper"
              Then If Seleciona_Opcoes("Tipo de Opera‡„o","CR",8,4)
                      Then VSD_V_Tpoper          =[Tipo de Operacao  ]
                           VSD_I_Descricao_Tpoper=[Descricao Operacao]
                   EndIf
                   SelectControl "V_Tpoper"
                   RefreshDialog
           Endif           
           
           If Campo="V_TpLancto" 
              Then If Seleciona_Opcoes("Tipo de Lan‡amento","CR",8,31)
                      Then VSD_V_TpLancto          =[Tipo do Lancamento]
                           VSD_V_Descricao_TpLancto=[Descricao do Lancamento]
                   EndIf
                   SelectControl "V_TpLancto"
                   RefreshDialog
           Endif

           Temp=False
      Case Evento["KeyCode"] = 27: 
           Switch
             Case Campo="V_Conta":
                  If QuerDesfazer("")
                     Then If CHAVEAV = 1 Or RecordStatus("Modified")=True
                             Then Del
                          EndIf   
                          CHAVEAV=9
                          CancelDialog
                  EndIf
             Case Campo="V_Tpoper"               : 
                  SelectControl "V_Conta"
             Case Campo="V_TpLancto"             :
                  TECLA=TECLA+"F1=Tabelas  " 
                  Monta_Opcoes("Tipo de Opera‡„o",VSD_V_Conta)
                  SelectControl "V_Tpoper"
             Case Campo="V_CdDocto":
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Tipo de Lan‡amento",VSD_V_Tpoper)
                  SelectControl "V_TpLancto" 
             Case Campo="V_NoDocto":
                  TECLA=TECLA+"F1=Tabelas  "
                  SelectControl "V_CdDocto"
             Case Campo="V_Vr_Lancto":
                  SelectControl "V_NoDocto"
             Case Campo="V_Vr_Juros":
                  SelectControl "V_Vr_Lancto"
             Case Campo="V_Vr_Descto":
                  SelectControl "V_Vr_Juros"  
             Case Campo="V_NoCheque":
                  SelectControl "V_Vr_Descto"
             Case Campo="I_ChPreDat":
                  SelectControl "V_NoCheque"
             Case Campo="I_DtCPrDat":
                  SelectControl "I_ChPreDat"
             Case Campo="V_DtDescto":
                  SelectControl "I_ChPreDat"
             Case Campo="V_PlContas":
                  If VSD_V_Tipo_Conta<>"C"
                     Then SelectControl "V_Vr_Descto"
                     Else SelectControl "V_DtDescto"
                  EndIf       
             Case Campo="V_PlContas":
                  SelectControl "V_Vr_Descto"
             Case Campo="V_CCusto":
                  TECLA=TECLA+"F1=Tabelas  "
                  SelectControl "V_PlContas"
             Case Campo="V_Codigo_Hist":
                  TECLA=TECLA+"F1=Tabelas  "
                  SelectControl "V_CCusto"
             Case Campo="V_Descri_Hist":
                  SelectControl "V_Codigo_Hist"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="V_Conta":
                  VSD_V_Conta=ControlValue("V_Conta")
                  TECLA=TECLA+"F1=Tabelas  "
                  If Not IsBlank(VSD_V_Conta)
                     Then Moveto [Codigo da Conta]
                          Ativa_Lookup()
                          Moveto [Codigo da Conta]
                          Locate VSD_V_Conta
                          If RetVal
                             Then VSD_V_Conta          =[Codigo da Conta   ]
                                  VSD_V_Descricao_Conta=[Descricao da Conta]
                                  VSD_V_Tipo_Conta     =[Tipo da Conta     ]
                                  KeyPress "ESC"
                                  Moveto "NotaECV"
                                  [Codigo da Conta]=VSD_V_Conta
                                  Monta_Opcoes("Tipo de Opera‡„o",VSD_V_Conta)
                                  SelectControl "V_Tpoper"
                             Else Mensagem("Conta n„o Cadastrada !")
                                  VSD_V_Conta          =""
                                  VSD_V_Descricao_Conta=""
                                  VSD_V_Tipo_Conta     =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_Tpoper"             : 
                  VSD_V_Tpoper=AlinhM(ControlValue("V_Tpoper"),2)
                  If Checa_Opcoes("Tipo de Opera‡„o",VSD_V_Tpoper)
                     Then VSD_V_Tpoper          =Registro_F1["Tipo de Operacao"]
                          VSD_I_Descricao_Tpoper=Registro_F1["Descricao Operacao"]
                          [Tipo de Operacao    ]=VSD_V_Tpoper
                          Monta_Opcoes("Tipo de Lan‡amento",VSD_V_Tpoper)
                          SelectControl "V_TpLancto"
                     Else Mensagem("Tipo Opera‡„o n„o cadastrada !")
                          VSD_V_Tpoper=""
                          VSD_I_Descricao_Tpoper=""
                  EndIf
             Case Campo="V_TpLancto":
                  VSD_V_TpLancto=ControlValue("V_TpLancto")
                  If Checa_Opcoes("Tipo de Lan‡amento",VSD_V_TpLancto)
                     Then VSD_V_TpLancto          =Registro_F1["Tipo do Lancamento"]
                          VSD_V_Descricao_TpLancto=Registro_F1["Descricao do Lancamento"]
                          [Tipo do Lancamento]    =VSD_V_TpLancto
                          SelectControl "V_CdDocto"
                     Else Mensagem("Tipo Lan‡amento n„o cadastrado !")
                          VSD_V_TpLancto=""
                          VSD_V_Descricao_TpLancto=""
                  EndIf             
             Case Campo="V_CdDocto":
                  VSD_V_CdDocto=ControlValue("V_CdDocto")
                  If Not IsBlank(VSD_V_CdDocto)
                     Then Moveto [Codigo do Documento]
                          Ativa_Lookup()
                          Moveto [Codigo do Documento]
                          Locate VSD_V_CdDocto
                          If RetVal
                             Then VSD_V_CdDocto          =[Codigo do Documento]
                                  VSD_V_TpDocto          =[Tipo do Documento  ]
                                  VSD_V_SrDocto          =[Serie do Documento ]
                                  KeyPress "ESC"
                                  Moveto "NotaECV"
                                  [Codigo do Documento]=VSD_V_CdDocto
                                  SelectControl "V_NoDocto"
                             Else Mensagem("Codigo Documento n„o Cadastrado !")
                                  VSD_V_CdDocto          =""
                                  VSD_V_TpDocto          =""
                                  VSD_V_SrDocto          =""
                                  TECLA=TECLA+"F1=Tabelas  "
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_NoDocto":
                  VSD_V_NoDocto=ControlValue("V_NoDocto")
                  SelectControl "V_Vr_Lancto"
             Case Campo="V_Vr_Lancto":
                  VSD_V_Vr_Lancto=ControlValue("V_Vr_Lancto")
                  SelectControl "V_Vr_Juros"
             Case Campo="V_Vr_Juros":
                  VSD_V_Vr_Juros=ControlValue("V_Vr_Juros")
                  SelectControl "V_Vr_Descto"
             Case Campo="V_Vr_Descto":
                  VSD_V_Vr_Descto=ControlValue("V_Vr_Descto")
                  TECLA=TECLA+"F1=Tabelas  "
                  If VSD_V_Tipo_Conta<>"C"
                     Then VSD_V_NoCheque=""
                          VSD_V_DtDescto=BlankDate()
                          VSD_I_ChPreDat=""
                          VSD_I_DtCPrDat=BlankDate()
                          SelectControl "V_PlContas"  
                     Else SelectControl "V_NoCheque"
                  EndIf  
             Case Campo="V_NoCheque":
                  VSD_V_NoCheque=ControlValue("V_NoCheque")
                  If Not IsBlank(VSD_V_NoCheque)
                     Then SelectControl "I_ChPreDat"
                  EndIf
             Case Campo="I_ChPreDat":
                  VSD_I_ChPreDat=ControlValue("I_ChPreDat")
                  Switch
                    Case IsBlank(VSD_I_ChPreDat) Or 
                         VSD_I_ChPreDat="N"      : VSD_I_ChPreDat="N"
                                                   VSD_I_DtCPrDat=BlankDate()
                                                   SelectControl "V_DtDescto"
                    Otherwise                    : SelectControl "I_DtCPrDat"
                  EndSwitch    
             Case Campo="I_DtCPrDat"             :
                  VSD_I_DtCPrDat=ControlValue("I_DtCPrDat")
                  If IsBlank(VSD_I_DtCPrDat) And VSD_I_ChPreDat="S" 
                     Then SelectControl "I_DtCPrDat"
                     Else SelectControl "V_DtDescto"  
                  EndIf     
             Case Campo="V_DtDescto":
                  VSD_V_DtDescto=ControlValue("V_DtDescto")
                  SelectControl "V_PlContas"
;******* MODIFICADO P/ J.LUIS EM 24/06/04 **************************************
             Case Campo="V_PlContas"           :
                  VSD_V_PlContas=ControlValue("V_PlContas")
                  If Not IsBlank(VSD_V_PlContas)
                     Then Moveto [Codigo Plano_Conta]
                          Ativa_Lookup()
                          Moveto [Codigo Plano_Conta]
                          Locate VSD_V_PlContas
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Plano de Contas a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_V_PlContas          =""
                                          VSD_V_Descricao_PlContas=""
                                          KeyPress "ESC"
                                          SelectControl "V_PlContas"
                                     Else VSD_V_PlContas           = [Codigo Plano_Conta]
                                          VSD_V_Descricao_PlContas = LTrim([Descricao Plano_Conta])
                                          KeyPress "ESC"
                                          Moveto "NotaECV"
                                          [Codigo Plano_Conta]=VSD_V_PlContas
                                          SelectControl "V_CCusto"
                                  Endif
                             Else Mensagem("Conta nao Cadastrada !")
                                  VSD_V_PlContas          =""
                                  VSD_V_Descricao_PlContas=""
                                  TECLA=TECLA+"F1=Tabelas  "
                                  KeyPress "ESC"
                          EndIf
                          If SubStr(VSD_V_PlContas,1,1)="1"
                             Then Mensagem("Conta n„o confere com tipo de movimento !")
                                  Campo="V_PlContas"
                                  VSD_V_PlContas          =""
                                  VSD_V_Descricao_PlContas=""
                                  SelectControl "V_PlContas"
                          EndIf
                          Echo Off
                     Else VSD_V_Descricao_PlContas=""
                          SelectControl "V_CCusto"
                  EndIf

             Case Campo="V_CCusto"             :
                  VSD_V_CCusto=ControlValue("V_CCusto")
                  If Not IsBlank(VSD_V_CCusto)
                     Then Moveto [Codigo CCusto]
                          Ativa_Lookup()
                          Moveto [Codigo CCusto]
                          Locate VSD_V_CCusto
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Centros de Custos a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_V_CCusto          =""
                                          VSD_V_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_V_CCusto          =[Codigo CCusto]
                                          VSD_V_Descricao_CCusto=LTrim([Descricao CCusto])
                                          KeyPress "ESC"
                                          Moveto "NotaECV"
                                          [Codigo CCusto]=VSD_V_CCusto
                                          SelectControl "V_Codigo_Hist"
                                  Endif
                             Else Mensagem("Centro de Custo n„o Cadastrado !")
                                  VSD_V_CCusto          =""
                                  VSD_V_Descricao_CCusto=""
                                  TECLA=TECLA+"F1=Tabelas  "
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_V_Descricao_CCusto=""
                          SelectControl "V_Codigo_Hist"
                  EndIf
;************** FIM MODIFICACAO **********************************************

             Case Campo="V_Codigo_Hist"        : SelectControl "V_Descri_Hist"
                  VSD_V_Codigo_Hist=ControlValue("V_Codigo_Hist")
                  If Not IsBlank(VSD_V_Codigo_Hist)
                     Then VSD_V_Codigo_Hist=AlinhM(VSD_V_Codigo_Hist,4)
                          Moveto [Codigo do Historico]
                          Ativa_Lookup()
													Moveto [Codigo do Historico]
                          Locate VSD_V_Codigo_Hist
                          If RetVal
                             Then If HIOLD<>VSD_V_Codigo_Hist
                                     Then VSD_V_Descri_Hist  =[Descricao do Historico]
                                  EndIf
                                  KeyPress "ESC"
                                  If HIOLD<>VSD_V_Codigo_Hist
                                     Then HISTORICO()
                                  EndIf
                                  HIOLD =VSD_V_Codigo_Hist
														 Else Mensagem("Historico n„o Cadastrado !")
                                  VSD_V_Codigo_Hist=""
                                  VSD_V_Descri_Hist=""
                                  KeyPress "ESC"
                                  SelectControl "V_Codigo_Hist"
                          EndIf
                          Echo Off
                     Else HIOLD =VSD_V_Codigo_Hist
                  EndIf
             Case Campo="V_Descri_Hist"     :
                  VSD_V_Descri_Hist=ControlValue("V_Descri_Hist")
                  CancelDialog
           EndSwitch
           RefreshDialog
           Registro_AVista("Gravar")
           Temp=False
   EndSwitch
EndIf

If CHAVEAV=0
   Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf
@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSG_CAMPO)
Mouse Hide
Return TEMP
EndProc  ; (AVista_Dialog)

;*******************************************************************************
;* Rotina para Gravacao/Leitura Pagto a Vista                                  *
;*******************************************************************************
Proc Registro_AVista(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Numero do Lancamento CxBc]=VSD_V_Lancamento
       [Codigo da Conta          ]=VSD_V_Conta
       [Codigo da Empresa        ]=[NotaEC->Codigo da Empresa]
       [Tipo da Conta            ]=VSD_V_Tipo_Conta
       [Descricao da Conta       ]=VSD_V_Descricao_Conta
       [Valor                    ]=VSD_V_Vr_Lancto
       [Valor do Desconto        ]=VSD_V_Vr_Descto
       [Valor do Juros           ]=VSD_V_Vr_Juros
       [Numero do Cheque         ]=VSD_V_NoCheque
       [Cheque Pre-Datado        ]=VSD_I_ChPreDat
       [Data Cheque Pre-Datado   ]=VSD_I_DtCPrDat       
       [Codigo do Documento      ]=VSD_V_CdDocto
       [Tipo do Documento        ]=VSD_V_TpDocto
       [Serie do Documento       ]=VSD_V_SrDocto
       [Numero do Documento      ]=VSD_V_NoDocto
       [Tipo do Lancamento       ]=VSD_V_TpLancto
       [Descricao do Lancamento  ]=VSD_V_Descricao_TpLancto
       [Data Cheque Descontado   ]=VSD_V_DtDescto
       [Codigo Plano_Conta       ]=VSD_V_PlContas
       [Descricao Plano_Conta    ]=VSD_V_Descricao_PlContas
       [Tipo de Operacao         ]=VSD_V_Tpoper
       [Descricao Operacao       ]=VSD_I_Descricao_Tpoper       
       [Codigo CCusto            ]=VSD_V_CCusto
       [Descricao CCusto         ]=VSD_V_Descricao_CCusto
       [Codigo do Historico      ]=VSD_V_Codigo_Hist
       [Descricao do Historico   ]=VSD_V_Descri_Hist
  Case Funcao_Registro="Ler":
       VSD_V_Lancamento           =[Numero do Lancamento CxBc]
       VSD_V_Conta                =[Codigo da Conta          ]
       VSD_V_Tipo_Conta           =[Tipo da Conta            ]
       VSD_V_Descricao_Conta      =[Descricao da Conta       ]
       VSD_V_Vr_Lancto            =[Valor                    ]
       VSD_V_Vr_Descto            =[Valor do Desconto        ]
       VSD_V_Vr_Juros             =[Valor do Juros           ]
       VSD_V_NoCheque             =[Numero do Cheque         ]
       VSD_I_ChPreDat             =[Cheque Pre-Datado        ]
       VSD_I_DtCPrDat             =[Data Cheque Pre-Datado   ]
       VSD_V_CdDocto              =[Codigo do Documento      ]
       VSD_V_TpDocto              =[Tipo do Documento        ]
       VSD_V_SrDocto              =[Serie do Documento       ]
       VSD_V_NoDocto              =[Numero do Documento      ]
       VSD_V_TpLancto             =[Tipo do Lancamento       ]  
       VSD_V_Descricao_TpLancto   =[Descricao do Lancamento  ]
       VSD_V_Tpoper               =[Tipo de Operacao         ]
       VSD_I_Descricao_Tpoper     =[Descricao Operacao       ]
       VSD_V_DtDescto             =[Data Cheque Descontado   ]
       VSD_V_PlContas             =[Codigo Plano_Conta       ]
       VSD_V_Descricao_PlContas   =[Descricao Plano_Conta    ]
       VSD_V_CCusto               =[Codigo CCusto            ]
       VSD_V_Descricao_CCusto     =[Descricao CCusto         ]
       VSD_V_Codigo_Hist          =[Codigo do Historico      ]
       VSD_V_Descri_Hist          =[Descricao do Historico   ]
       HIOLD                      =[Codigo do Historico      ]
       VSD_V_Flag                 =""

EndSwitch
EndProc  ; (Registro_AVista)

;*******************************************************************************
;** Inclusao, Alteracao de Caixa/Banco                                        **
;*******************************************************************************
Proc CONTA()
Private SEQMOV
If PARAM_ATUA_CXBC<>"S"
   Then If CHAVEAV=8
           Then Del
        EndIf
   Else Moveto "NotaECV"
        UnLockRecord

        Moveto "NotaEC"
        UnLockRecord
        KeyPress "F7"

        Caixa_Banco_Ok=True
        Moveto "\\sistemas\\ctacor\\MovCont"
        Moveto [Numero do Lancamento]
        Locate [NotaECV->Numero do Lancamento CxBc]
        If Not RetVal
           Then Caixa_Banco_Ok=False
        EndIf

        ;*** Em Caso de Erro ***
        If Caixa_Banco_Ok
           Then MSG=    "Movimento no Caixa/Banco n„o corresponde a esta Nota !//"
           Else MSG=    "Lan‡amento no Caixa/Banco n„o encontrado p/ esta Nota !//"
        EndIf
        MSG=MSG+"Verificar no Caixa/Banco se o mes n„o foi fechado !//"
        MSG=MSG+"Neste caso o estorno no Caixa/Banco n„o sera efefuado !//"
        MSG=MSG+"Talvez algum outro erro gerou este problema !//"
        ;***********************

        Switch
          Case CHAVEAV=1:
               If Not IsBlank([NotaECV->Numero do Lancamento CxBc])
                  Then MSG=    "J  existe um Lan‡amento no Caixa/Banco p/ esta Nota !//"
                       MSG=MSG+"Verificar no Caixa/Banco o Lan‡amento e Corrigi-lo !//"
                       MSG=MSG+"Talvez algum erro gerou este problema !//"
                       Mensagem()
               EndIf

              While True
                 End
                 If [Numero do Lancamento]=""
                    Then SEQMOV="000001"
                    Else SEQMOV=ALINHM(StrVal(NumVal([Numero do Lancamento])+1),6)
                 EndIf
                 Down
                 [Numero do Lancamento]=SEQMOV
                 If Not IsLockRecord() Then QuitLoop EndIf
               EndWhile
               Caixa_Banco_Ok=True

               [Codigo da Conta       ]=[NotaECV->Codigo da Conta     ]
               [Codigo da Empresa     ]=[NotaEC->Codigo da Empresa    ]
               [Data                  ]=[NotaEC->Data de Entrada      ]
               [Valor                 ]=[NotaECV->Valor               ]
               [Valor do Desconto     ]=[NotaECV->Valor do Desconto   ]
               [Valor do Juros        ]=[NotaECV->Valor do Juros      ]
               [Numero do Cheque      ]=[NotaECV->Numero do Cheque    ]
               [Codigo do Documento   ]=[NotaECV->Codigo do Documento ]
               [Numero do Documento   ]=[NotaECV->Numero do Documento ]
               If [NotaECV->Tipo da Conta]="X"
                  Then [Tipo de Operacao]="06"
                  Else [Tipo de Operacao]="05"
               EndIf
               [Descricao do Historico]="PG "+[NotaECV->Tipo do Documento]+"/"+[NotaECV->Numero do Documento]
               [Sistema Gerador       ]="NE"
               [Empresa Gerador       ]=[NotaEC->Codigo da Empresa      ]
               [Lancamento Gerador    ]=[NotaEC->Numero do Lancamento   ]
               [Codigo do EmitDest    ]=[NotaEC->Codigo                 ]
               [Tipo do Lancamento    ]=[NotaECV->Tipo do Lancamento    ]
               [Data Cheque Descontado]=[NotaECV->Data Cheque Descontado]
               [Codigo CCusto         ]=[NotaECV->Codigo CCusto         ]
               [Codigo Plano_Conta    ]=[NotaECV->Codigo Plano_Conta    ]
               If Not IsBlank([NotaECV->Codigo do Historico])
                  Then [Codigo do Historico   ]=[NotaECV->Codigo do Historico   ]
                       [Descricao do Historico]=[NotaECV->Descricao do Historico]
                  Else If Not IsBlanK([NotaECV->Descricao do Historico])
                          Then [Descricao do Historico]=[NotaECV->Descricao do Historico   ]
                       EndIf
               EndIf
               Controle_Dia()
               UnLockRecord

               Moveto "NotaECV"
               [Numero do Lancamento CxBc]=SEQMOV
               UnLockRecord

               Atualiza_Saldo_Conta()
          Case CHAVEAV=0:
               If Not Caixa_Banco_Ok  Or
                  (Caixa_Banco_Ok  And
                   ([Sistema Gerador       ]<>"NE" Or
                    [Empresa Gerador       ]<>[NotaEC->Codigo da Empresa   ] Or
                    [Lancamento Gerador    ]<>[NotaEC->Numero do Lancamento] Or
                    [Codigo do Documento   ]<>[NotaECV->Codigo do Documento] Or
                    [Numero do Documento   ]<>[NotaECV->Numero do Documento]))
                    Then UnLockRecord
                         Moveto "NotaECV"
                         CopyFromArray RegItem
                         UnLockRecord
                         MSG=MSG+"Se necess rio exclua este Lan‡amento a Vista e fa‡a-o novamente !"
                         Mensagem(MSG)
                    Else [Codigo da Conta       ]=[NotaECV->Codigo da Conta     ]
                         [Codigo da Empresa     ]=[NotaEC->Codigo da Empresa    ]
                         [Data                  ]=[NotaEC->Data de Entrada      ]
                         [Valor                 ]=[NotaECV->Valor               ]
                         [Valor do Desconto     ]=[NotaECV->Valor do Desconto   ]
                         [Valor do Juros        ]=[NotaECV->Valor do Juros      ]
                         [Numero do Cheque      ]=[NotaECV->Numero do Cheque    ]
                         [Codigo do Documento   ]=[NotaECV->Codigo do Documento ]
                         [Numero do Documento   ]=[NotaECV->Numero do Documento ]
                         If [NotaECV->Tipo da Conta]="X"
                            Then [Tipo de Operacao]="06"
                            Else [Tipo de Operacao]="05"
                         EndIf
                         [Descricao do Historico]="PG "+[NotaECV->Tipo do Documento]+"/"+[NotaECV->Numero do Documento]
                         [Sistema Gerador       ]="NE"
                         [Empresa Gerador       ]=[NotaEC->Codigo da Empresa      ]
                         [Lancamento Gerador    ]=[NotaEC->Numero do Lancamento   ]
                         [Codigo do EmitDest    ]=[NotaEC->Codigo                 ]
                         [Tipo do Lancamento    ]=[NotaECV->Tipo do Lancamento    ]
                         [Data Cheque Descontado]=[NotaECV->Data Cheque Descontado]
                         [Codigo CCusto         ]=[NotaECV->Codigo CCusto         ]
                         [Codigo Plano_Conta    ]=[NotaECV->Codigo Plano_Conta    ]
                         [Codigo do Historico   ]=[NotaECV->Codigo do Historico   ]
                         If Not IsBlank([NotaECV->Codigo do Historico])
                            Then [Codigo do Historico   ]=[NotaECV->Codigo do Historico   ]
                                 [Descricao do Historico]=[NotaECV->Descricao do Historico]
                            Else If Not IsBlanK([NotaECV->Descricao do Historico])
                                    Then [Descricao do Historico]=[NotaECV->Descricao do Historico   ]
                                 EndIf
                         EndIf
                         UnLockRecord
                         Moveto "NotaECV"
                         UnLockRecord

                         Atualiza_Saldo_Conta()
               EndIf
          Case CHAVEAV=8:
               If Not Caixa_Banco_Ok  Or
                  (Caixa_Banco_Ok  And
                   ([Sistema Gerador       ]<>"NE" Or
                    [Empresa Gerador       ]<>[NotaEC->Codigo da Empresa   ] Or
                    [Lancamento Gerador    ]<>[NotaEC->Numero do Lancamento] Or
                    [Codigo do Documento   ]<>[NotaECV->Codigo do Documento] Or
                    [Numero do Documento   ]<>[NotaECV->Numero do Documento]))
                    Then UnLockRecord
                         Moveto "NotaECV"
                         If Exclusao_Cabeca
                            Then Mensagem(MSG)
                                 OK="S"
                            Else MSG=MSG+"Deseja Excluir assim mesmo ?"
                                 ConfGeral(MSG)
                         EndIf
                         If OK="S"
                            Then Del
                         EndIf
                    Else Atualiza_Saldo_Conta()
                         Moveto "\\Sistemas\\CtaCor\\MovCont"
                         Del
                         Moveto "NotaECV"
                         Del
               EndIf
        EndSwitch

        Moveto "NotaEC"
        KeyPress "F7"
        Moveto "NotaECV"
EndIf
EndProc  ; (Conta)

;*******************************************************************************
;* Rotina para Atualizar o Saldo da Conta                                      *
;*******************************************************************************
Proc Atualiza_Saldo_Conta()
Moveto "\\Sistemas\\CtaCor\\SaldCont"
Moveto [Codigo da Conta]
Locate [NotaECV->Codigo da Conta],ANO,MES
If Not RetVal
   Then End
        Down
        [Codigo da Conta]=[NotaECV->Codigo da Conta]
        [Ano Referencia ]=ANO
        [Mes Referencia ]=MES
EndIf
If CHAVEAV<>8
   Then [Saidas]=([Saidas]-VALORANT)+[NotaECV->Valor]
   Else [Saidas]=[Saidas]-[NotaECV->Valor]
EndIf
UnLockRecord
EndProc  ; (Atualiza_Saldo_Conta)

;*******************************************************************************
;* Rotina para Localizar Item - Digitacao de Contas a Pagar                    *
;*******************************************************************************
Proc CHAVEAP()
While True

  Moveto "NotaEcp"
  End
  SEQ = [Sequencia do Lancamento]
  Down
  Moveto [Sequencia do Lancamento]

  If IsBlank(SEQ)
     Then SEQ   = 1
     Else SEQ   = SEQ + 1
  EndIf
  []=SEQ
  LockRecord
  Locate SEQ

  Opcao_Ver    =False
  SetaCorRegistro("Editar")
  While True

    TECLA=" Esc=Retornar  F3=Ver Ficha  F7=Paginar  "
    If Not IsBlank([NotaEC->Numero da OC])
       Then TECLA=TECLA+"F8=Venctos_OC  "
       Else TECLA=TECLA+"               "
    EndIf
    TECLA=TECLA+"PgDn=Finalizar  "
    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","F3","F7","HOME","UP","PGUP","PGDN","PGUP","F8"

    Switch
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           PAGINA("NotaEcp","MR")
           If EDITAR="S"
              Then CHAVEAP=0
                   Controla_EdicaoAP()
              Else If EXCLUIR="S"
                      Then If Checa_Supervisor()
                              Then If QuerExcluir("")
                                      Then CopyToArray RegItem
                                           Exclusao_Cabeca=False
                                           CHAVEAP=8
                                           TITULOS()
                                      Else UnLockRecord
                                   EndIf
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case RetVal="F3":
         Del
         Moveto [Sequencia do Lancamento]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEAP=0
         Home
         SEQ=[Sequencia do Lancamento]
         Inicia_Registro_Venctos()
         Digita_APrazo()
         QuitLoop
    Case Retval="F8" And Not IsBlank([NotaEC->Numero da OC]):
         Del
         OC_VENCTOS()
         QuitLoop
    Case Retval="ESC" Or Retval="PGDN":
         CHAVEAP=9
         If Retval="PGDN"
            Then CHAVEAP=7
         EndIf

         Moveto [Valor do Documento]
         TOTVENC=ImageCSum()

         If NumVal(StrVal(TOTVENC)) <> NumVal(StrVal([Notaec->Valor Nota Fiscal]))
            Then MSG="Total dos vencimentos difere do total da nota !//"
                 MSG=MSG+"   Nota = "+Format("W10.2,EIC",[Notaec->Valor Nota Fiscal])+"//"
                 MSG=MSG+"Venctos = "+Format("W10.2,EIC",TOTVENC)
                 Mensagem(MSG)
         Endif
     
         Del
         Return
    Case Retval="ENTER":
         If Isblank([])
            Then If IsBlank(SEQ)
                    Then SEQ=1
                    Else SEQ=SEQ+1
                 EndIf
                 []=SEQ
         EndIf
         SEQ=[]
         Del
         Locate LANCTO,SEQ
         If Retval
            Then CHAVEAP=0
            Else CHAVEAP=1
                 End Down
                 [Numero do Lancamento   ]=LANCTO
                 [Sequencia do Lancamento]=SEQ
                 UnLockRecord
                 Locate LANCTO,SEQ
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc  ; (ChaveaP)

;*******************************************************************************
;* Rotina de Digitacao Dados a Prazo                                           *
;*******************************************************************************
Proc APrazo_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5

CAIXA_BANCO=False
TECLA=" Esc=Retornar  "
MSG_CAMPO=""
Temp=True

If INICIO_DIALOG
   Then Campo="V_Conta"
        INICIO_DIALOG=False
EndIf

If Opcao_Ver Then Campo="I_Seq" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
     Case Opcao_Ver=True:
          Temp=False
          Switch
            Case Evento["KeyCode"] =  27:
                 CancelDialog
            OtherWise:
              Mover_Reg=True
              Switch
                Case Evento["KeyCode"] = -71:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Home
                     EndIf
                Case Evento["KeyCode"] = -79:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else End
                     EndIf
                Case Evento["KeyCode"] = -73:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Up
                     EndIf
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQ=[Sequencia do Lancamento]
                      Inicia_Registro_Venctos()
              EndIf
          EndSwitch
       Case Evento["KeyCode"] = 9:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEAP=0
               Then If QuerExcluir("")
                       Then CopyFromArray RegItem
                            CHAVEAP=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="V_Conta"       Or
               Campo="V_CdDocto"     Or
               Campo="V_TpPagto"     Or
               Campo="V_PlContas"    Or
               Campo="V_CCusto"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="V_Conta"       Then Moveto [Codigo da Conta    ] EndIf
                    If Campo="V_CdDocto"     Then Moveto [Codigo do Documento] EndIf
                    If Campo="V_TpPagto"     Then Moveto [Tipo do Pagamento  ] EndIf
                    If Campo="V_CCusto"      Then Moveto [Codigo CCusto      ] EndIf
                    If Campo="V_PlContas"    Then Moveto [Codigo Plano_Conta ] EndIf
                    ConsultaF1()

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

                    echo Normal
                    echo off

                    If Campo="V_Conta"
                       Then VSD_V_Conta          =[Codigo da Conta   ]
                            VSD_V_Descricao_Conta=[Descricao da Conta]
                    EndIf
                    If Campo="V_CdDocto"
                       Then VSD_V_CdDocto           =[Codigo do Documento]
                            VSD_V_TpDocto           =[Tipo do Documento  ]
                            VSD_V_SrDocto           =[Serie do Documento ]
                    EndIf
                    If Campo="V_TpPagto"
                       Then VSD_V_TpPagto          =[Tipo do Pagamento       ]
                            VSD_V_Descricao_TpPagto=[Descricao Tipo Pagamento]
                    EndIf
                    If Campo="V_CCusto"
                       Then VSD_V_CCusto          =[Codigo CCusto   ]
                            VSD_V_Descricao_CCusto=[Descricao CCusto]
                   EndIf
                    If Campo="V_PlContas"
                       Then VSD_V_PlContas          =[Codigo Plano_Conta   ]
                            VSD_V_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                   EndIf
           EndIf
                      
           If Campo="V_Tpoper"
              Then If Seleciona_Opcoes("Tipo de Opera‡„o","CR",9,4)
                      Then VSD_V_Tpoper          =[Tipo de Operacao  ]
                           VSD_I_Descricao_Tpoper=[Descricao Operacao]
                   EndIf
                   SelectControl "V_Tpoper"
                   RefreshDialog
           Endif           
           
           If Campo="V_TpLancto" 
              Then If Seleciona_Opcoes("Tipo de Lan‡amento","CR",9,31)
                      Then VSD_V_TpLancto          =[Tipo do Lancamento]
                           VSD_V_Descricao_TpLancto=[Descricao do Lancamento]
                   EndIf
                   SelectControl "V_TpLancto"
                   RefreshDialog
           Endif           
           
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="V_Conta":
                  If QuerDesfazer("")
                     Then If CHAVEAP=1
                             Then Del
                          EndIf
                          CHAVEAP=9
                          CancelDialog
                  EndIf
             Case Campo="V_TpLancto"    : Campo="V_Conta"
                  TECLA=TECLA+"F1=Tabelas  "
             Case Campo="V_CdDocto":
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Tipo de Lan‡amento",VSD_V_Tpoper)
                  Campo="V_TpLancto"              
             Case Campo="V_NoDocto"     : Campo="V_CdDocto"
             Case Campo="V_DtVencto"    : Campo="V_NoDocto"
             Case Campo="V_DtaPagar"    : Campo="V_DtVencto"  
             Case Campo="V_Vr_Lancto"   : Campo="V_DtaPagar"
             Case Campo="V_TpPagto"     : Campo="V_Vr_Lancto"
             Case Campo="V_PlContas"    : Campo="V_TpPagto"
             Case Campo="V_CCusto"      : Campo="V_PlContas"
             Case Campo="V_DtCompet"    : Campo="V_CCusto"
             Case Campo="V_Vr_Descto"   : Campo="V_DtCompet"
             Case Campo="V_DtDescto"    : Campo="V_Vr_Descto"
             Case Campo="V_Multa"       : Campo="V_DtDescto"
             Case Campo="V_TxJuros"     : Campo="V_Multa"
             Case Campo="V_TpTxJuros"   : Campo="V_TxJuros"
             Case Campo="V_Observacoes" : Campo="V_TpTxJuros"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:   
           Switch
             Case Campo="V_Conta":
                  VSD_V_Conta=ControlValue("V_Conta")
                  If Not IsBlank(VSD_V_Conta)
                     Then Moveto [Codigo da Conta]
                          Ativa_Lookup()
                          Moveto [Codigo da Conta]
                          Locate VSD_V_Conta
                          If RetVal
                             Then VSD_V_Conta          =[Codigo da Conta   ]
                                  VSD_V_Descricao_Conta=[Descricao da Conta]
                                  KeyPress "ESC"
                                  Moveto "NotaECP"
                                  [Codigo da Conta ]=VSD_V_Conta
                                  Switch
                                    Case [Tipo da Conta]="X" : VSD_V_Tpoper="06"
                                    Case [Tipo da Conta]="C" : VSD_V_Tpoper="05"
                                  EndSwitch
                                  [Tipo de Operacao]=VSD_V_Tpoper
                                  Monta_Opcoes("Tipo de Lan‡amento",VSD_V_Tpoper)
                                  Campo="V_TpLancto"
                                  
                             Else Mensagem("Conta n„o Cadastrada !")
                                  VSD_V_Conta          =""
                                  VSD_V_Descricao_Conta=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_TpLancto":
                  VSD_V_TpLancto=ControlValue("V_TpLancto")
                  If Checa_Opcoes("Tipo de Lan‡amento",VSD_V_TpLancto)
                     Then VSD_V_TpLancto          =Registro_F1["Tipo do Lancamento"]
                          VSD_V_Descricao_TpLancto=Registro_F1["Descricao do Lancamento"]
                          [Tipo do Lancamento]    =VSD_V_TpLancto
                          Campo="V_CdDocto"
                     Else Mensagem("Tipo Lan‡amento n„o cadastrado !")
                          VSD_V_TpLancto=""
                          VSD_V_Descricao_TpLancto=""
                  EndIf                     
             Case Campo="V_CdDocto":
                  VSD_V_CdDocto=ControlValue("V_CdDocto")
                  If Not IsBlank(VSD_V_CdDocto)
                     Then Moveto [Codigo do Documento]
                          Ativa_Lookup()
                          Moveto [Codigo do Documento]
                          Locate VSD_V_CdDocto
                          If RetVal
                             Then VSD_V_CdDocto          =[Codigo do Documento]
                                  VSD_V_TpDocto          =[Tipo do Documento  ]
                                  VSD_V_SrDocto          =[Serie do Documento ]
                                  KeyPress "ESC"

                                  [Codigo do Documento]=VSD_V_CdDocto
                                  Campo="V_NoDocto"
                             Else Mensagem("Codigo Documento n„o Cadastrado !")
                                  VSD_V_CdDocto          =""
                                  VSD_V_TpDocto          =""
                                  VSD_V_SrDocto          =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_NoDocto"   : Campo="V_DtVencto"
                  VSD_V_NoDocto=ControlValue("V_NoDocto")
             Case Campo="V_DtVencto":
                  VSD_V_DtVencto=ControlValue("V_DtVencto")
                  If Not IsBlank(VSD_V_DtVencto)
                     Then If VSD_V_DtVencto<[NotaEC->Data de Emissao]
                             Then MENSAGEM("Data de Vencimento Menor que a Emiss„o")
                             Else VSD_V_DtaPagar=VSD_V_DtVencto
                                  While True
                                    NDIAS=0
                                    If Dow(VSD_V_DtaPagar)="Sat"
                                       Then NDIAS=2
                                       Else If Dow(VSD_V_DtaPagar)="Sun"
                                               Then NDIAS=1
                                            EndIf
                                    EndIf
                                    DIA = VSD_V_DtaPagar

                                    ;Moveto [Lookup_Feriado]
                                    ;Ativa_Lookup()
                                    ;Moveto [Data do Feriado]
                                    ;Locate DIA
                                    ;If Retval
                                    ;   Then NDIAS=[Dias a Pagar]
                                    ;EndIf
                                    ;KeyPress "ESC"
                                    ;Echo Off

                                    VSD_V_DtaPagar=VSD_V_DtaPagar+NDIAS
                                    If NDIAS=0
                                       Then QuitLoop
                                    EndIf
                                  EndWhile
                                  Campo="V_DtaPagar"
                          EndIf
                  EndIf
             Case Campo="V_DtaPagar":
                  VSD_V_DtaPagar=ControlValue("V_DtaPagar")
                  If Not IsBlank(VSD_V_DtaPagar)
                     Then Campo="V_Vr_Lancto"
                  EndIf
             Case Campo="V_Vr_Lancto":
                  VSD_V_Vr_Lancto=ControlValue("V_Vr_Lancto")
                  If Not IsBlank(VSD_V_Vr_Lancto)
                     Then Campo="V_TpPagto"
                  EndIf
             Case Campo="V_TpPagto": 
                  VSD_V_TpPagto=ControlValue("V_TpPagto")
                  If Not IsBlank(VSD_V_TpPagto)
                     Then Moveto [Tipo do Pagamento]
                          Ativa_Lookup()
                          Moveto [Tipo do Pagamento]
                          Locate VSD_V_TpPagto
                          If RetVal
                             Then VSD_V_TpPagto          =[Tipo do Pagamento       ]
                                  VSD_V_Descricao_TpPagto=[Descricao Tipo Pagamento]
                                  KeyPress "ESC"
                                  [Tipo do Pagamento]=VSD_V_TpPagto
                                  Campo="V_PlContas"
                             Else Mensagem("Forma Pagamento invalido !")
                                  VSD_V_TpPagto          =""
                                  VSD_V_Descricao_TpPagto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_PlContas"           :
                  VSD_V_PlContas=ControlValue("V_PlContas")
                  If Not IsBlank(VSD_V_PlContas)
                     Then Moveto [Codigo Plano_Conta]
                          Ativa_Lookup()
                          Moveto [Codigo Plano_Conta]
                          Locate VSD_V_PlContas
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Plano de Contas a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_V_PlContas          =""
                                          VSD_V_Descricao_PlContas=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_V_PlContas          =[Codigo Plano_Conta]
                                          VSD_V_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                                          VSD_V_Codigo_Hist        = [Codigo do Historico   ]
                                          KeyPress "ESC"

                                          [Codigo Plano_Conta]=VSD_V_PlContas
                                          Campo="V_CCusto"
                                  Endif
                             Else Mensagem("Conta nao Cadastrada !")
                                  VSD_V_PlContas          =""
                                  VSD_V_Descricao_PlContas=""
                                  KeyPress "ESC"
                          EndIf
                          If SubStr(VSD_V_PlContas,1,1)="1"
                             Then Mensagem("Conta n„o confere com tipo de movimento !")
                                  VSD_V_PlContas          =""
                                  VSD_V_Descricao_PlContas=""
                                  Campo="V_PlContas"
                          EndIf
                          Echo Off
                     Else VSD_V_Descricao_PlContas=""
                          Campo="V_CCusto"
                  EndIf
             Case Campo="V_CCusto"             :
                  VSD_V_CCusto=ControlValue("V_CCusto")
                  If Not IsBlank(VSD_V_CCusto)
                     Then Moveto [Codigo CCusto]
                          Ativa_Lookup()
                          Moveto [Codigo CCusto]
                          Locate VSD_V_CCusto
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Centros de Custos a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_V_CCusto          =""
                                          VSD_V_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_V_CCusto          =[Codigo CCusto]
                                          VSD_V_Descricao_CCusto=LTrim([Descricao CCusto])
                                          KeyPress "ESC"

                                          [Codigo CCusto]=VSD_V_CCusto
                                          Campo="V_DtCompet"
                                  Endif
                             Else Mensagem("Centro de Custo n„o Cadastrado !")
                                  VSD_V_CCusto          =""
                                  VSD_V_Descricao_CCusto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_V_Descricao_CCusto=""
                          Campo="V_DtCompet"
                  EndIf
             Case Campo="V_DtCompet":                  
                  If VSD_V_DtCompet =BlankDate() and CHAVEAP=1 
                     then VSD_V_DtCompet = [Notaec->Data de Emissao]
                     Else VSD_V_DtCompet=ControlValue("V_DtCompet")
                  EndIf
                  Campo="V_Vr_Descto"                                  
             Case Campo="V_Vr_Descto":
                  VSD_V_Vr_Descto=ControlValue("V_Vr_Descto")
                  If VSD_V_Vr_Descto<=0 Or IsBlank(VSD_V_Vr_Descto)
                     Then VSD_V_DtDescto=BlankDate()
                          Campo="V_Multa"
                     Else Campo="V_DtDescto"
                  EndIf
             Case Campo="V_DtDescto":
                  VSD_V_DtDescto=ControlValue("V_DtDescto")
                  If IsBlank(VSD_V_DtDescto) And VSD_V_Vr_Descto>0
                     Then Campo="V_DtDescto"
                     Else If Not IsBlank(VSD_V_DtDescto) And VSD_V_Vr_Descto<=0
                             Then Campo="V_DtDescto"
                             Else Campo="V_Multa"
                          EndIf
									EndIf
             Case Campo="V_Multa"    : Campo="V_TxJuros"
                  VSD_V_Multa=ControlValue("V_Multa")
             Case Campo="V_TxJuros"  : Campo="V_TpTxJuros"
                  VSD_V_TxJuros=ControlValue("V_TxJuros")
             Case Campo="V_TpTxJuros":
                  VSD_V_TpTxJuros=ControlValue("V_TpTxJuros")
                  If VSD_V_TpTxJuros="D" Or VSD_V_TpTxJuros="M" Or VSD_V_TpTxJuros="A" Or VSD_V_TpTxJuros=""
                     Then Switch
                          Case VSD_V_TpTxJuros="":
                               VSD_V_NDTxJuros=0
                          Case VSD_V_TpTxJuros="D":
                               VSD_V_NDTxJuros=1
                          Case VSD_V_TpTxJuros="M":
                               VSD_V_NDTxJuros=30
                          Case VSD_V_TpTxJuros="A":
                               VSD_V_NDTxJuros=365
                          EndSwitch
                          Campo="V_Observacoes"
                  EndIf
             Case Campo="V_Observacoes":
                  VSD_V_Observacoes=ControlValue("V_Observacoes")
                  TPPAGTO=[NotaEC->Tipo de Pagamento]
                  AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="V_Conta"    Or
   Campo="V_Tpoper"   Or
   Campo="V_TpLancto" Or
   Campo="V_CdDocto"  Or
   Campo="V_TpPagto"  Or
   Campo="V_CCusto"   Or
   Campo="V_PlContas"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="":
       MSGCAMPO=""
EndSwitch

If CHAVEAP=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
EndIf

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

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro_Venctos(ok)
Private ok
If Ok
   Then Registro_Item_Venctos("Gravar")
        Titulos()
   Else If CHAVEAP=0 or CHAVEAP=8
           Then CopyFromArray RegItem
        EndIf
        If CHAVEAP=8 Then Titulos() EndIf
EndIf
EndProc   ; (Finaliza_Registro_Venctos)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro_Venctos()
INICIO_DIALOG=True
Moveto [Sequencia do Lancamento]
Locate [NotaEC->Numero do Lancamento],SEQ
CopyToArray RegItem
Registro_Item_Venctos("Ler")
EndProc ; (Inicia_Registro_Venctos)

;*******************************************************************************
;* Rotina para Lancamento a Prazo                                              *
;*******************************************************************************
Proc Digita_APrazo()
Private MSG_ATUA,forok

Moveto "NotaEcp"
If PARAM_ATUA_CAPG="S"
   Then MSG_ATUA=" - ATUALIZANDO !"
   Else MSG_ATUA=" - NAO ATUALIZA !"
EndIf

If CHAVEAP=1
   Then If [Sequencia do Lancamento]=1
           Then

                Moveto "NotaEC"
                Moveto [Codigo]
                If Busca_Lookup("Codigo",[NotaEC->Codigo],"SM")
                   Then Forok=True
                   Else Forok=False
                EndIf
                Moveto "NotaEcp"
                [Tipo do Lancamento ]="C"
                [Codigo do Documento]=[NotaEC->Codigo do Documento]
                [Numero do Documento]=[NotaEC->Numero do Documento]
                [Observacoes        ]="REF. "+[NotaEC->Tipo do Documento]+"/"+[NotaEC->Serie do Documento]+"/"+[NotaEC->Numero do Documento]
                If ForOk
                   Then [Codigo Plano_Conta    ]=Reg_Busca_Lookup["Codigo Plano_Conta"]
                        [Descricao Plano_Conta ]=LTrim([Descricao Plano_Conta])
                        [Codigo CCusto         ]=Reg_Busca_Lookup["Codigo CCusto"]
                        [Descricao CCusto      ]=LTrim([Descricao CCusto])
                EndIf

           Else UnLockRecord

                Moveto "NotaEC"
                UnLockRecord
                KeyPress "F7"

                Moveto "NotaEcp"
                Moveto [Sequencia do Lancamento]
                Locate LANCTO,SEQ

                Moveto [Codigo da Conta    ] Ditto
                Moveto [Tipo do Lancamento ] Ditto
                Moveto [Codigo do Documento] Ditto
                Moveto [Numero do Documento] Ditto
                Moveto [Valor do Documento ] Ditto
                Moveto [Tipo do Pagamento  ] Ditto
                Moveto [Codigo CCusto      ] Ditto
                Moveto [Codigo Plano_Conta ] Ditto
                Moveto [Multa              ] Ditto
                Moveto [Taxa de Juros      ] Ditto
                Moveto [Tipo Taxa de Juros ] Ditto
                Moveto [NDias Taxa de Juros] Ditto
                Moveto [Observacoes        ] Ditto
                Moveto [Data Competencia   ] Ditto
                UnLockRecord

                Moveto "NotaEC"
                KeyPress "F7"
                Moveto "NotaEcp"
                Moveto [Sequencia do Lancamento]
                Locate LANCTO,SEQ

        EndIf
EndIf

INICIO_DIALOG=True
CopyToArray RegItem

Registro_Item_Venctos("Ler")

Showdialog "Dados do Vencimento [     ] Contas a Pagar"+MSG_ATUA Proc "APrazo_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","HOME","END","PGDN","PGUP"
     @ 06,2 height 16 width 74

   Accept @ -01,28 Width 5 "A2" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,00 "Conta" For "V_Conta"
   Accept @ 01,01 Width 07 "A4" picture "#*#" Tag "V_Conta" to VSD_V_Conta
   Accept @ 01,07 Width 33 "A30" picture "!*!" Tag "V_Descricao_Conta" to VSD_V_Descricao_Conta

   Label  @ 00,57 "Lan‡to CtaPag" For "V_Lancamento"
   Accept @ 01,62 Width 09 "A6" picture "#*#" Tag "V_Lancamento" to VSD_V_Lancamento

   Label  @ 02,00 "Tipo Lan‡amento" For "V_TpLancto"
   Accept @ 03,01 Width 04 "A1" picture "!" Tag "V_TpLancto" to VSD_V_TpLancto
   Accept @ 03,05 Width 23 "A20" picture "!*!" Tag "V_Descricao_TpLancto" to VSD_V_Descricao_TpLancto

   Label  @ 02,28 "Codigo Documento" For "V_CdDocto"
   Accept @ 03,29 Width 07 "A4" picture "!*!" Tag "V_CdDocto" to VSD_V_CdDocto
   Accept @ 03,36 Width 07 "A4" picture "!*!" Tag "V_TpDocto" to VSD_V_TpDocto
   Accept @ 03,43 Width 07 "A4" picture "!*!" Tag "V_SrDocto" to VSD_V_SrDocto
   Label  @ 02,50 "N§ Documento" For "V_NoDocto"
   Accept @ 03,51 Width 13 "A10" picture "!*!" Tag "V_NoDocto" to VSD_V_NoDocto

   Label  @ 04,00 "Dt.Vencto" For "V_DtVencto"
   Accept @ 05,01 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtVencto" to VSD_V_DtVencto

   Label  @ 04,14 "Dt.a Pagar" For "V_DtaPagar"
   Accept @ 05,15 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtaPagar" to VSD_V_DtaPagar

   Label  @ 04,28 "Vr.Lan‡to" For "V_Vr_Lancto"
   Accept @ 05,29 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Lancto" to VSD_V_Vr_Lancto

   Label  @ 04,41 "Forma Pagamento" For "V_TpPagto"
   Accept @ 05,42 Width 05 "A2" picture "!*!" Tag "V_TpPagto" to VSD_V_TpPagto
   Accept @ 05,47 Width 24 "A20" picture "!*!" Tag "V_Descricao_TpPagto" to VSD_V_Descricao_TpPagto

   Label  @ 06,00 "Plano Contas" For "V_PlContas"
   Accept @ 07,01 Width 16 "A13" picture "!*!" Tag "V_PlContas" to VSD_V_PlContas
   Accept @ 07,17 Width 43 "A40" picture "!*!" Tag "V_Descricao_PlContas" to VSD_V_Descricao_PlContas   
   
   Label  @ 08,00 "Centro Custo" For "V_CCusto"
   Accept @ 09,01 Width 10 "A7" picture "###.###" Tag "V_CCusto" to VSD_V_CCusto
   Accept @ 09,11 Width 28 "A25" picture "!*!" Tag "V_Descricao_CCusto" to VSD_V_Descricao_CCusto

   Label  @ 08,41 "Dt.Compet" For "V_DtCompet"
   Accept @ 09,42 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtCompet" to VSD_V_DtCompet

   Label  @ 10,00 "Vr.Descto" For "V_Vr_Descto"
   Accept @ 11,01 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Descto" to VSD_V_Vr_Descto

   Label  @ 11,13 "Ate" For "V_DtDescto"
   Accept @ 11,18 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtDescto" to VSD_V_DtDescto

   Label  @ 10,31 "Multa(%)" For "V_Multa"
   Accept @ 11,32 Width 09 "$" picture "#*#.[###]" Tag "V_Multa" to VSD_V_Multa

   Label  @ 10,41 "Taxa de Juros(%)" For "V_TxJuros"
   Accept @ 11,42 Width 09 "$" picture "#*#.[###]" Tag "V_TxJuros" to VSD_V_TxJuros

   Label  @ 11,56 "(Dia/Mes/Ano)" For "V_TpTxJuros"
   Accept @ 11,52 Width 4 "A1" picture "&" Tag "V_TpTxJuros" to VSD_V_TpTxJuros

   Label  @ 10,65 "Dias" For "V_TpTxJuros"
   Accept @ 10,59 Width 6 "S"  picture "###" Tag "V_NDTxJuros" to VSD_V_NDTxJuros

   Label  @ 12,00 "Observa‡oes" For "V_Observacoes"
   Accept @ 13,01 Width 70 "A100" picture "!*!" Tag "V_Observacoes" to VSD_V_Observacoes

Enddialog
Mouse Show
If RetVal
   Then Finaliza_Registro_Venctos(True)
   Else Finaliza_Registro_Venctos(False)
EndIf

EndProc  ; (Digita_APrazo)

;*******************************************************************************
;* Rotina para Gravacao/Leitura Pagto a Prazo                                  *
;*******************************************************************************
Proc Registro_Item_Venctos(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Numero Lancamento Titulos]=VSD_V_Lancamento
       [Codigo do Documento      ]=VSD_V_CdDocto
       [Tipo do Documento        ]=VSD_V_TpDocto
       [Serie do Documento       ]=VSD_V_SrDocto
       [Numero do Documento      ]=VSD_V_NoDocto
       [Tipo do Lancamento       ]=VSD_V_TpLancto
       [Descricao do Lancamento  ]=VSD_V_Descricao_TpLancto
       [Tipo de Operacao         ]=VSD_V_Tpoper
       [Descricao Operacao       ]=VSD_I_Descricao_Tpoper
       [Data de Vencimento       ]=VSD_V_DtVencto
       [Data a Pagar             ]=VSD_V_DtaPagar
       [Data Competencia         ]=VSD_V_DtCompet
       [Valor do Documento       ]=VSD_V_Vr_Lancto
       [Valor do Desconto        ]=VSD_V_Vr_Descto
       [Data Limite Desconto     ]=VSD_V_DtDescto
       [Taxa de Juros            ]=VSD_V_TxJuros
       [Tipo Taxa de Juros       ]=VSD_V_TpTxJuros
       [NDias Taxa de Juros      ]=VSD_V_NDTxJuros
       [Tipo do Pagamento        ]=VSD_V_TpPagto
       [Descricao Tipo Pagamento ]=VSD_V_Descricao_TpPagto
       [Codigo da Conta          ]=VSD_V_Conta
       [Codigo da Empresa        ]=[NotaEC->Codigo da Empresa]
       [Descricao da Conta       ]=VSD_V_Descricao_Conta
       [Observacoes              ]=VSD_V_Observacoes
       [Multa                    ]=VSD_V_Multa
       [Codigo CCusto            ]=VSD_V_CCusto
       [Descricao CCusto         ]=VSD_V_Descricao_CCusto
       [Codigo Plano_Conta       ]=VSD_V_PlContas
       [Descricao Plano_Conta    ]=VSD_V_Descricao_PlContas
       UnLockRecord
  Case Funcao_Registro="Ler":  
       VSD_I_Seq                  =[Sequencia do Lancamento  ]
       VSD_V_Lancamento           =[Numero Lancamento Titulos]
       VSD_V_CdDocto              =[Codigo do Documento      ]
       VSD_V_TpDocto              =[Tipo do Documento        ]
       VSD_V_SrDocto              =[Serie do Documento       ]
       VSD_V_NoDocto              =[Numero do Documento      ]
       VSD_V_TpLancto             =[Tipo do Lancamento       ]  
       VSD_V_Descricao_TpLancto   =[Descricao do Lancamento  ]
       VSD_V_Tpoper               =[Tipo de Operacao         ]
       VSD_I_Descricao_Tpoper     =[Descricao Operacao       ]
       VSD_V_DtVencto             =[Data de Vencimento       ]
       VSD_V_DtaPagar             =[Data a Pagar             ]       
       VSD_V_DtCompet             =[Data Competencia         ]
       VSD_V_Vr_Lancto            =[Valor do Documento       ]
       VSD_V_Vr_Descto            =[Valor do Desconto        ]
       VSD_V_DtDescto             =[Data Limite Desconto     ]
       VSD_V_TxJuros              =[Taxa de Juros            ]
       VSD_V_TpTxJuros            =[Tipo Taxa de Juros       ]
       VSD_V_NDTxJuros            =[NDias Taxa de Juros      ]
       VSD_V_TpPagto              =[Tipo do Pagamento        ]
       VSD_V_Descricao_TpPagto    =[Descricao Tipo Pagamento ]
       VSD_V_Conta                =[Codigo da Conta          ]
       VSD_V_Descricao_Conta      =[Descricao da Conta       ]
       If IsBlank(VSD_V_CONTA)
          Then VSD_V_CONTA          =PARAM_CONTA_CAIXA
               VSD_V_DESCRICAO_CONTA=PARAM_DESC_CONTA_CAIXA
       EndIf
       VSD_V_Observacoes          =[Observacoes              ]
       VSD_V_Multa                =[Multa                    ]
       VSD_V_CCusto               =[Codigo CCusto            ]
       VSD_V_Descricao_CCusto     =[Descricao CCusto         ]
       VSD_V_PlContas             =[Codigo Plano_Conta       ]
       VSD_V_Descricao_PlContas   =[Descricao Plano_Conta    ]
EndSwitch
EndProc  ; (Registro_APrazo)

;*******************************************************************************
;* Rotina de Selecionar Grade                                                  *
;*******************************************************************************
Proc Seleciona_Opcoes(OPCAODIVERSAS,SEMRETORNO,NL,NC)
Private OPCAODIVERSAS, LJ, AJ, ncp, SEMRETORNO

If DynArraySize(Opcoes)=0
   Then Mensagem("Tabela sem Registros !")
        Return False
EndIf

AJ=DynArraySize(Opcoes)
If AJ>15
   Then AJ=15
   Else If AJ<3 Then AJ=3 EndIf
EndIf

Switch
  Case OPCAODIVERSAS="Tipo de Opera‡„o"  : ncp=1 LJ=31
  Case OPCAODIVERSAS="Tipo de Lan‡amento": ncp=1 LJ=32
  Case OPCAODIVERSAS="Codigo da Conta"   : ncp=1 LJ=37
EndSwitch

ArrayElement=0
Showdialog "Consulta "+OPCAODIVERSAS Proc "Opcoes_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ENTER","ESC"
     @ NL,NC height AJ+2 width LJ+5

   PickDynArray @0,01 Height AJ width LJ
   Columns ncp
   Opcoes
   Tag "TG_OPCAO"
   To ArrayElement
EndDialog
If RetVal
   Then If SEMRETORNO<>"SR"
           Then Switch
                  Case OPCAODIVERSAS="Tipo de Opera‡„o"        : [Tipo de Operacao  ]=Registro_F1["Tipo de Operacao"  ]
                  Case OPCAODIVERSAS="Tipo de Lan‡amento"      : [Tipo do Lancamento]=Registro_F1["Tipo do Lancamento"]
                  Case OPCAODIVERSAS="Codigo da Conta"         : [Codigo da Conta   ]=Registro_F1["Codigo da Conta"   ]
                EndSwitch
                Return True
        EndIf
   Else Return False
EndIf
EndProc   ; (Seleciona_Opcoes)

;*******************************************************************************
;* Rotina p/ Montar Opcoes p/ Grade                                            *
;*******************************************************************************
Proc Monta_Opcoes(OPCAODIVERSAS, ITEMDESEJADO)
Private OPCAODIVERSAS, ITEMDESEJADO, wcg, icg, icgt, tnovo, nomecampo,opconta,okct
nomecampo=Field()

If IsAssigned(Opcoes)            
   Then Release Vars Opcoes
EndIf

DynArray Opcoes[]
Switch
  Case OPCAODIVERSAS="Tipo de Opera‡„o"  : Moveto [Tipo de Operacao  ]
  Case OPCAODIVERSAS="Tipo de Lan‡amento": Moveto [Tipo do Lancamento]
  Case OPCAODIVERSAS="Codigo da Conta"   : Moveto [Codigo da Conta   ]
EndSwitch
Ativa_Lookup()
wcg=0

While Not EOT()
  Switch                                          
    Case OPCAODIVERSAS="Tipo de Opera‡„o" And CAIXA_BANCO:
         okct=false
         If Search([NotaECV->Tipo da Conta],[OpConta])>0 And [Tipo Movimento]="S"
            Then If [NotaECV->Tipo da Conta]="C"
                    Then If [Tipo de Operacao]="05" Or [Tipo de Operacao]="14"
                            Then okct=True
                         EndIf
                    Else If [Tipo de Operacao]="06"
                            Then okct=True
                         EndIf
                 Endif
         EndIf
         If okct                         
            Then wcg=wcg+1
                 Opcoes[wcg]=Completa([Descricao Operacao],26," ")+[Tipo de Operacao]
         EndIf
    Case OPCAODIVERSAS="Tipo de Lan‡amento" And CAIXA_BANCO: 
         If [NotaECV->Tipo da Conta]="C" Then opconta=[OpTpOper_Bco] EndIf
         If [NotaECV->Tipo da Conta]="X" Then opconta=[OpTpOper_Cxa] EndIf
         If [NotaECV->Tipo da Conta]="A" Then opconta=[OpTpOper_Apl] EndIf
         If Search([NotaECV->Tipo de Operacao],OpConta)>0
            Then wcg=wcg+1
                 Opcoes[wcg]=Completa([Descricao do Lancamento],28," ")+[Tipo de Lancamento]
         EndIf
    Case OPCAODIVERSAS="Tipo de Opera‡„o" :
         okct=false
         If Search([NotaECP->Tipo da Conta],[OpConta])>0 And [Tipo Movimento]="S"
            Then If [NotaECP->Tipo da Conta]="C"
                    Then If [Tipo de Operacao]="05" Or [Tipo de Operacao]="14"
                            Then okct=True
                         EndIf
                    Else If [Tipo de Operacao]="06"
                            Then okct=True
                         EndIf
                 Endif
         EndIf
         If okct                         
            Then wcg=wcg+1
                 Opcoes[wcg]=Completa([Descricao Operacao],26," ")+[Tipo de Operacao]
         EndIf
    Case OPCAODIVERSAS="Tipo de Lan‡amento" : 
         If [NotaECP->Tipo da Conta]="C" Then opconta=[OpTpOper_Bco] EndIf
         If [NotaECP->Tipo da Conta]="X" Then opconta=[OpTpOper_Cxa] EndIf
         If [NotaECP->Tipo da Conta]="A" Then opconta=[OpTpOper_Apl] EndIf
         If Search([NotaECP->Tipo de Operacao],OpConta)>0
            Then wcg=wcg+1
                 Opcoes[wcg]=Completa([Descricao do Lancamento],28," ")+[Tipo de Lancamento]
         EndIf
    Case OPCAODIVERSAS="Codigo da Conta": 
         wcg=wcg+1
         Opcoes[wcg]=Completa([Descricao da Conta],31," ")+[Codigo da Conta]+[Tipo da Conta]
  EndSwitch
  Skip
EndWhile
KeyPress "ESC"
Moveto Field nomecampo
EndProc    ; (Monta_Opcoes)

;*******************************************************************************
;* Rotina p/ Checagem Opcoes p/ Grade                                          *
;*******************************************************************************
Proc Checa_Opcoes(OPCAODIVERSAS, VALORDESEJADO)
Private OPCAODIVERSAS, VALORDESEJADO, icg, resultado

If DynArraySize(Opcoes)=0
   Then Return False
EndIf

resultado=false
For icg From 1 To DynArraySize(Opcoes)
  Switch
    Case OPCAODIVERSAS="Tipo de Opera‡„o":
         If RTrim(SubStr(Opcoes[icg],27,2))=VALORDESEJADO
            Then resultado=true
         EndIf
    Case OPCAODIVERSAS="Tipo de Lan‡amento":
         If RTrim(SubStr(Opcoes[icg],29,1))=VALORDESEJADO
            Then resultado=true
         EndIf
    Case OPCAODIVERSAS="Codigo da Conta":
         If RTrim(SubStr(Opcoes[icg],32,4))=VALORDESEJADO
            Then resultado=true
         EndIf
  EndSwitch
  If resultado
     then MontaRegistro_F1(OPCAODIVERSAS,icg)
          QuitLoop
  EndIf
EndFor
return resultado
EndProc         ;  (Checa_Opcoes)

;*******************************************************************************
;* Rotina Montar Registro_F1 p/ Grade                                          *
;*******************************************************************************
Proc MontaRegistro_F1(OPCAODIVERSAS,indice)
private OPCAODIVERSAS, indice

If IsAssigned(Registro_F1)
   Then Release Vars Registro_F1
EndIf
DynArray Registro_F1[]
Switch
  Case OPCAODIVERSAS="Tipo de Opera‡„o"    :
       Registro_F1["Tipo de Operacao"]   =RTrim(SubStr(Opcoes[indice],27,2))
       Registro_F1["Descricao Operacao"] =RTrim(SubStr(Opcoes[indice],1,20))
  Case OPCAODIVERSAS="Tipo de Lan‡amento"    :
       Registro_F1["Tipo do Lancamento"]      =RTrim(SubStr(Opcoes[indice],29,1))
       Registro_F1["Descricao do Lancamento"] =RTrim(SubStr(Opcoes[indice],1,20))
  Case OPCAODIVERSAS="Codigo da Conta"       :
       Registro_F1["Codigo da Conta"]         =RTrim(SubStr(Opcoes[indice],32,4))
       Registro_F1["Descricao da Conta"]      =RTrim(SubStr(Opcoes[indice],1,30))
       Registro_F1["Tipo da Conta"]           =RTrim(SubStr(Opcoes[indice],36,1))
EndSwitch
EndProc    ;  (Monta_RegistroF1)


;*******************************************************************************
;** Inclusao, Alteracao de Titulos Contas a Pagar                             **
;*******************************************************************************
Proc TITULOS()
Private SEQ,ImpOC

If PARAM_ATUA_CAPG<>"S"
   Then If CHAVEAP=8
           Then Del
        EndIf
        Return
EndIf
ImpOC=False

Moveto "NotaEC"
UnLockRecord
KeyPress "F7"

Moveto "\\sistemas\\ctapag\\Titulos"
Moveto [Numero do Lancamento]
If IsBlank([NotaEcp->Numero Lancamento Titulos])
    Then While True
           End
           If [Numero do Lancamento]=""
              Then SEQ="000001"
              Else SEQ=ALINHM(StrVal(NumVal([Numero do Lancamento])+1),6)
           EndIf
           Down
           [Numero do Lancamento]=SEQ
           If Not IsLockRecord()
              Then QuitLoop
              Else Del
           EndIf
         EndWhile
    Else
         SEQ=[NotaEcp->Numero Lancamento Titulos]
         Locate [NotaEcp->Numero Lancamento Titulos]
         If Not RetVal
            Then MSG="O lan‡amento "+[NotaEcp->Numero Lancamento Titulos]+" no Contas a Pagar,//"
                 MSG=MSG+"Referente ao vencimento ["+StrVal([NotaEcp->Sequencia do Lancamento])+"] n„o foi encontrado !//"
                 MSG=MSG+"Verificar fechamento mensal no Contas a Pagar Ok !//"
                 MSG=MSG+"Neste caso o estorno ou alter‡„o no Contas a Pagar n„o ser  efefuado !"
                 Mensagem(MSG)

                 Moveto "NotaEcp"
                 CopyFromArray RegItem
                 UnLockRecord
                 If CHAVEAP=8
                    Then If Exclusao_Cabeca
                            Then OK="S"
                            Else ConfGeral("Confirma esta exclus„o independente do lan‡amento no Contas a Pagar ?")
                         EndIf
                         If OK="S"
                            Then Del
                         EndIf
                 EndIf
                 Moveto "NotaEC"
                 KeyPress "F7"

                 Moveto "NotaEcp"
                 Return
            Else
                 Oktit=True
                 Switch
                   Case [Sistema Gerador       ]<>"NE": oktit=False
                   Case [Lancamento Gerador    ]<>[NotaEcp->Numero do Lancamento   ]: oktit=False
                   Case [Sequencia Gerador     ]<>[NotaEcp->Sequencia do Lancamento]: oktit=False
                   Case [Documento Referente   ]<>RTrim(([NotaEC->Tipo do Documento ]+"/"+[NotaEC->Numero do Documento ])): oktit=False
                 EndSwitch

                 If Not OkTit
                    Then If [Sistema Gerador       ]="OC" And
                            [Lancamento Gerador    ]=[NotaEC->Numero da OC] And
                            [Sequencia Gerador     ]=[NotaEcp->Sequencia do Lancamento] And
                            [Documento Referente   ]=RTrim(("OC/"+[NotaEC->Numero da OC]))
                            Then oktit=True
                                 ImpOC=True
                         EndIf
                 EndIf

                 If Not OkTit
                    Then MSG=    "O lan‡amento no Contas a Pagar n„o corresponde a Sequencia ["+StrVal([NotaEcp->Sequencia do Lancamento])+"] !//"
                         MSG=MSG+"Verificar no Contas a Pagar se o mes n„o foi fechado !//"
                         MSG=MSG+"Neste caso o estorno ou alter‡„o no Contas a Pagar n„o ser  efefuado !//"
                         MSG=MSG+"Talvez algum outro erro gerou este problema !"
                         If CHAVEAP=0
                            Then MSG=MSG+"//Se necess rio exclua esta Sequencia e fa‡a-a novamente !"
                                 Mensagem(MSG)

                                 Moveto "NotaEC"
                                 KeyPress "F7"

                                 Moveto "NotaEcp"
                                 Return
                            Else Mensagem(MSG)
                                 Moveto "NotaEcp"
                                 If CHAVEAP=8
                                    Then If Exclusao_Cabeca
                                            Then OK="S"
                                            Else ConfGeral("Confirma esta exclus„o independente do lan‡amento no Contas a Pagar ?")
                                         EndIf
                                         If OK="S"
                                            Then Del
                                         EndIf

                                         Moveto "NotaEC"
                                         KeyPress "F7"

                                         Moveto "NotaEcp"
                                         Return
                                 EndIf
                         EndIf
                 EndIf
         EndIf
EndIf

Oktit=True
If CHAVEAP=8 Or CHAVEAP=0
   Then If [Saldo do Documento]<>[Valor do Documento]
           Then Oktit=False
                MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Pagar,//"
                MSG=MSG+"referente a este documento: "+
                    [NotaEC->Codigo da Empresa]+" / "+
                    [NotaEC->Tipo do Documento]+" / "+
                    [NotaEC->Numero do Documento]+"//"
                MSG=MSG+"n„o ser  efetuado, pois o T¡tulo J  teve baixa ! // //"
                MSG=MSG+"Verificar !"
                Mensagem(MSG)

                Moveto "NotaEcp"
                CopyFromArray RegItem
                UnLockRecord
                If CHAVEAP=8
                   Then If Exclusao_Cabeca
                           Then OK="S"
                           Else ConfGeral("Confirma esta exclus„o independente do lan‡amento no Contas a Pagar ?")
                        EndIf
                        If OK="S"
                           Then Del
                        EndIf
                EndIf
                Moveto "NotaEC"
                KeyPress "F7"

                Moveto "NotaEcp"
                Return

           Else If CHAVEAP=8
                   Then Del
                        Moveto "NotaEcp"
                        Del
                EndIf
        EndIf
EndIf

If (CHAVEAP=1) Or
   (CHAVEAP=0 and Oktit)
   Then
        [Codigo do Documento ]=[NotaEcp->Codigo do Documento ]
        [Numero do Documento ]=[NotaEcp->Numero do Documento ]
        [Codigo do Emitente  ]=[NotaEC->Codigo               ]
        [Tipo do Lancamento  ]=[NotaEcp->Tipo do Lancamento  ]        
        [Data de Emissao     ]=[NotaEC->Data de Emissao      ]
        [Data de Vencimento  ]=[NotaEcp->Data de Vencimento  ]
        [Data a Pagar        ]=[NotaEcp->Data a Pagar        ]
        [Data Competencia    ]=[NotaEcp->Data Competencia    ]
        [Valor do Documento  ]=[NotaEcp->Valor do Documento  ]
        [Saldo do Documento  ]=[NotaEcp->Valor do Documento  ]
        [Valor do Desconto   ]=[NotaEcp->Valor do Desconto   ]
        [Data Limite Desconto]=[NotaEcp->Data Limite Desconto]
        [Multa               ]=[NotaEcp->Multa               ]
        [Taxa de Juros       ]=[NotaEcp->Taxa de Juros       ]
        [Tipo Taxa de Juros  ]=[NotaEcp->Tipo Taxa de Juros  ]
        [NDias Taxa de Juros ]=[NotaEcp->NDias Taxa de Juros ]
        [Tipo do Pagamento   ]=[NotaEcp->Tipo do Pagamento   ]
        [Codigo da Conta     ]=[NotaEcp->Codigo da Conta     ]
        [Codigo da Empresa   ]=[NotaEC->Codigo da Empresa    ]
        [Observacoes         ]=[NotaEcp->Observacoes         ]
        [Codigo CCusto       ]=[NotaEcp->Codigo CCusto       ]
        [Codigo Plano_Conta  ]=[NotaEcp->Codigo Plano_Conta  ]
        If (CHAVEAP=1) Or (IsBlank([Sistema Gerador])) Or
           (CHAVEAP=0 And ImpOC)
           Then Controle_Dia()
                [Sistema Gerador   ]="NE"
                [Lancamento Gerador]=[NotaEcp->Numero do Lancamento   ]
                [Sequencia Gerador ]=[NotaEcp->Sequencia do Lancamento]
        EndIf
        [Documento Referente ]=RTrim([NotaEC->Tipo do Documento]+"/"+[NotaEC->Numero do Documento ])
        UnLockRecord

        Moveto "NotaEcp"
        If IsBlank([NotaEcp->Numero Lancamento Titulos])
           Then [Numero Lancamento Titulos]=SEQ
        EndIf
        UnLockRecord
EndIf

If (CHAVEAP=8 Or CHAVEAP=0) and Not Oktit
   Then Moveto "NotaEcp"
        CopyFromArray RegItem
        UnLockRecord
EndIf

Moveto "NotaEC"
KeyPress "F7"

Moveto "NotaEcp"

EndProc  ; (Titulos)

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

If [NotaEC->Tipo de Operacao]="A" Or
   IsBlank([NotaEI->Codigo do Item]) Or
   [NotaEI->Tipo do Item]="C" Or
   [NotaEI->Tipo do Item]="D" Or
   [NotaEI->Tipo do Item]="G" Or
   [NotaEI->Tipo do Item]="H" Or
   [NotaEI->Tipo do Item]="I"
   Then Return
EndIf

While True
 Moveto "\\Sistemas\\Estoque\\SdEstq"
 Moveto [Codigo da Empresa]
 Locate [NotaEC->Codigo da Empresa], [NotaEI->Codigo do Item], ANO, MES
 If Not RetVal
    Then Cria_Ficha([NotaEC->Codigo da Empresa],[NotaEI->Codigo do Item],ANO,MES,False)
    Else If IsLockRecord()
            Then Loop
         EndIf
         Switch
           Case CHAVEI=8:
                [Saldo Atual      ]=NDecimal([Saldo Atual]-[NotaeI->Quantidade Convertida],3)
                [Custo Total Atual]=NDecimal([Custo Total Atual]-NDecimal(([NotaeI->Custo Medio Unitario]*[NotaeI->Quantidade]),2),2)
           Case CHAVEI=1 Or CHAVEI=0:
                [Saldo Atual      ]=NDecimal(([Saldo Atual]-(QTDCONV))+[NotaeI->Quantidade Convertida],3)
                [Custo Total Atual]=NDecimal(([Custo Total Atual]-CTTOTAL)+NDecimal(([NotaeI->Custo Medio Unitario]*[NotaeI->Quantidade]),2),2)

                If [NotaEC->Data de Entrada]>=[Data do Preco de Custo] And [NotaEC->Tipo de Operacao]="C"
                   Then [Data do Preco de Custo]=[NotaEC->Data de Entrada]
                        [Preco de Custo        ]=NDecimal(([NotaEI->Custo Medio Unitario]*[NotaeI->Quantidade])/[NotaeI->Quantidade Convertida],5)
                EndIf
         EndSwitch
         If ([Custo Total Atual]/[Saldo Atual])>0
            Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
         EndIf
         UnLockRecord
         QuitLoop
 EndIf
EndWhile

If PARAM_PECAS_ITEM<>"S"
   Then Moveto "NotaEI"
        Return
EndIf        

If [NotaEI->Tipo do Item]<>"T"
   Then Moveto "NotaEI"
        Return
EndIf


While True
 Moveto "\\Sistemas\\Estoque\\PecasSD"
 Locate [NotaEC->Codigo da Empresa], [NotaEI->Codigo do Item], 0, ANO, MES
 If RetVal
    Then If IsLockRecord()
            Then Loop
         EndIf
         Switch
           Case CHAVEI=8:
                [Saldo Atual      ]=NDecimal([Saldo Atual]-[NotaeI->Quantidade Convertida],3)
           Case CHAVEI=1 Or CHAVEI=0:
                [Saldo Atual      ]=NDecimal(([Saldo Atual]-(QTDCONV))+[NotaeI->Quantidade Convertida],3)
                If [NotaEC->Data de Entrada]>=[Ultima_Entrada]
                   Then [Ultima_Entrada]=[NotaEC->Data de Entrada]
                EndIf
         EndSwitch
         UnLockRecord
         QuitLoop
    Else Cria_Ficha2([NotaEC->Codigo da Empresa],[NotaEI->Codigo do Item],False)
 EndIf
EndWhile

Moveto "NotaEI"
EndProc  ; (Estoque)

;*******************************************************************************
;* Rotina p/ Checagem de Estoque                                               *
;*******************************************************************************
Proc Checa_Estoque()
If [NotaEC->Tipo de Operacao]="A" Or
   IsBlank([NotaEI->Codigo do Item]) Or
   [NotaEI->Tipo do Item]="C" Or
   [NotaEI->Tipo do Item]="D" Or
   [NotaEI->Tipo do Item]="G" Or
   [NotaEI->Tipo do Item]="H" Or
   [NotaEI->Tipo do Item]="I"
   Then Return True
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
Locate [NotaEC->Codigo da Empresa], [NotaEI->Codigo do Item], ANO, MES
If RetVal
   Then Moveto "NotaEI"
        Return True
   Else If Cria_Ficha([NotaEC->Codigo da Empresa],[NotaEI->Codigo do Item   ],ANO,MES,False)
           Then Moveto "NotaEI"
                Return True
           Else Moveto "NotaEI"
                Return False
        EndIf
EndIf
EndProc   ; (Checa_Estoque)

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(EMPRESA, ITEM, ANO, MES, CONFIRMA)
Private EMPRESA, ITEM, ANO, MES, CONFIRMA

ANO=ALINHM(StrVal(ANO),4)
MES=ALINHM(StrVal(MES),2)

If CONFIRMA
   Then MSG="N„o foi encontrada a ficha de estoque referente a "+MES+"/"+ANO+" !// //"
        MSG=MSG+Format("W08,AL","Empresa")+"| "+Format("W11,AL","Item")+"//"
        MSG=MSG+Format("W08,AL",EMPRESA  )+"| "+Format("W11,AL",ITEM  )+"//"
        MSG=MSG+"Observacoes:                                                            //"
        MSG=MSG+"1. Talvez n„o foi executado a transferˆncia de saldos do mˆs anterior;  //"
        MSG=MSG+"2. Talvez n„o houve entrada que criasse sua ficha de estoque;           //"
        MSG=MSG+"3. Se for criada agora, o saldo inicial deste item ser  igual a 0(zero).//"
        MSG=MSG+"// "
        MSG=MSG+"Deseja cri -la agora ?"
        ConfGeral(MSG)
        If OK="N"
           Then Return False
        EndIf
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
While True
  Moveto [Codigo da Empresa]
  Locate EMPRESA, ITEM, ANO, MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=EMPRESA
          [Codigo do Item      ]=ITEM
          [Ano Referencia      ]=ANO
          [Mes Referencia      ]=MES
          If IsLockRecord()
             Then Del
                  Sleep 1000
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha2(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA,ESTQ_ANO,ESTQ_MES

ESTQ_MES=ALINHM(StrVal(Month([NotaEC->Data de Entrada])),2)
ESTQ_ANO=ALINHM(StrVal(Year([NotaEC->Data de Entrada])),4)

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

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO_C()

Moveto "NotaEI"
While RecordStatus("New")=False
  EXCLUSAO_I()
EndWhile
Exclusao_Cabeca=True
Moveto "NotaEcp"
While RecordStatus("New")=False
  CHAVEAP=8
  CopyToArray RegItem
  TITULOS()
EndWhile
Moveto "NotaECV"
While RecordStatus("New")=False
  CHAVEAV=8
  CONTA()
EndWhile
;;CONSIGNACAO("ExclusaoC")
Moveto "NotaEC"
Del
EndProc  ; (Exclusao_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc EXCLUSAO_I()
CHAVEI=8
ESTOQUE()
;;CONSIGNACAO("ExclusaoI")
ATUA_COMPRA()
Moveto "NotaEI"
Del
EndProc  ; (Exclusao_I)

;*******************************************************************************
;* Atualiza Cotacao de Preco                                                   *
;*******************************************************************************
Proc COTACAO()
Private Atualiza_Cotacao, itant
If [NotaEC->Tipo de Operacao]<>"C" And
   [NotaEC->Tipo de Operacao]<>"A"
   Then Return
EndIf

Switch
  Case SYS_CODIGO_CLIENTE="0052":
    If [NotaEC->Codigo da Empresa]="1000"
       Then Return
    EndIf
EndSwitch

Moveto "NotaEC"
UnLockRecord
KeyPress "F7"

itant="???"
Moveto "NotaEI"
Moveto [Numero do Lancamento]
Locate LANCTO
While [Numero do Lancamento]=[NotaEC->Numero do Lancamento]
  If Not IsBlank([Codigo do Item]) And [Tipo do Item]<>"C"
     Then
          Atualiza_Cotacao=False

          Moveto "Cotacao"
          Moveto [Codigo do Item]
          Locate [NotaEI->Codigo do Item],[NotaEC->Codigo]
          If Not RetVal
             Then End Down
                  [Codigo do Item]=[NotaEI->Codigo do Item]
                  [Codigo        ]=[NotaEC->Codigo        ]
                  Atualiza_Cotacao=True
             Else Switch
                    Case [Numero do Lancamento]=[NotaEI->Numero do Lancamento]:
                         Atualiza_Cotacao=True
                    Case [NotaEC->Data de Entrada]>[Data de Compra]:
                         Atualiza_Cotacao=True
                    Case [NotaEC->Data de Entrada    ] =[Data de Compra] And
                         [NotaEC->Numero do Documento]>=[Numero do Documento]:
                         Atualiza_Cotacao=True
                  EndSwitch
          Endif

          If Atualiza_Cotacao
             Then [Razao Social            ]=[NotaEC->Razao Social            ]
                  [Data de Compra          ]=[NotaEC->Data de Entrada         ]
                  [Numero do Documento     ]=[NotaEC->Numero do Documento     ] 
                  [Tipo do Documento       ]=[NotaEC->Tipo do Documento       ]
                  [Quantidade              ]=[NotaEI->Quantidade              ] 
                  [Unidade Entrada         ]=[NotaEI->Unidade Entrada         ]
                  If [NotaEI->Valor Desconto Total]>0
                     Then [Valor Unitario  ]=([NotaEI->Preco Total]/[NotaEI->Quantidade])-([NotaEI->Valor Desconto Total]/[NotaEI->Quantidade])
                     Else [Valor Unitario  ]=[NotaEI->Preco Total]/[NotaEI->Quantidade]
                  EndIf
                  [Custo Medio Unitario    ]=[NotaEI->Custo Medio Unitario    ]
                  [Unidade Interna         ]=[NotaEI->Unidade Interna         ]
                  [Numero do Lancamento    ]=[NotaEI->Numero do Lancamento    ]
                  [MVA                     ]=[NotaEI->MVA                     ]
                  [ICMS UF_ORIGEM          ]=[NotaEI->ICMS UF_ORIGEM          ]
                  [Tributacao de IPI       ]=[NotaEI->Tributacao de IPI       ]
                  [Aliquota Reduzida BCIPI ]=[NotaEI->Aliquota Reduzida BCIPI ]
                  [Aliquota de IPI         ]=[NotaEI->Aliquota de IPI         ]
                  [Tributacao de ICMS      ]=[NotaEI->Tributacao de ICMS      ]
                  [Aliquota Reduzida BCICMS]=[NotaEI->Aliquota Reduzida BCICMS]
                  [Aliquota de ICMS        ]=[NotaEI->Aliquota de ICMS        ]
                  [Fator de Conversao      ]=[NotaEI->Fator de Conversao      ]
                  [Tipo Tributacao         ]=[NotaEI->Tipo Tributacao         ]
                  [IPI_CST                 ]=[NotaEI->IPI_CST                 ]
                  [CFO                     ]=[NotaEI->CFO                     ]
                  UnLockRecord

                  Moveto "NotaEI"

                  If Not IsBlank([Codigo_Fornecedor])
                     Then Moveto "FornProd"
                          Moveto [Codigo]
                          Locate [NotaEC->Codigo],[NotaEI->Codigo_Fornecedor]
                          If Not RetVal
                             Then End Down
                                  [Codigo           ]=[NotaEC->Codigo           ]
                                  [Codigo_Fornecedor]=[NotaEI->Codigo_Fornecedor]
                          Endif
                          [Codigo do Item            ]=[NotaEI->Codigo do Item            ]
                          [Descricao do Item         ]=[NotaEI->Descricao do Item         ]
                          [Tributacao de IPI         ]=[NotaEI->Tributacao de IPI         ]
                          [Aliquota Reduzida BCIPI   ]=[NotaEI->Aliquota Reduzida BCIPI   ]
                          [Aliquota de IPI           ]=[NotaEI->Aliquota de IPI           ]
                          [Tributacao de ICMS        ]=[NotaEI->Tributacao de ICMS        ]
                          [Aliquota Reduzida BCICMS  ]=[NotaEI->Aliquota Reduzida BCICMS  ]
                          [Aliquota de ICMS          ]=[NotaEI->Aliquota de ICMS          ]
                          [CSOSN                     ]=[NotaEi->CSOSN                     ]
                          [Fator de Conversao        ]=[NotaEI->Fator de Conversao        ]
                          [Unidade Entrada           ]=[NotaEI->Unidade Entrada           ]
                          [Numero do Lancamento      ]=[NotaEI->Numero do Lancamento      ]
                          [MVA                       ]=[NotaEI->MVA                       ]
                          [ICMS UF_ORIGEM            ]=[NotaEI->ICMS UF_ORIGEM            ]
                          [Tipo Tributacao           ]=[NotaEI->Tipo Tributacao           ]
                          [IPI_CST                   ]=[NotaEI->IPI_CST                   ]
                          [CFO                       ]=[NotaEI->CFO                       ]
                          UnLockRecord
                  EndIf
          EndIf
  EndIf

  If [NotaEI->Codigo do Item]<>itant
     Then itant=[NotaEI->Codigo do Item]
          Moveto "Itens"
          Moveto [Codigo do Item]
          Locate [NotaEI->Codigo do Item]
          If RetVal
             Then If (IsBlank([NCM]) or [NCM]="00000000" Or Len([NCM])<8) And [NCM]<>[NotaEI->NCM]
                     Then If Not IsBlank([NotaEI->NCM]) And [NotaEI->NCM]<>"00000000" Or Len([NotaEI->NCM])=8 Then
                            MSG=    Completa("Item ["+StrVal([NotaEI->Sequencia do Lancamento])+"] = "+[Codigo do Item]+" "+[Descricao do Item],71," ")+"// //"
                            MSG=MSG+Completa("            desta nota consta NCM="+[NotaEI->NCM],71," ")+"//"
                            MSG=MSG+Completa("e no cadastro do mesmo consta NCM="+[NCM        ],71," ")+"// //"                                                                                        
                            MSG=MSG+"Verificar o cadastro do produto com o supervisor!"
                            Mensagem(MSG)
                          Endif   
                     
                  EndIf
          EndIf           
  EndIf           

  Moveto "NotaEI"
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

Moveto "NotaEC"
UnLockRecord
KeyPress "F7"
Moveto [Numero do Lancamento]
EndProc  ; (Cotacao)

;*******************************************************************************
;* Atualizacao Consignacao                                                     *
;*******************************************************************************
Proc CONSIGNACAO(OPERAC)
Private OPERAC,NUMEROL

If [NotaEC->Sistema Gerador]<>"CS"
   Then Return
EndIf

If [NotaEC->Tipo de Operacao]<>"D" Or
   ([NotaEC->CFO]<>"199" And [NotaEC->CFO]<>"299") Or ([NotaEC->CFO]<>"1949" And [NotaEC->CFO]<>"2949") Or
   [NotaEC->Tipo]<>"C"
   Then Return
EndIf

If (OPERAC="IncAlt" Or OPERAC="ExclusaoI") And
   (([NotaEI->Tipo do Item]<>"P" And
    [NotaEI->Tipo do Item]<>"T") Or
    IsBlank([Codigo do Item]))
   Then Return
EndIf

Moveto "NotaEC"
KeyPress "F7"

NUMEROL=""

; Controle de Movimentos
Moveto "\\Sistemas\\Consigna\\CabMovim"
Moveto [Codigo do Cliente]
Locate IndexOrder By "cabmovimi01" [NotaEC->Codigo],
       [NotaEC->Numero do Documento],[NotaEC->Serie do Documento]
If RetVal
   then NUMEROL=[\Sistemas\Consigna\CabMovim->Numero do Lancamento]
        If OPERAC="ExclusaoC"
           Then Del
        EndIf
   Else If OPERAC="IncAlt"
           Then End
                If [Numero do Lancamento]=""
                   Then NUMEROL="000001"
                   Else NUMEROL=AlinhM(StrVal(Numval([Numero do Lancamento])+1),6)
                        Down
                EndIf
                [Numero do Lancamento]=NUMEROL
                [Codigo do Cliente   ]=[NotaEC->Codigo]
                [Numero do Documento ]=[NotaEC->Numero do Documento]
                [Codigo do Documento ]=[NotaEC->Codigo do Documento]
                [Tipo de Movimento   ]="S"
                [Tipo de Operacao    ]="D"
                [Data de Emissao     ]=[NotaEC->Data de Entrada]
                [Codigo da Empresa   ]=[NotaEC->Codigo da Empresa]
                [Sistema Gerador     ]="NE"
                UnLockrecord
        EndIf
EndIf

If OPERAC<>"ExclusaoC"
   Then Moveto "\\Sistemas\\Consigna\\IteMovim"
        Moveto [Numero do Lancamento]
        Locate NUMEROL,[NotaEI->Sequencia do Lancamento]
        If RetVal
           Then Switch
                  Case OPERAC="IncAlt":
                        [Quantidade             ]=[NotaEI->Quantidade]
                        [Valor Unitario         ]=[NotaEI->Preco Unitario]
                        [Valor Total            ]=[NotaEI->Preco Total]
                        UnLockrecord
                  Case OPERAC="ExclusaoI":
                       Del
                EndSwitch
           Else If OPERAC="IncAlt"
                   Then End
                        Down
                        [Numero do Lancamento   ]=[\Sistemas\Consigna\CabMovim->Numero do Lancamento]
                        [Sequencia do Lancamento]=[NotaEI->Sequencia do Lancamento]
                        [Codigo do Item         ]=[NotaEI->Codigo do Item]
                        [Quantidade             ]=[NotaEI->Quantidade]
                        [Valor Unitario         ]=[NotaEI->Preco Unitario]
                        [Valor Total            ]=[NotaEI->Preco Total]
                        UnLockrecord
                EndIf
        EndIf

        ; Controle de Saldos
        Moveto "\\Sistemas\\Consigna\\CabSaldo"
        Moveto [Codigo do Cliente]
        Locate [NotaEC->Codigo],[NotaEI->Codigo do Item],"",""
        If Not Retval
           Then If OPERAC="IncAlt"
                   Then End
                        Down
                        [Codigo do Cliente]=[NotaEC->Codigo]
                        [Codigo do Item   ]=[NotaEI->Codigo do Item]
                        UnLockRecord
                EndIf
        Endif

        ANOREF=AlinhM(StrVal(Year([NotaEC->Data de Entrada])),4)
        MESREF=AlinhM(StrVal(Month([NotaEC->Data de Entrada])),2)

        Moveto "\\Sistemas\\Consigna\\IteSaldo"
        Locate [NotaEC->Codigo],[NotaEI->Codigo do Item],"","",ANOREF,MESREF
        If RetVal
           Then Switch
                  Case OPERAC="IncAlt":
                       [Devolucoes]=([Devolucoes]-QUANT)+[NotaEI->Quantidade]
                  Case OPERAC="ExclusaoI":
                       [Devolucoes]=[Devolucoes]-[NotaEI->Quantidade]
                EndSwitch
                UnLockRecord
           Else If OPERAC="IncAlt"
                   Then End
                        Down
                        [Codigo do Cliente]=[NotaEC->Codigo]
                        [Codigo do Item   ]=[NotaEI->Codigo do Item]
                        [Ano Referencia   ]=ANOREF
                        [Mes Referencia   ]=MESREF
                        [Devolucoes]=[Devolucoes]+[NotaEI->Quantidade]
                        UnLockrecord
                EndIf
        EndIf
EndIf

Moveto "NotaEC"
KeyPress "F7"
EndProc  ; (Consignacao)

;*******************************************************************************
;* Rotina para zerar variaveis usadas no Form                                  *
;*******************************************************************************
Proc Limpa_VarsForm()

VCITENS    =BlankNum()
VSQTDE     =BlankNum()
VSVRMERC   =BlankNum()

DIF_VRMERC =BlankNum()
DIF_VRSERV =BlankNum()
DIF_BCICMS =BlankNum()
DIF_ICMS   =BlankNum()
DIF_BCST   =BlankNum()
DIF_ST     =BlankNum()
DIF_IPI    =BlankNum()
DIF_NOTA   =BlankNum()

EndProc

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()
Private Result

If IsEmpty("P_Entra")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Result=False
   Else
        UnLockRecord
        KeyPress "F7"
        While True
          If Not IsLockRecord()
             Then QuitLoop
          EndIf
        EndWhile
        
        Moveto "P_Entra"
        Moveto [Codigo_Empresa]
        Locate [NotaEC->Codigo da Empresa]
        If Not RetVal
           Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Result=False
           Else PARAM_CONTA_CAIXA  = [Codigo_Conta_Caixa       ]
                Moveto [Codigo_Conta_Caixa]
                Ativa_Lookup()
                Moveto [Codigo da Conta]
                Locate PARAM_CONTA_CAIXA
                If RetVal
                   Then PARAM_DESC_CONTA_CAIXA=[Descricao da Conta]
                   Else PARAM_DESC_CONTA_CAIXA=""
                EndIf
                Keypress "Esc"
                UnLockRecord
                
                PARAM_TABELA_PRECO    = [Tabela_Preco             ]
                PARAM_ATTAB_PRECO     = [Atualiza_Tabela_Preco    ]
                PARAM_CCE_SUBICMS     = [SubTrai_ICMS_CustoEntrada]
                PARAM_BCPV_SUBICMS    = [SubTrai_ICMS_BC_PrVenda  ]
                PARAM_RELATORIO       = [Script_Impressao         ]
                PARAM_ATUA_CXBC       = [Atualiza_Caixa_Banco     ]
                PARAM_ATUA_CAPG       = [Atualiza_Contas_Pagar    ]
                PARAM_CALC_COFLUCR    = [Calcular_COFINS_Lucrativ ]
                PARAM_TAXA_COFINS     = [Taxa_COFINS              ]
                PARAM_TAXA_LUCRATIV   = [Taxa_Lucratividade       ]
                PARAM_USA_COFINS_DBCR = [Utiliza_COFINS_DBCR      ]
                PARAM_PECAS_ITEM      = [Controla_Pecas_Item      ]
                
                PARAM_CCE_SUBCOFINS   = [SubTrai_COFINS_CustoEntra]
                PARAM_CCE_SUBPIS      = [SubTrai_PIS_CustoEntrada ]
                PARAM_TAXA_PIS        = [Taxa_PIS                 ]
                
                ;;MSG=[Notaec->Codigo do Documento]+" - "+SYS_CODIGO_CLIENTE+" - "+SubStr(Directory(),1,1)
                ;;Mensagem(MSG)
                
                If ([Notaec->Codigo do Documento]="NE") And (SYS_CODIGO_CLIENTE="0117") And
                   (SubStr(Directory(),1,1)="X")
                   Then PARAM_CCE_SUBICMS    = "N"
                        PARAM_BCPV_SUBICMS   = "N"
                        PARAM_CALC_COFLUCR   = "N"
                        PARAM_USA_COFINS_DBCR= "N"
                EndIf

                Result=True
        EndIf
EndIf

Moveto "NotaEC"
KeyPress "F7"

Return Result
EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Monta_Tabelas()

View NOWINDOW "NotaEI"
View NOWINDOW "NotaECV"
View NOWINDOW "NotaEcp"
View NOWINDOW "Cotacao"
View NOWINDOW "FornProd"
View NOWINDOW "P_Entra"               
View NOWINDOW "\\Sistemas\\CtaCor\\MovCont"
View NOWINDOW "\\Sistemas\\CtaCor\\SaldCont"
View NOWINDOW "\\Sistemas\\CtaPag\\Titulos"
;;View NOWINDOW "\\Sistemas\\Consigna\\CabMovim"
;;View NOWINDOW "\\Sistemas\\Consigna\\IteMovim"
;;View NOWINDOW "\\Sistemas\\Consigna\\CabSaldo"
;;View NOWINDOW "\\Sistemas\\Consigna\\IteSaldo"

View NOWINDOW "\\Sistemas\\Estoque\\Itens" ImageRights ReadOnlY
View NOWINDOW "\\Sistemas\\Estoque\\SdEstq"
View NOWINDOW "\\Sistemas\\Estoque\\EstqPrm"
View NOWINDOW "\\Sistemas\\Vendas\\TbPrIte"
View NOWINDOW "\\Sistemas\\Vendas\\TbPrCpg"

CoEdit "NotaEC"

;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Return False
EndIf

PickForm "1"
Moveto "\\Sistemas\\Compras\\OCC" SetHighLight Current Record 119 Field 119
Moveto "\\Sistemas\\Compras\\OCI" SetHighLight Current Record 119 Field 119
Moveto "SdEstq"                   SetHighLight Current Record 51  Field 51
Moveto "NotaECV"                  SetHighLight Current Record 119 Field 119

Moveto "NotaEC"
PickForm "F"
Return True
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoAP()
Digita_APrazo()
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
DIGITAI()
Moveto "NotaEI"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()

If CHAVEC=0
   Then Verifica_Natureza_Frete()
        Limpa_Campos()
   Else VSDGNATFRETE=""
EndIf

While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1 
     Then Controle_Dia()
          [Modo_Sistema]="02" 
  EndIf

  If FACA_CHAVEI
     Then
          Moveto "NotaEC"
          Limpa_Campos()
          
          Moveto "NotaEI"
          If RecordStatus("New")=False
             Then VRALTERADO=False
                  MSG =""
                  MSG2=""
                  MSG3=""
                  If [NotaEC->CFO                      ]<>VANT_CFOP       Then VRALTERADO=True  MSG=MSG+"CFOP, "                               EndIf
                  If [NotaEC->VALOR MERCADORIA         ]<>VANT_MERCDIG    Then VRALTERADO=True  MSG=MSG+"Vr Produtos, "                     EndIf
                  If [NotaEC->VALOR SERVICO            ]<>VANT_SERVDIG    Then VRALTERADO=True  MSG=MSG+"Vr Servi‡o, "                         EndIf
                  If [NotaEC->VALOR DESCONTO           ]<>VANT_DESCTO     Then VRALTERADO=True  MSG=MSG+"Vr Desconto, "                        EndIf
                  If [NotaEC->VALOR DESPESAS ACESSORIAS]<>VANT_DESPACES   Then VRALTERADO=True  MSG=MSG+"Vr Despesas acess¢rias, "             EndIf
                  If [NotaEC->VALOR ACRESCIMOS_DESCTOS ]<>VANT_ACRESDESC  Then VRALTERADO=True  MSG=MSG+"Vr Acr‚scimo/Desconto, "              EndIf
                  If [NotaEC->VALOR DO FRETE           ]<>VANT_FRETE      Then VRALTERADO=True  MSG=MSG+"Vr Frete, "                           EndIf
                  If [NotaEC->VALOR DO SEGURO          ]<>VANT_SEGURO     Then VRALTERADO=True  MSG=MSG+"Vr Seguro, "                          EndIf
                  If [NotaEC->RECOLHIMENTO SUBSTITUICAO]<>VANT_RECSUBST   Then VRALTERADO=True  MSG=MSG+"Tipo recolhimento da substitui‡„o, "  EndIf
                  If [NotaEC->VALOR SUBSTITUICAO ICMS  ]<>VANT_VSUBST     Then VRALTERADO=True  MSG=MSG+"Vr substitui‡„o, "                    EndIf
                  If [NotaEC->VR SUBSTITUICAO DESTINAT ]<>VANT_VSUBSTDEST Then VRALTERADO=True  MSG=MSG+"Vr substitui‡„o Destinat rio, "       EndIf

                  If VRALTERADO
                     Then posini=1
                          While True
                            posatu=SearchFrom(", ",MSG,posini)
                            If posatu=0
                               Then MSG2=MSG2+MSG3+"."
                                    QuitLoop
                            EndIf
                            If Len(MSG3+SubStr(MSG,posini,posatu-posini))>75
                               Then MSG2=MSG2+MSG3+",//"
                                    MSG3=""
                            EndIf
                            If Not IsBlank(MSG3)
                               Then MSG3=MSG3+", "+SubStr(MSG,posini,posatu-posini)
                               Else MSG3=RTrim(SubStr(MSG,posini,posatu-posini))
                            EndIf
                            posini=posatu+2
                          EndWhile

                          MSG="Ocorreu altera‡„o no(s) campo(s) abaixo: // //"
                          MSG=MSG+MSG2+"// //"
                          MSG=MSG+"Alterar cada item desta nota para corrigir com os novos valores !"
                          Mensagem(MSG)
                  EndIf
          EndIf
  EndIf

  While FACA_CHAVEI
    While True
      CHAVEI()
      If CHAVEI=9 Then QuitLoop EndIf
      Controla_EdicaoI()
    EndWhile
    While FACA_DIGITAF
      DIGITAF()
      If CHAVEF=0
         Then COTACAO()
              FACA_DIGITAC=False
              FACA_CHAVEI =False
      EndIf
      QuitLoop
    EndWhile
  EndWhile
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
EndProc

;*******************************************************************************
;* Rotina Principal Notas de Entrada                                           *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
If Not IsAssigNed(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""    EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf

Limpa_VarsForm()

PARAM_EXIBECUSTO  = "S"

If Not Monta_Tabelas()
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf

If NRecords("NotaEC")>1
   Then Home
        If IsBlank([Numero do Lancamento])
           Then Echo Normal
                Echo Off
                MSG="Existe registro com Erro !// //"
                MSG=MSG+"Verificar numero lan‡amento em branco !// //"
                MSG=MSG+"Excluir o lan‡amento e verificar a origem do mesmo !"
                Mensagem(MSG)
        EndIf
EndIf

OPCAO_FORM="F"
While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
