;** Nota ***********************************************************************
;*  Digitacao de Nota Fiscal                                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 08/09/1997 por Anivel Augusto Rodrigues
;Ultima Alteracao: 11/08/2006 por Antonio Marcelo Alves
;Motivo Alteracao: Adicao da rotina Checa_Supervisor quando Excluir
;Motivo Alteracao: Ajustes MVA/CFOP  
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                             
;Ultima Alteracao: 20/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Comissao Item Vico
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 28/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cancelar NF quando Troca
;Ultima Alteracao: 26/09/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cliente 0209 Substituicao
;Ultima Alteracao: 13/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes P_Duplic
;Ultima Alteracao: 22/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CTR
;Ultima Alteracao: 01/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Locate Referencia
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 07/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cheques em Cobranca
;Ultima Alteracao: 07/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Transferencia Custo Medio
;Ultima Alteracao: 19/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Subst. Credito ICMS
;Ultima Alteracao: 22/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VRBCICMS_CREDSN, VRIPI_SUBST
;Ultima Alteracao: 30/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cartao Credito/Debito Ft_Duplic
;Ultima Alteracao: 31/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_Comissao_Vendedor() ModaMil
;Ultima Alteracao: 31/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_Comissao_Vendedor() ModaMil
;Ultima Alteracao: 06/05/2009 por
;Motivo Alteracao: Ajustes Cheques()
;Ultima Alteracao: 09/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes UF<>UFEmpresa/CFOP
;Ultima Alteracao: 10/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carrega_Parametros
;Ultima Alteracao: 31/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete por conta 0_Sem Frete                                             
;Ultima Alteracao: 31/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Campo MVA s/Ajustado                                             
;Ultima Alteracao: 09/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Substituicao Sim/NÇo
;Ultima Alteracao: 26/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Atualizacao ESTQPRM            
;Ultima Alteracao: 26/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle Pecas Brasil Textil            
;Ultima Alteracao: 02/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CalcICMS Adicicionais            
;Ultima Alteracao: 16/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFO Item/Pega_CFOP
;Ultima Alteracao: 22/12/2009 por Bruno Carvalho
;Motivo Alteracao: Ajustes BCSubstituicao/Valor DIGITADO/CALCULADO
;Ultima Alteracao: 23/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Substituicao e MVA Ajustado
;Ultima Alteracao: 23/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Substituicao e MVA Ajustado
;Ultima Alteracao: 06/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa_Comissao_vendedor A VISTA/A PRAZO/TODAS              
;Ultima Alteracao: 23/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Codigo de Barras                                          
;Ultima Alteracao: 15/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F1 Cidades
;Ultima Alteracao: 23/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NF-e                                       
;Ultima Alteracao: 13/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Exclusao_C(), Cancela_NF()                   
;Ultima Alteracao: 26/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Extorno Sistema Destino Etiqueta Brasil Textil            
;Ultima Alteracao: 04/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes CFO Frete
;Ultima Alteracao: 13/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem_Pagina1() UseVars DESTIN_ATUALIZA_PEDIDOS
;Ultima Alteracao: 18/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Serie NFe  
;Ultima Alteracao: 08/06/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Cheques Trocados        
;Ultima Alteracao: 02/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera Duplicata                      
;Ultima Alteracao: 05/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST item             
;Ultima Alteracao: 07/07/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes na Variavel DP_GERA_DUPLICATA 
;Ultima Alteracao: 16/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Loop Exluir_Rateio_Comissao() 
;Ultima Alteracao: 16/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Loop Exluir_Rateio_Comissao() 
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha      
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opcoes reducao BCICMS     
;Ultima Alteracao: 30/08/2010 por Karina Andrade
;Motivo Alteracao: Ajustes Novo Layout          
;Ultima Alteracao: 10/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN  
;Ultima Alteracao: 01/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes vari vel DP_GERA_DUPLICATA (Desfazer_NFE)                       
;Ultima Alteracao: 15/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 26/10/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Verifica_Caixa()
;Ultima Alteracao: 07/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ReducÆo BCICMS apenas se houver desconto na NF
;Ultima Alteracao: 08/11/2010 por Bruno Carvalho
;Motivo Alteracao: Ajuste Rotina C¢digo de Barra
;Ultima Alteracao: 09/12/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado Consulta de Itens
;Ultima Alteracao: 23/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Frete por Conta"
;Ultima Alteracao: 30/12/2010 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: 14/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Rateio_BC_Itens() Ajustes Novos Campos
;Ultima Alteracao: 28/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete                                           
;Ultima Alteracao: 30/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete                                          
;Ultima Alteracao: 31/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Rateio PIS/COFINS                              
;Ultima Alteracao: 13/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Rateio PIS/COFINS                                           
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 03/05/2011 por Karina Andrade
;Motivo Alteracao: Retirado rotina Desfazer_NFe, add no Fatura.
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes
;Ultima Alteracao: 16/05/2011 por Karina Andrade
;Motivo Alteracao: Add Play "FT_DESF" para Cancelamento 
;Ultima Alteracao: 23/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes C¢digo de Barras   
;Ultima Alteracao: 24/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Altera‡Æo/Cancelamento com supervisor  
;Ultima Alteracao: 15/06/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Layout "Digita‡Æo dos Itens"                      
;Ultima Alteracao: 16/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TECLAS nos itens
;Ultima Alteracao: 07/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao/Ajustes dados para o SPED     
;Ultima Alteracao: 08/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ESC Exportado Caixa/Cupom Faturado
;Ultima Alteracao: 15/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CTRC
;Ultima Alteracao: 15/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IPI Outros                         
;Ultima Alteracao: 23/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ShowPopup                          
;Ultima Alteracao: 27/07/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina "informacoes adicionais" na digita‡Æo dos itens
;Ultima Alteracao: 28/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ST Devolcucao 60 rateio
;Ultima Alteracao: 03/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes bloqueio digita‡Æo CTR                        
;Ultima Alteracao: 03/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes bloqueio digita‡Æo CTR
;Ultima Alteracao: 03/08/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado Valor II e ajustes na rotina Valores de Importa‡Æo
;Ultima Alteracao: 09/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFE pra todas as series
;Ultima Alteracao: 12/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateio valores nos itens retorno industrializa‡Æo YVN                        
;Ultima Alteracao: 15/08/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina para formas de localizar o item e Ajustes "0296"
;Ultima Alteracao: 25/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Cancelamento
;Ultima Alteracao: 30/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CUSTO=0->CUSTO=[Ultimo Custo Total]
;Ultima Alteracao: 14/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Locate apos SW_CONS
;Ultima Alteracao: 25/10/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado Ordem de Compra Publica
;Ultima Alteracao: 08/11/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Proc Transferencia()
;Ultima Alteracao: 09/11/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Parametro de bloqueio para Altera‡Æo e ReemissÆo
;Ultima Alteracao: 01/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Agrupamento PIS/COFINS
;Ultima Alteracao: 06/01/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VRBCST1 idem OF
;Ultima Alteracao: 10/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes
;Motivo Alteracao: Inclu¡do CALCULO_NF_AUTOMATICO, removido CALCULA_ST e onde 
;                  usava o mesmo ajustado p/ CALCULO_NF_AUTOMATICO

;*******************************************************************************
;* Rotina para Controlar Chave da Nota Fiscal                                  *
;*******************************************************************************
Proc CHAVEC()
COPIOU_REGISTRO=False
INICIO_PAGINA=True

FACA_DIGITAC =True
NF_Cancelada =False
VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

While True
  Moveto "Notac"
  End
  Moveto [Codigo da Empresa]
  
  If OPCAO_FORM="F"
     Then Down
     Else PgDn PgDn PgDn
  EndIf
  Moveto [Codigo da Empresa]

  If Not IsBlank(ANT_EMPRESA)
     Then [Codigo da Empresa  ]=ANT_EMPRESA
          [Codigo do Documento]=ANT_CDDOCTO
     Else [Codigo da Empresa  ]=PARAM_EMPRESA
  EndIf
  SetaCorRegistro("Editar")
  While True
  
  MSGCAMPO=Field()
  
  If Field()="Codigo da Empresa" And Not IsBlank([Codigo da Empresa])
     Then MSGCAMPO="Empresa: "+[Nome Fantasia Empresa]
  EndIf

  
  If Field()="Codigo do Documento" Or
     Field()="Codigo da Empresa"
     Then TECLA="F1=Tabelas"
     Else TECLA="" 
  Endif
  
  AguardaTeclasPadrao()

  Switch
        Case RetVal=-33 : SemFuncoes()
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F1":
             If Field()="Codigo do Documento" Or
                Field()="Codigo da Empresa"
                Then CONSULTAF1()
             Endif
        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
               COPIOU_REGISTRO=False
               INICIO_PAGINA=True

               FACA_DIGITAC =True
               NF_Cancelada =False
               VCITENS =BlankNum()
               VSQTDE  =BlankNum()
               VSVRMERC=BlankNum()

               If OPCAO_FORM="F"
                  Then PAGINA("NotaC","MR")
                  Else PAGINA("NotaC","MT")
               EndIf
               EMPRESA=[Codigo da Empresa  ]
               NUMDOC =[Numero do Documento]
               SERIE  =[Serie do Documento ]
               CODDOC =[Codigo do Documento]               
               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])
                         Then CARREG_ACERTADO=False
                              If Not IsBlank([Numero_Carregamento])
                                 Then Moveto [Numero_Carregamento]
                                      Ativa_Lookup()
                                      Moveto [Numero_Carregamento]
                                      Locate [NotaC->Numero_Carregamento]
                                      If RetVal
                                         Then If [Situacao]="ACERTADO"
                                                 Then Mensagem("Carregamento j  foi ACERTADO !")
                                                      KeyPress "ESC"
                                                      UnLockRecord
                                                      CARREG_ACERTADO=True
                                              EndIf
                                      EndIf
                                      KeyPress "ESC"
                              EndIf
                              If Not CARREG_ACERTADO
                                 Then If (IsBlank([Codigo da Empresa]) Or Carrega_Parametros()) And
                                         IsBlank([Situacao])
                                         Then If Checa_Supervisor()
                                                 Then EXCLUSAO_C()
                                                 Else UnLockRecord
                                              EndIf
                                         Else UnLockRecord
                                      EndIf
                              EndIf
                         Else UnLockRecord
                      EndIf
                 OtherWise: QuitLoop
               EndSwitch
               If OPCAO_FORM="1"
                  Then PickForm "1"
                  Else PickForm "F"
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             If Field()="Codigo da Empresa"
                Then CHAVEC=9
                     Del
                     Return
                Else Left
             EndIf
        Case Retval="ENTER":
             If IsBlank([])
                Then Loop
             EndIf
             Switch
                  Case Field()="Codigo da Empresa":
                       EMPRESA=[Codigo da Empresa]
                       Moveto [Numero do Documento]
                  Case Field()="Numero do Documento":
                       []=ALINH()
                       NUMDOC=[Numero do Documento]
                       Moveto [Codigo do Documento]
                  Case Field()="Codigo do Documento":
                       If Search("CT",[Codigo do Documento])>0 Or Search("CA",[Codigo do Documento])>0
                        Then MSG="Lan‡amento ‚ referente //a CONHECIMENTO DE TRANSPORTE, //"
                             MSG=MSG+"utilizar Digita‡Æo de CTR !"
                             Mensagem(MSG)
                             Loop
                       EndIf
                                         
                       SERIE =[Serie do Documento]
                       CODDOC=[Codigo do Documento]

                       ANT_EMPRESA=[Codigo da Empresa]
                       ANT_CDDOCTO=[Codigo do Documento]

                       Del
                       PickForm "1"
                       Moveto [Codigo da Empresa]
                       Locate EMPRESA,NUMDOC,SERIE
                       If Retval
                          Then CHAVEC=0
                          Else CHAVEC=1
                               PgDn PgDn PgDn
                               [Codigo da Empresa       ] = EMPRESA
                               [Numero do Documento     ] = NUMDOC
                               [Codigo do Documento     ] = CODDOC
                       EndIf
                       If Not IsLockRecord()
                          Then Echo Normal
                               Echo Off
                               If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                                  (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
                                  Then Return
                               EndIf
                       EndIf
                       If CHAVEC=1
                          Then Del
                       EndIf
                       If OPCAO_FORM="F"
                          Then PickForm "F"
                       EndIf
                       QuitLoop
             EndSwitch
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DigitaC()
FACA_CHAVEI   = False
Moveto "NotaC"

If Search("CT",CODDOC)>0 Or Search("CA",CODDOC)>0
  Then MSG="Lan‡amento ‚ referente //a CONHECIMENTO DE TRANSPORTE, //utilizar Digita‡Æo de CTR !"
       Mensagem(MSG)
       CHAVEC=9
       Return
EndIf

If Not Carrega_Parametros()
   Then If CHAVEC=1
           Then Del
        EndIf
        CHAVEC=9
        Return
   Else If CHAVEC=1 And INICIO_PAGINA
           Then [Codigo da Destinacao    ] = PARAM_DESTINACAO
                [Codigo da Transportadora] = PARAM_TRANSPORTADORA
                [Codigo da Tabela        ] = PARAM_TABELA_PRECO
                [Sistema Gerador         ] = "MA"
        EndIf
EndIf

FACA_CHAVEI  = True
If CHAVEC=0
  Then If INICIO_PAGINA
          Then
               Switch  
                 Case [Situacao]="C" And [Descricao da Destinacao]="INUTILIZADA":
                   Mensagem("NF-e INUTILIZADA !")
                   CHAVEC=9
                   Return
        
                 Case [Situacao]="C":
                   Mensagem("Documento CANCELADO !")
                   CHAVEC=9
                   Return
        
               EndSwitch  
        
               DoctoGerado=[Tipo do Documento]+"/"+[Numero do Documento]+"-"+[Serie do Documento]
               While True
            
                 Echo Normal
                 Echo Off
                 ShowPopup " Op‡”es " CENTERED
                     "~A~lterar o documento"    : " Altera‡Æo do documento "+DoctoGerado    :"Alterar",
                     "~C~ancelar o documento"   : " Cancelamento do documento "+DoctoGerado :"Cancelar",
                     Separator,
                     "~S~air"                   : " Ignorar op‡äes"                         :"Cancela"
                 EndMenu
                 To Opcaoc
                 echo off
         
                 If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                    Then CHAVEC=9
                         Return
                 EndIf
            
                 Switch
                    Case Opcaoc="Cancelar":
                      MSG=    "Acesso supervisionado !// //"
                      MSG=MSG+"* O cancelamento deste documento implica em estornos//"
                      MSG=MSG+"  nos controles integrados ao documento.            // //"
                      If ConfGeral(MSG+"Deseja CANCELAR este documento ?")
                        Then If Not CHECA_SUPERVISOR()
                                Then Loop
                              EndIf
                              TIPO="CANCELAR"
                              Play "FT_DESF"
                      EndIf

                      CHAVEC=9
                      Return      

                   Case Opcaoc="Alterar":
                     If [Sistema Gerador]="TR"
                       Then Mensagem("Documento gerado por TROCA/VENDA, altera‡Æo n„o permitida !// //Permiss„o apenas para Cancelamento !")
                            Loop
                     EndIf       
                     If Not IsBlank([Numero_Carregamento])
                        Then Moveto [Numero_Carregamento]
                             Ativa_Lookup()
                             Moveto [Numero_Carregamento]
                             Locate [NotaC->Numero_Carregamento]
                             If RetVal
                                Then If [Situacao]="ACERTADO"
                                        Then Mensagem("Carregamento j  foi ACERTADO !")
                                             KeyPress "ESC"
                                             Loop
                                     EndIf
                                Else Mensagem("Carregamento n„o encontrado !")
                                     KeyPress "ESC"
                                     Loop
                             EndIf
                             KeyPress "ESC"
                     EndIf
        
                     MSG=""
                     If [Sistema Gerador]="FT" Or
                        [Sistema Gerador]="CF" Or
                        [Sistema Gerador]="BA"   
                        Then MSG=MSG+"Documento gerado automaticamente por outro processo !// //"
                     EndIf
                     MSG=MSG+"Acesso supervisionado !// //"
                     MSG=MSG+"* N„o ‚ recomendado efetuar altera‡”es neste documento;          //"
                     MSG=MSG+"* As altera‡äes efetudas implicam em estornos e novos lan‡amentos//"
                     MSG=MSG+"  nos controles integrados a este documento.                     "
                     Mensagem(Msg)
                     If Not Checa_Supervisor()
                        Then Loop
                     EndIf        
                     QuitLoop
        
                  EndSwitch
        
               EndWhile
       EndIf
       If [Tipo de Pagamento]="V"
          Then Moveto [Exportado_Caixa]
          Else If [Tipo do Documento]="CUP"
                  Then Moveto [Cupom Fiscal Faturado]
                  Else Moveto [Codigo da Destinacao ]
               EndIf
       EndIf
  Else If ANT_DEST   <>"" And
          ANT_DTEMI  <>BlankDate() And
          ANT_DTSAI  <>BlankDate() And
          ANT_DTACE  <>BlankDate() And
          ANT_CDTAB  <>""
          Then
               [Codigo da Destinacao]=ANT_DEST
               [Numero_Carregamento ]=ANT_NCARREG
               [Numero Nota Original]=ANT_NFORIG
               [Data de Emissao     ]=ANT_DTEMI
               [Data de Saida       ]=ANT_DTSAI
               [Data de Acerto      ]=ANT_DTACE
               [Codigo da Tabela    ]=ANT_CDTAB

               Moveto [Codigo]
          Else Moveto [Codigo da Destinacao]
       EndIf
EndIf
INICIO_PAGINA=False

While True

      TECLA=" Esc=Retornar  "

      If Field()="Codigo da Empresa"        Or
         Field()="Codigo da Destinacao"     Or
         Field()="Codigo"                   Or
         Field()="Codigo da Transportadora" Or
         Field()="Codigo do Representante"  Or
         Field()="Codigo da Tabela"         Or
         Field()="Condicao de Pagamento"    Or
         Field()="Numero_Carregamento"      Or
         Field()="Cidade"                   Or
         Field()="UF"
         Then TECLA=TECLA + "F1=Tabelas  "
         Else TECLA=TECLA + "            "
      EndIf
      If CHAVEC=0
         Then TECLA=TECLA + "Del=Excluir  "
         Else TECLA=TECLA + "             "
      EndIf
      TECLA=TECLA + "Alt+F=Fun‡”es  PgDn  "

      Prompt TECLA

      MSGCAMPO=Field()

      Switch
        Case Field()="Exportado_Caixa"       : MSGCAMPO="Nota Exportada p/ o Caixa (Sim/N„o) ? "
        Case Field()="Frete por Conta"       : MSGCAMPO="Frete por Conta, Consulte [F1]"
        Case Field()="Consumidor Final"      : MSGCAMPO="Consumidor Final (Sim/N„o) * Sim = Calculo ICMS sobre o Valor da Nota Fiscal"
        Case Field()="Numero Nota Original"  : MSGCAMPO="Informe o Numero da Nota Original a que esta Digita‡„o se Refere !"
        Case Field()="S‚rie Nota Original"   : MSGCAMPO="Informe a S‚rie da Nota Original a que esta Digita‡„o se Refere !"
        Case Field()="Codigo da Tabela"      : MSGCAMPO="C¢digo da Tabela de Pre‡o"
        Case Field()="Origem do Pedido"      : MSGCAMPO="Visita, Fone, Balc„o"
        Case Field()="CGC"                   : MSGCAMPO="CNPJ/CPF"
        Case Field()="Cupom Fiscal Faturado" : MSGCAMPO="Cupom Fiscal Faturado (Sim/N„o) ? "
        Case Field()="Tipo Pessoa"           : MSGCAMPO="Fisica, Juridica"
        Case Field()="Codigo"                :
             If [Tipo Movimento Estoque]="S"
                Then MSGCAMPO="C¢digo do Destinatario"
                Else MSGCAMPO="C¢digo do Emitente"
             EndIf
        Case Field()="Data de Saida"         :
             If [Tipo Movimento Estoque]="S"
                Then MSGCAMPO="Data de Saida"
                Else MSGCAMPO="Data de Entrada"
             EndIf
        Case Field()="Hora de Saida"         :
             If [Tipo Movimento Estoque]="S"
                Then MSGCAMPO="Hora de Saida"
                Else MSGCAMPO="Hora de Entrada"
             EndIf
        OtherWise:
             pos_p=SearchFrom("Transp",Field(),1)
             If pos_p>0 And Field()<>"Codigo da Transportadora"
                Then MSGCAMPO=SubStr(Field(),1,pos_p-1)+"da Transportadora"
             EndIf
      EndSwitch

      Wait Field
           Message MSGCAMPO
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F4","F5","F7",-33

      If RetVal=-33
         Then Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                "[F4] ~O~rdem de Compra P£blica " : " Ordem de Compra P£blica         " : "F4",
                "[F5] ~O~bserva‡äes             " : " Observa‡äes do documento        " : "F5",
                "[F7] Documentos ~R~eferenciados" : " Referenciar demais documentos   " : "F7",
                Separator,
                "~S~air"                     : " Ignorar op‡äes"                   :"Cancela"
              EndMenu
              To MenuVar
              echo off
              If MenuVar="Cancela" or MenuVar="Esc"
                 Then Loop
              EndIf
    
              RetVal=MenuVar
      EndIf
    
      Switch
      Case RetVal="F1":
           If Field()="Codigo da Empresa"        Or
              Field()="Codigo da Destinacao"     Or
              Field()="Codigo"                   Or
              Field()="CFO"                      Or
              Field()="Codigo da Transportadora" Or
              Field()="Codigo do Representante"  Or
              Field()="Codigo da Tabela"         Or
              Field()="Condicao de Pagamento"    Or
              Field()="Numero_Carregamento"      Or
              Field()="Cidade"                   Or
              Field()="UF"
              Then If CONSULTAF1()
                      Then If Field()="Cidade"
                              Then [UF  ]=Reg_ConsultaF1["UF"]
                           EndIf
                   EndIf        
            EndIf
           If Field()="Frete por Conta"
              Then FreteporConta()
           EndIf   
      Case RetVal="PGDN":
           If Checagem_Pagina1() Then QuitLoop EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If Checa_Supervisor()
                       Then If EXCLUSAO_C()
                              Then CHAVEC=9
                                   QuitLoop
                            EndIf
                   EndIf
           EndIf
      Case Retval="F5":
           CampoAnt=Field()
           Edita_Memo("Observacao na Nota Fiscal",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA
      Case Retval="F4":
           Ordem_Compra_Publica()           
      Case Retval="F7":
           Play "FT_NFER"
           Loop
      Case Retval="ESC":
           Switch
           Case Field()="Razao Social":
                Moveto [Tipo Pessoa]
           Case Field()="Codigo do Representante"  : Moveto [Data da Autorizacao] 
           Case Field()="Codigo da Transportadora" : Moveto [Condicao de Pagamento]
           Case Field()="Placa do Veiculo"         : Moveto [Codigo da Transportadora]
           Case Field()="Numero_Carregamento"      : Moveto [Frete por Conta]
           Case Field()="Numero de Volumes"        : Moveto [Placa do Veiculo]
           Case Field()="Comissao do Representante": Moveto [Codigo do Representante]
           Case Field()="Codigo da Tabela"         : Moveto [Condicao de Pagamento]
           Case Field()="Condicao de Pagamento"    : Moveto [Origem do Pedido]
           Case Field()="Origem do Pedido"         : Moveto [Codigo do Representante]
           Case Field()="Consumidor Final"         : Moveto [Codigo]
           Case Field()="CFO"                      : Moveto [Codigo da Destinacao]
           Case Field()="Data de Saida"            : Moveto [Data de Emissao]
           Case Field()="Codigo da Destinacao" Or
                Field()="Exportado_Caixa"          :
                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then Del
                           Else Undo
                        EndIf
                        CHAVEC=9
                        QuitLoop
                Endif
           Case Field()="Data de Emissao"         : Moveto [CFO]
           Case Field()="Chave_Acesso_NFe"        : Moveto [Peso Liquido]
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER":
           If IsBlank([])
              Then If Field()="Codigo da Empresa" Or
                      Field()="Codigo da Destinacao" Or
                      Field()="CFO" Or
                      Field()="Codigo" Or
                      Field()="Codigo do Representante" Or
                      Field()="Condicao de Pagamento"
                      Then Loop
                   EndIf
           EndIf
           Switch
           Case Field()="Exportado_Caixa":
                If [Tipo do Documento]="CUP"
                   Then Moveto [Cupom Fiscal Faturado]
                   Else Moveto [Codigo da Destinacao ]
                EndIf
           Case Field()="Codigo da Destinacao":
                Moveto [CFO]
           Case Field()="CFO":
                If Search("REMES",[Descricao da Destinacao])>0 Or
                   Search("COMPLEM",[Descricao da Destinacao])>0 Or
                   Search("BONIF",[Descricao da Destinacao])>0 Or
                   Search("TROCA",[Descricao da Destinacao])>0 Or
                   (Search("RETOR",[Descricao da Destinacao])>0 And Search("MANIF",[Descricao da Destinacao])>0) Or
                   (Search("VENDA",[Descricao da Destinacao])>0 And Search("MANIF",[Descricao da Destinacao])>0) Or
                   SubStr([Codigo do Documento],1,2)="CT"
                   Then Switch
                          Case SubStr([Codigo do Documento],1,2)="CT" And SYS_CODIGO_CLIENTE="0000":
                               Moveto [Numero Nota Original]
                          Case SubStr([Codigo do Documento],1,2)="CT":
                               Moveto [Data de Emissao]
                          OtherWise: 
                               Moveto [Numero Nota Original]
                        EndSwitch
                   Else Moveto [Data de Emissao]
                EndIf
           Case Field()="Numero Nota Original":
                []=ALINH()
                If SubStr([Codigo do Documento],1,2)="CT" And
                   []="000000"
                   Then Mensagem("Informe o N§ da Nota Fiscal a que se refere o Conhecimento !")
                        Loop
                EndIf
                Moveto [Serie Nota Original]
           Case Field()="Serie Nota Original":
                Moveto [Data de Emissao]
                
           Case (Field()="Data de Saida" Or Field()="Data de Emissao" Or Field()="Data de Acerto"):
                If IsBlank([])
                   Then []=Today()
                EndIf

                If (Field()="Data de Emissao" Or Field()="Data de Acerto")
                   Then If Not IntervaloData([])
                           Then Loop
                        EndIf
                EndIf

                Right
           Case Field()="Hora de Saida" And IsBlank([]):
                []=Time()
                Right
           Case Field()="Codigo":
                If IsBlank([Codigo da Transportadora])
                   Then [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                EndIf

                Moveto [Consumidor Final]
           Case Field()="Consumidor Final":
                If IsBlank([])
                   Then []="N"
                EndIf
                If [Nome Fantasia EmitDest]="DIVERSOS"
                   Then Moveto [Razao Social]
                   Else Moveto [Codigo do Representante]
                EndIf
           Case Field()="CGC":
                If IsBlank([]) Then Loop EndIf
                If Not Checa_CGC_CPF_Formatado([]) Then Loop EndIf
                Switch
                  Case Search(".",[CGC])=4:
                       [Tipo Pessoa]="FISICA"
                  Case Search(".",[CGC])=3:
                       [Tipo Pessoa]="JURIDICA"
                EndSwitch
                Right
           Case Field()="IE":
                If IsBlank([])
                   Then Loop
                EndIf
                Right
           Case Field()="Data da Autorizacao":
                Moveto [Codigo do Representante]
           Case Field()="Codigo do Representante":
                Moveto [Comissao do Representante]
           Case Field()="Condicao de Pagamento":
                Moveto [Codigo da Tabela]
           Case Field()="Codigo da Tabela":
                Moveto [Codigo da Transportadora]
           Case Field()="Codigo da Transportadora":
                Moveto [Placa do Veiculo]
           Case Field()="Peso Liquido":
                Moveto[Frete por Conta]
           Case Field()="Frete por Conta":
                If IsFieldNull([]) 
                   Then Loop 
                EndIf
                Moveto [Numero_Carregamento]
           Case Field()="Numero_Carregamento":
                If Not IsBlank([]) And []<>"000000" And SYS_CODIGO_CLIENTE="0117"
                   Then Ativa_Lookup()
                        Moveto [Numero_Carregamento]
                        Locate [NotaC->Numero_Carregamento]
                        If RetVal
                           Then If [Codigo do Representante]<>[NotaC->Codigo do Representante]
                                   Then MSG=    "O Representante informado neste documento,//"
                                        MSG=MSG+"difere do Representante informado no Carregamento !// //"
                                        MSG=MSG+"Verificar, e se preciso anotar poss¡vel erro no Cadastro !"
                                        Mensagem(MSG)
                                EndIf
                        EndIf
                        KeyPress "ESC"
                EndIf
                If SubStr([Codigo do Documento],1,3)="NFE" And        
                   [Sistema Gerador    ]="MA"
                   Then Moveto [Chave_Acesso_NFe]
                   Else If Checagem_Pagina1() Then QuitLoop EndIf
                EndIf   
            Case Field()="Chave_Acesso_NFe":
                If Checagem_Pagina1() Then QuitLoop EndIf
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Closed Checagem_Pagina1()
UseVars AutoLib, ErrorProc, UF_ALIQUOTA_ICMS, KM_FRETE,
        TAXA_FRETE, VRMINIMO_FRETE, CHAVEC, OPCAO_RED_BCICMS,
        TRIB_ICMS, TRIB_IPI, UF_EMPRESA,
        UFEMPRESA_ALIQUOTA_ICMS,
        ALIQUOTA_CREDITO_ICMS_NOSN, CALCULO_NF_AUTOMATICO,
        UF_ALIQUOTA_ICMS_INTERNA,
        DESTIN_ATUALIZA_PEDIDOS,
        DP_GERA_DUPLICATA,TPEMPR

Private CAMPOS_OK, NCAMPO, CDDESTIN

NCAMPO=Field()
;*** Checagem de Campos ***
CAMPOS_OK=False
Switch
  Case IsBlank([Codigo da Empresa]):       Mensagem("Empresa Invalida !")
  Case IsBlank([Codigo da Destinacao]):    Mensagem("Destinacao Invalida !")
  Case IsBlank([Codigo do Representante]): Mensagem("Representante Invalido !")
  Case IsBlank([Codigo]):                  Mensagem("Destinatario/Emitente Invalido !")
  Case IsBlank([Data de Emissao]):         Mensagem("Emissao Invalido !")
  Case IsBlank([UF]):                      Mensagem("Estado Invalido !")
  Case IsBlank([CFO]):                     Mensagem("CFOP Invalido !")
  Case IsBlank([Consumidor Final]):        Mensagem("Tipo Consumidor Invalido !")
  Case IsBlank([Condicao de Pagamento]):   Mensagem("Condicao de Pagamento Invalida !")
;;Case IsBlank([IE]):                      Mensagem("Inscri‡„o Estadual Invalida !")
  OtherWise: CAMPOS_OK=True
EndSwitch

;*** Pega UF/Tipo Empresa Controle ***
Moveto [Codigo da Empresa]
If Busca_Lookup("Codigo da Empresa",[NotaC->Codigo da Empresa],"Empresa: "+[NotaC->Codigo da Empresa]+" sem UF !")
   Then UF_EMPRESA=REG_BUSCA_LOOKUP["UF Empresa"]
        TPEMPR    =REG_BUSCA_LOOKUP["Tipo da Empresa"]
   Else UF_EMPRESA="??"
        TPEMPR    ="??"
EndIf

;*** Checagem da Unidade Federativa c/ CFO ***
If CAMPOS_Ok
   Then Moveto [Codigo da Empresa]
        If Busca_Lookup("Codigo da Empresa",[NotaC->Codigo da Empresa],"")
           Then Switch
                  Case SubStr([NotaC->CFO],1,1)="1" And [NotaC->UF]<>UF_Empresa:
                       Mensagem("O estado \""+[NotaC->UF]+"\" de origem usado p/ o CFOP \""+
                                [NotaC->CFO]+"\"// ‚ diferente da sua Empresa \""+UF_Empresa+"\" ! // //"+
                                "Verifique se a informa‡„o esta correta para continuar !")
                  Case SubStr([NotaC->CFO],1,1)="5" And [NotaC->UF]<>UF_Empresa:
                       Mensagem("O estado \""+[NotaC->UF]+"\" de destino usado p/ o CFOP \""+
                                [NotaC->CFO]+"\"// ‚ diferente da sua Empresa \""+UF_Empresa+"\" ! // //"+
                                "Verifique se a informa‡„o esta correta para continuar !")
                  Case SubStr([NotaC->CFO],1,1)="2" And [NotaC->UF]=UF_Empresa:
                       Mensagem("O estado \""+[NotaC->UF]+"\" de origem usado p/ o CFOP \""+
                                [NotaC->CFO]+"\"// ‚ igual a sua Empresa \""+UF_Empresa+"\" ! // //"+
                                "Verifique se a informa‡„o esta correta para continuar !")
                  Case SubStr([NotaC->CFO],1,1)="6" And [NotaC->UF]=UF_Empresa:
                       Mensagem("O estado \""+[NotaC->UF]+"\" de destino usado p/ o CFOP \""+
                                [NotaC->CFO]+"\"// ‚ igual a sua Empresa \""+UF_Empresa+"\" ! // //"+
                                "Verifique se a informa‡„o esta correta para continuar !")
                EndSwitch
        EndIf
EndIf

If Not IsBlank([Numero_Carregamento])
   Then Moveto [Numero_Carregamento]
        Ativa_Lookup()
        Moveto [Numero_Carregamento]
        Locate [NotaC->Numero_Carregamento]
        If RetVal
           Then If [Situacao]="ACERTADO"
                   Then Mensagem("Carregamento j  foi ACERTADO !")
                        CAMPOS_OK=False
                EndIf
           Else Mensagem("Carregamento n„o encontrado !")
                CAMPOS_OK=False
        EndIf
        KeyPress "ESC"
EndIf

If SubStr([Codigo do Documento],1,2)="CT"
   Then If [Tipo Movimento Estoque]<>"S"
           Then Mensagem("Destina‡Æo nÆo ‚ de saida de documento !")
                CAMPOS_OK=False
        EndIf   
        If [Frete por Conta]<>"1" And [Frete por Conta]<>"2"
           Then Mensagem("Frete por conta: 1-CIF ou 2-FOB !")
                CAMPOS_OK=False
        EndIf        
        
        If SYS_CODIGO_CLIENTE="0000"
           Then Switch
                  Case [Frete por Conta]="1" And ([Codigo da Empresa]<>[Codigo]):
                        Mensagem("Frete por conta: 1-CIF, c¢digo do tomador difere do c¢digo da empresa !")
                        CAMPOS_OK=False
                  Case [Frete por Conta]="2" And ([Codigo da Empresa] =[Codigo]):
                        Mensagem("Frete por conta: 2-FOB, c¢digo do tomador igual ao c¢digo da empresa !")
                        CAMPOS_OK=False
                EndSwitch
        EndIf
EndIf

If Not CAMPOS_OK
  Then Moveto "NotaC"
       Moveto Field NCAMPO
       Return False
EndIf

;*** Aliquota do Estado ***
Moveto [UF]
If Busca_Lookup("UF",[NotaC->UF],"")
   Then UF_ALIQUOTA_ICMS         =REG_BUSCA_LOOKUP["Aliquota de ICMS"]
        UF_ALIQUOTA_ICMS_INTERNA =REG_BUSCA_LOOKUP["Aliquota de ICMS_INTERNA"]
   Else UF_ALIQUOTA_ICMS         =BlankNum()
        UF_ALIQUOTA_ICMS_INTERNA =BlankNum()
EndIf

If Busca_Lookup("UF",UF_EMPRESA,"")
   Then UFEMPRESA_ALIQUOTA_ICMS=REG_BUSCA_LOOKUP["Aliquota de ICMS"]
   Else UFEMPRESA_ALIQUOTA_ICMS=BlankNum()
EndIf

;*** Aliquota/Tributacao/Observacao da Destinacao ***
TRIB_ICMS=""
TRIB_IPI =""
OPCAO_RED_BCICMS="1"


CDDESTIN=[Codigo da Destinacao]
[Codigo da Destinacao]=""
[Codigo da Destinacao]=CDDESTIN

OBS=""
ALIQUOTA_CREDITO_ICMS_NOSN =BlankNum()
TRIB_ICMS=""
TRIB_IPI =""
DESTIN_ATUALIZA_PEDIDOS=""
OPCAO_RED_BCICMS="1"
DP_GERA_DUPLICATA="N"

Moveto [Codigo da Destinacao]
If Busca_Lookup("Codigo da Destinacao",[NotaC->Codigo da Destinacao],"")
   Then ALIQUOTA_CREDITO_ICMS_NOSN =REG_BUSCA_LOOKUP["Aliquota CredICMS NOSN"]
        If REG_BUSCA_LOOKUP["ICMS Aliquota do Estado"]<>"S"
           Then UF_ALIQUOTA_ICMS=REG_BUSCA_LOOKUP["Aliquota de ICMS"]
        EndIf
        TRIB_ICMS=REG_BUSCA_LOOKUP["Tributacao de ICMS"]
        TRIB_IPI =REG_BUSCA_LOOKUP["Tributacao de IPI"]
        DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]

        OBS = OBS+REG_BUSCA_LOOKUP["Observacao_Destinacao"]

        If Not IsBlank(REG_BUSCA_LOOKUP["Conta Caixa Padrao"])
           Then PARAM_CONTA_CAIXA=REG_BUSCA_LOOKUP["Conta Caixa Padrao"]
        EndIf
        OPCAO_RED_BCICMS=REG_BUSCA_LOOKUP["Sem Reducao BCICMS"]
        DP_GERA_DUPLICATA=REG_BUSCA_LOOKUP["Gera Duplicata"]
EndIf
[Aliquota de ICMS         ]=UF_ALIQUOTA_ICMS

;*** Tabela de Kilometragem ***
Moveto [Codigo]
Ativa_Lookup()
Moveto [Codigo]
Locate [NotaC->Codigo]
If RetVal
   Then If IsBlank([Km Frete])
           Then KM_FRETE=0
           Else KM_FRETE=[Km Frete]
        EndIf
   Else KM_Frete=0
EndIf
KeyPress "ESC"

TAXA_FRETE=0
VRMINIMO_FRETE=0
Moveto [Lookup_Tabela_Frete]
Ativa_Lookup()
Scan
  If (KM_Frete>=[Km Inicial]) And
     (KM_Frete<=[Km Final  ])
     Then TAXA_FRETE    =[Taxa]
          VRMINIMO_FRETE=[Valor Minimo]
          QuitLoop
  EndIf
EndScan
KeyPress "ESC"

;;If Not IsBlank([Aliquota de ICMS Frete]) And
;;   [Frete Incluso na Nota]="+" Or
;;   [Frete Incluso na Nota]=":"
;;   Then [Aliquota de ICMS Frete]=[Aliquota de ICMS]
;;        [CFO Frete             ]=[CFO             ]
;;EndIf

Moveto "NotaC"

Return True
EndProc   ;  (Checagem_Pagina1)

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEI()

Moveto "NotaI"
FACA_DIGITAF  = True
While True
  Moveto [Preco Total      ]   VSVRMERC=ImageCSum()
  Moveto [Quantidade       ]   VSQTDE  =ImageCSum()
  Moveto [Item do Documento]   VCITENS =ImageCCount()

  Moveto [Item do Documento]
  End
  NITEM = [Item do Documento]
  Down
  Moveto [Item do Documento]

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

  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", "F5","F7","HOME","UP","PGUP","PGDN","PGUP","F9",-33

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F3  ~V~er Ficha           " : " Ver itens modo Ficha             " : "F3",
              "F9  ~M~odo                " : " Ativa/Desativa Modo Codigo de Barras" : "F9",
              "~C~ancelar                " : " Cancelar a Opera‡„o              " : "CANCELAR"
            EndMenu
            To MenuVar
            echo off
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf

            RetVal=MenuVar
    EndIf

    Switch
    Case RetVal="F3":
         Del
         Moveto [Item do Documento]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf      
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Item do Documento]
         Inicia_Registro()
         DigitaI()
         QuitLoop
    Case RetVal="F5": 
         VSDGEMPRESA=[NotaC->Codigo da Empresa]
         If IsBlank([NotaC->Codigo da Tabela])
            Then VSDGTABELA =PARAM_TABELA_PRECO
            Else VSDGTABELA =[NotaC->Codigo da Tabela]
         EndIf
         Del
         Moveto "NotaC"
         UnLockRecord
         KeyPress "F7"
         IsLockRecord()
         OP_INSERT_ITEM=True

         If PARAM_EXIBECUSTO="N"
            Then Play "SW_CONSS"
            Else Play "SW_CONS"
         EndIF

         Moveto "NotaC"
         Moveto [Codigo da Empresa]
         Locate EMPRESA,NUMDOC,SERIE
         KeyPress "F7"
         
         IsLockRecord()
         Moveto "NotaI"

         If Sw_Item_Pesquisado="" Then QuitLoop EndIf

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

         SEQIT=[Item do Documento]
         CHAVEI=1

         [Numero do Documento] = NUMDOC
         [Item do Documento  ] = SEQIT
         [Codigo do Item     ] = Sw_Item_Pesquisado
         [Codigo da Tabela   ] = VSDGTABELA
         Item_Ins_Consulta     = True

         Return
    Case Retval="PGDN":
         Del
         Moveto [Item do Documento]
         If RecordStatus("New")=True
            Then MENSAGEM("A Nota Fiscal deve ter pelo menos 1(um) Item !")
                 QuitLoop
         EndIf
         CHAVEI=9
         Return
    Case Retval="PGUP" Or RetVal="ESC":
         Del
         CHAVEI=9
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         Return
    Case Retval="F9":
         Del
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           FACA_DIGITAF  = True

           Moveto [Preco Total      ]   VSVRMERC=ImageCSum()
           Moveto [Quantidade       ]   VSQTDE  =ImageCSum()
           Moveto [Item do Documento]   VCITENS =ImageCCount()
           PAGINA("NotaI","MR")
           SEQIT=[Item do Documento]
           If EDITAR="S"
              Then CHAVEI=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then CHAVEI=8
                                   EXCLUSAO_I()
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate EMPRESA,NUMDOC,SERIE,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down
                 [Codigo da Empresa  ]=EMPRESA
                 [Numero do Documento]=NUMDOC
                 [Serie do Documento ]=SERIE
                 [Item do Documento  ]=NumVal(SEQIT)
                 UnLockRecord
                 Locate EMPRESA,NUMDOC,SERIE,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()
Moveto "NotaI"
FACA_DIGITAF=True

While True
  Moveto [Preco Total      ]   VSVRMERC=ImageCSum()
  Moveto [Quantidade       ]   VSQTDE  =ImageCSum()
  Moveto [Item do Documento]   VCITENS =ImageCCount()

  Moveto [Item do Documento]
  End
  NITEM = [Item do Documento]
  Down
  Moveto [Item do Documento]
  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Opcao_Ver = False
  SetaCorRegistro("Editar")
  
  
  
  While True
    Item_Ins_Consulta=False

    If Not Ler_CDBarras(22,00) 
       Then Del
            OPCHAVEI="CDC"
            CHAVEI=7
            Return
       Else If Dados_QTD<=0
               Then Mensagem("Quantidade tem que ser > ou = 1 !")
                    Loop
               Else CDBarras()
                    QuitLoop
            EndIf
    EndIf  
  EndWhile  
EndWhile    

EndProc ;ChaveCdBar()
 
;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()

ITOK=True
[Quantidade]=Dados_QTD             
CODIGO_BARRA=Dados_Item                

Moveto [Codigo do Item]
Ativa_Lookup()
If Len(CODIGO_BARRA)<=10
  Then Moveto [Codigo do Item]
       Locate ALINHM(CODIGO_BARRA,10)
  Else Moveto [Codigo de Barras]
       Locate IndexOrder by "cod_barras" CODIGO_BARRA
EndIf        

If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       CODIGO_BARRA=[Codigo do Item]
       
       If SYS_CODIGO_CLIENTE="0196"
          Then If SubStr(CODIGO_BARRA,1,2)="03"
                  Then CODIGO_BARRA="02"+SubStr(CODIGO_BARRA,3,8)
               EndIf
        EndIf        
       
       If [Inativo]="S"
          Then Del
               Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo !")
               ITOK=False
               
       EndIf
  Else Del
       Mensagem("Item n„o cadastrado !")
       ITOK=False
EndIf 
KeyPress "ESC"

If Not ITOK
  Then Del
       Return
EndIf

[Descricao do Item]="" 
CHAVEI=1

If SYS_CODIGO_CLIENTE="0239"
  Then [Quantidade]=NumVal(SubStr(CODIGO_BARRA,26,10))/1000
       CODIGO_BARRA=SubStr(CODIGO_BARRA,4,10)
EndIf

VSD_I_Codigo_Item=CODIGO_BARRA
Pega_Preco("Novo")
If [Preco Unitario]<=0
  Then Mensagem("Item sem tabela de pre‡o !")
       Del
       Return
EndIf

[Codigo do Item]=CODIGO_BARRA
If [Tributacao de ICMS]="D"
  Then If TRIB_ICMS="D"
          Then [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
          Else [Tributacao de Icms]=TRIB_ICMS
       EndIf
EndIf
If Not CHECA_ESTOQUE()
  Then Del
       Return
EndIf
;If [FaturaC->UF]=UF_EMPRESA
;   Then [MVA]=REG_BUSCA_LOOKUP["MVA Interno"]
;   Else [MVA]=REG_BUSCA_LOOKUP["MVA Externo"]
;EndIf

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

Registro_Item("Ler")
VSD_I_Quantidade =[Quantidade]
VSD_I_Preco_Total=VSD_I_Quantidade*VSD_I_Preco_Unitario
If PARAM_IMPOSTOS="S"
  Then If VSD_I_TICMS<>"D" And VSD_I_TICMS<>"O" And VSD_I_TICMS<>"D"
          Then If Not IsBlank(VSD_I_TICMS)
                  Then VSD_I_RBC_ICMS  =BlankNum()
                       VSD_I_AICMS     =BlankNum()
                       VSD_I_Valor_ICMS=BlankNum()
               EndIf
          Else If Not IsBlank(VSD_I_AICMS)
                  Then If VSD_I_RBC_ICMS>0 And
                          VSD_I_AICMS>0
                          Then VSD_I_Valor_ICMS=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_ICMS)/100))*VSD_I_AICMS)/100,2)
                          Else VSD_I_Valor_ICMS=Round((VSD_I_Preco_Total*VSD_I_AICMS)/100,2)
                       EndIf
               EndIf
       EndIf
       If VSD_I_TIPI<>"D"
          Then If Not IsBlank(VSD_I_TIPI)
                  Then VSD_I_RBC_IPI=BlankNum()
                       VSD_I_AIPI=BlankNum()
                       VSD_I_Valor_IPI=BlankNum()
               EndIf
          Else If Not IsBlank(VSD_I_AIPI)
                  Then If VSD_I_RBC_IPI>0 And
                          VSD_I_AIPI>0
                           Then VSD_I_Valor_IPI=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_IPI)/100))*VSD_I_AIPI)/100,2)
                          Else VSD_I_Valor_IPI=Round((VSD_I_Preco_Total*VSD_I_AIPI)/100,2)
                       EndIf
               EndIf
       EndIf
EndIf
Registro_Item("Gravar")
Estoque()
Moveto "NotaI"
If RecordStatus("Locked") Then UnLockRecord EndIf

Sound 400 400

EndProc   ; (ChaveCdBar)

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

FTIMP=4                         
PARAM_FTIMP()

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

If INICIO_DIALOG
   Then If CHAVEI=0
           Then ;;If SYS_CODIGO_CLIENTE="0003"
                ;;   Then Campo="I_Modelo_Item"
                ;;   Else Campo="I_Quantidade"
                ;;EndIf
                If [Edita Descricao do Item]="S"
                   Then Campo="I_Descricao_Item"
                   Else If PARAM_COR_TECIDO="S"
                           Then Campo="I_Codigo_Cor_Tecido"
                           Else If PARAM_TAMANHO="S"
                                   Then Campo="I_Tamanho"
                                   Else If PARAM_TABPR_ITEM="S"
                                           Then Campo="I_Tabela"
                                           Else If PARAM_CPGTO_ITEM="S"
                                                   Then Campo="I_Condicao_Pagamento"
                                                   Else Campo="I_Quantidade"
                                                EndIf
                                        EndIf
                                EndIf
                        EndIf
                EndIf
           Else If PARAM_PEDIDO="S" Or PARAM_ORCAMENTO="S"
                   Then If IsBlank([NotaC->Numero do Pedido]) And
                           IsBlank([NotaC->Numero do Orcamento])
                           Then Campo="I_Codigo_Item"
                           Else Campo="I_Pedido"
                        EndIf
                   Else Campo="I_Codigo_Item"
                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
           "F4 ~D~escri‡„o              ": " Descri‡„o do Item                  " :"F4",
           "F7 ~A~ltera Localiza‡„o     ": " Altera forma de localizar o item   " :"F7", 
           "F8 ~I~nforma‡”es Adicionais ": " Informa‡”es Adicionais do Item NFe " :"F8", 
           "F9 ~V~alores de Importa‡„o  ": " Valores de Importa‡„o              " :"F9", 
           "~C~ancelar                  ": " Cancelar a Opera‡„o                " : "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
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Item do Documento]
                      Inicia_Registro()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEI=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -62 Or Evento["KeyCode"] = "F4"):
          Campo="I_Descricao_Item"
                              
     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,
            "~C~ancelar               " : " Cancelar a Opera‡„o                       " : "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"):    
          Edita_Memo("Informacoes_Adicionais",15,01,06,78,"Informa‡”es Adicionais do Item NFe")
          VSD_I_InfAdic=[Informacoes_Adicionais]
          
     Case (Evento["KeyCode"] = -67 Or Evento["KeyCode"] = "F9"):    
          If Not IsAssigned(VSD_I_CST_Item) Or VSD_I_CST_Item=""
             Then Mensagem("Informe o CST do Item para habilitar essa fun‡„o!")
             Else If SubStr(VSD_I_CST_Item,1,1)<>"1"
                     Then Mensagem("Op‡„o Inv lida// //Verificar CST do Item!")
                     Else If [NotaC->Tipo Movimento Estoque]="E" Or
                             Search("DEVOL",[NotaC->Descricao da Destinacao])>0 
                             Then Echo Normal
                                  Echo Off
                                  APLIC_ORIGEM="NOTA"
                                  Play "FT_IMP" 
                             Else Mensagem("Op‡„o Inv lida// //Verificar situa‡„o da nota!")
                          EndIf   
                  EndIf        
          EndIf  
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"        Or
             Campo="I_Tipo_Item"          Or
             Campo="I_Codigo_Cor_Tecido"  Or
             Campo="I_Condicao_Pagamento" Or
             Campo="I_Tabela"             Or
             Campo="I_CST_Item"           Or
             Campo="I_CFOP"               Or              
             Campo="I_CST_IPI"            Or
             Campo="I_CST_PIS"            Or
             Campo="I_CST_COFINS"         Or            
             Campo="I_CSOSN"              Or
             Campo="I_MUNSERV"            
             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_Codigo_Cor_Tecido"  Then Moveto [Codigo da Cor_Tecido]   EndIf
                  
                  If Campo="I_Condicao_Pagamento" 
                     Then FI_CDPGTOAnt=VSD_I_Condicao_Pagamento
                          FC_CDPGTOAnt=[NotaC->Condicao de Pagamento]
                          Moveto "NotaC"
                          Moveto [Condicao de Pagamento]  
                  EndIf
                  If Campo="I_Tabela"             
                     Then FI_TABELAAnt=VSD_I_Tabela
                          FC_TABELAAnt=[NotaC->Codigo da Tabela]
                          Moveto "NotaC"
                          Moveto [Codigo da Tabela]  
                  EndIf
                  If Campo="I_CFOP"               
                     Then FI_CFOAnt=VSD_I_CFOP
                          FC_CFOAnt=[NotaC->CFO]
                          Moveto "NotaC"
                          Moveto [CFO]
                  EndIf
                  If Campo="I_MUNSERV"             
                     Then FI_MUNSERVAnt=VSD_I_MUNSERV
                          FI_UFSERVAnt =VSD_I_UFSERV
                          FC_MUNSERVAnt=[NotaC->Cidade]
                          FC_UFSERVAnt =[NotaC->UF]
                          Moveto "NotaC"
                          Moveto [Cidade]  
                  EndIf

                  Switch
                    Case Campo="I_CST_Item":          
                      CSTNew=VSD_I_CST_Item 
                      VSD_I_CST_Item=Checa_CST("ICMS",[NotaC->Tipo Movimento Estoque],"")
                      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",[NotaC->Tipo Movimento Estoque],"")
                      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",[NotaC->Tipo Movimento Estoque],"")
                      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",[NotaC->Tipo Movimento Estoque],"")
                      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_CSOSN(VSD_I_TICMS,"")
                      If IsBlank(VSD_I_CSOSN)
                         Then VSD_I_CSOSN=CSTNew
                         Else [CSOSN    ]=VSD_I_CSOSN
                      EndIf
                      Release Vars CSTNew
                    OtherWise:         
                      If ConsultaF1()
                         Then Switch
                                Case Campo="I_CFOP":               
                                      FI_CFOAnt     =[NotaC->CFO] 
                                      [NotaC->CFO]=FC_CFOAnt
                                      Moveto "NotaI"
                                      [NotaI->CFO]=FI_CFOAnt
                                Case Campo="I_Tabela":               
                                      FI_TABELAAnt     =[NotaC->Codigo da Tabela] 
                                      [NotaC->Codigo da Tabela]=FC_TABELAAnt
                                      Moveto "NotaI"
                                      [NotaI->Codigo da Tabela]=FI_TABELAAnt
                                Case Campo="I_Condicao_Pagamento":               
                                      FI_CDPGTOAnt     =[NotaC->Condicao de Pagamento] 
                                      [NotaC->Condicao de Pagamento]=FC_CDPGTOAnt
                                      Moveto "NotaI"
                                      [NotaI->Condicao de Pagamento]=FI_CDPGTOAnt
                                Case Campo="I_MUNSERV":               
                                      [NotaC->Cidade   ]=FC_MUNSERVAnt
                                      [NotaC->UF       ]=FC_UFSERVAnt
                                      Moveto "NotaI"
                                      [NotaI->ISSQN_Municipio]=Reg_ConsultaF1["Codigo_Cidade"]
                                      [NotaI->ISSQN_UF       ]=Reg_ConsultaF1["UF"] 
                              EndSwitch
                         Else If Campo="I_CFOP" Or Campo="I_Tabela" Or Campo="I_Condicao_Pagamento" Or
                                 Campo="I_MUNSERV"  
                                 Then Moveto "NotaI"
                              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 Fiscal   ]
                          VSD_I_CF_Item       =[NBM              ]
                          VSD_I_CST_Item      =[Tipo Tributacao  ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]
                          If (VSD_I_Tipo_Item<>"C")
                              Then VSD_I_TIR=""
                                   VSD_I_AIR=BlankNum()
                                   VSD_I_Valor_IR=BlankNum()
                          EndIf

                          If SYS_CODIGO_CLIENTE="0117"
                             Then [Codigo do Item]=""
                          EndIf

                          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_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 (VSD_I_Tipo_Item<>"C")
                      Then VSD_I_TIR=""
                           VSD_I_AIR=BlankNum()
                           VSD_I_Valor_IR=BlankNum()
                  EndIf

                  If Campo="I_Condicao_Pagamento"
                     Then VSD_I_Condicao_Pagamento  =[Condicao de Pagamento  ]
                          VSD_I_Composicao_Dias     =[Composicao de Dias     ]
                          Release Vars FI_CDPGTOAnt,FC_CDPGTOAnt
                  EndIf
                  If Campo="I_Tabela"
                     Then VSD_I_Tabela              =[Codigo da Tabela       ]
                          Release Vars FI_TABELAAnt,FC_TABELAAnt
                  EndIf
                  If Campo="I_CFOP"
                     Then VSD_I_CFOP            =[CFO             ]
                          Campo="I_CFOP"
                          Release Vars FI_CFOAnt,FC_CFOAnt
                  EndIf
                   If Campo="I_MUNSERV"
                      Then VSD_I_MUNSERV=[NotaI->ISSQN_Municipio]
                           VSD_I_UFSERV =[NotaI->ISSQN_UF       ] 
                           Campo="I_MUNSERV"
                           Release Vars FI_MUNSERVAnt,FC_MUNSERVAnt,FI_UFSERVAnt,FC_UFSERVAnt
                   EndIf
                  If Campo="I_CST_Item"
                     Then VSD_I_CST_Item        =[Tipo Tributacao ]
                          Campo="I_CST_Item"
                  EndIf
                  
                  Moveto "NotaI"
         EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="I_Pedido":
                 If QuerDesfazer("")
                    Then CHAVEI=9
                         Del
                         CancelDialog
                 Endif
            Case Campo="I_Pedido_Item"       : Campo="I_Pedido"
            Case Campo="I_Codigo_Item"       : Campo="I_Pedido"
            Case Campo="I_Codigo_Item"       : Campo="I_Pedido_Item"
            Case Campo="I_Descricao_Item":
                 If CHAVEI=1
                    Then Campo="I_Codigo_Item"
                    Else If QuerDesfazer("")
                            Then CHAVEI=9
                                 CopyFromArray RegItem
                                 CancelDialog
                         Endif
                 EndIf
            Case Campo="I_Codigo_Cor_Tecido" : Campo="I_Codigo_Item"
                 If CHAVEI=1
                    Then Campo="I_Codigo_Item"
                    Else If QuerDesfazer("")
                            Then CHAVEI=9
                                 CopyFromArray RegItem
                                 CancelDialog
                         Endif
                 EndIf
            Case Campo="I_Tamanho":
                 If PARAM_COR_TECIDO="S"
                    Then Campo="I_Codigo_Cor_Tecido"
                    Else If CHAVEI=1
                            Then Campo="I_Codigo_Item"
                            Else If QuerDesfazer("")
                                    Then CHAVEI=9
                                         CopyFromArray RegItem
                                         CancelDialog
                                 Endif
                         EndIf
                 EndIf
            Case Campo="I_CF_Item"           : Campo="I_Tipo_Item"
            Case Campo="I_Tipo_Item"         : Campo="I_Descricao_Item"
            Case Campo="I_Modelo_Item":
                 If CHAVEI=1
                    Then If Not IsBlank([Numero Pedido_Orcamento])
                            Then Campo="I_Pedido_Item"
                            Else If PARAM_TAMANHO="S"
                                    Then Campo="I_Tamanho"
                                    Else If PARAM_COR_TECIDO="S"
                                            Then Campo="I_Codigo_Cor_Tecido"
                                            Else If IsBlank(VSD_I_Codigo_Item)
                                                    Then Campo="I_Tipo_Item"
                                                    Else Campo="I_Codigo_Item"
                                                 EndIf
                                         EndIf
                                 EndIf
                         EndIf
                    Else If IsBlank(VSD_I_Codigo_Item)
                            Then Campo="I_Tipo_Item"
                            Else If QuerDesfazer("")
                                    Then CHAVEI=9
                                         CopyFromArray RegItem
                                         CancelDialog
                                 Endif
                         EndIf
                 EndIf
           Case Campo="I_Tabela":
                If CHAVEI=1
                   Then If PARAM_COR_TECIDO="S"
                           Then Campo="I_Codigo_Cor_Tecido"
                           Else If PARAM_TAMANHO="S"
                                   Then Campo="I_Tamanho"
                                   Else Campo="I_Codigo_Item"
                                EndIf
                        EndIf
                   Else CHAVEI=9
                        CopyFromArray RegItem
                        CancelDialog
                EndIf
           Case Campo="I_Condicao_Pagamento":
                If PARAM_TABPR_ITEM="S"
                   Then Campo="I_Tabela"
                   Else If CHAVEI=1
                           Then If PARAM_COR_TECIDO="S"
                                   Then Campo="I_Codigo_Cor_Tecido"
                                   Else If PARAM_TAMANHO="S"
                                           Then Campo="I_Tamanho"
                                           Else Campo="I_Codigo_Item"
                                        EndIf
                                EndIf
                           Else CHAVEI=9
                                CopyFromArray RegItem
                                CancelDialog
                        EndIf
                EndIf
           Case Campo="I_Composicao_Dias":  Campo="I_Condicao_Pagamento"
            Case Campo="I_Quantidade":
                If PARAM_CPGTO_ITEM="S"
                   Then Campo="I_Condicao_Pagamento"
                   Else If PARAM_TABPR_ITEM="S"
                           Then Campo="I_Tabela"
                           Else If CHAVEI=1
                                   Then If PARAM_COR_TECIDO="S"
                                           Then Campo="I_Codigo_Cor_Tecido"
                                           Else If PARAM_TAMANHO="S"
                                                   Then Campo="I_Tamanho"
                                                   Else If IsBlank(VSD_I_Codigo_Item)
                                                           Then Campo="I_Tipo_Item"
                                                           Else Campo="I_Codigo_Item"
                                                        EndIf
                                                EndIf
                                        EndIf
                                   Else CHAVEI=9
                                        CopyFromArray RegItem
                                        CancelDialog
                                EndIf
                        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_Comissao_Item"     : Campo="I_Preco_Total"
            Case Campo="I_CST_Item"          : 
                 CancelDialog
;                 Campo="I_Quantidade"

            Case Campo="I_RBC_ICMS"     Or
                 Campo="I_AICMS"        Or
                 Campo="I_Valor_ICMS"   Or
                 Campo="I_CST_IPI"           : Campo="I_CST_Item"

            Case Campo="I_AIPI"         Or
                 Campo="I_Valor_IPI"    Or     
                 Campo="I_TISSQN"            : Campo="I_CST_IPI"
                                 
            Case Campo="I_AISSQN"       Or
                 Campo="I_Valor_ISSQN"  Or    
                 Campo="I_CST_PIS"           : Campo="I_TISSQN"

            Case Campo="I_APIS"         Or
                 Campo="I_Valor_PIS"    Or     
                 Campo="I_CST_COFINS"        : Campo="I_CST_PIS"
                 
            Case Campo="I_ACOFINS"      Or
                 Campo="I_Valor_COFINS" Or     
                 Campo="I_NCM"               : Campo="I_CST_COFINS"
            
            Case Campo="I_CFOP"              : Campo="I_NCM"
            Case Campo="I_CSOSN"             : Campo="I_CFOP"
            Case Campo="I_MVA"               : Campo="I_CSOSN"

            Case Campo="I_CDSERV"   Or
                 Campo="I_MUNSERV"           : Campo="I_NCM"

            Case Campo="I_Numero_Volumes"    :
                If PARAM_IMPOSTOS="S"
                   Then Campo="I_NCM"
                   Else Campo="I_Quantidade"
                Endif
            Case Campo="I_Peso_Liquido"      : Campo="I_Numero_Volumes"
            Case Campo="I_Peso_Embalagem"    : Campo="I_Peso_Liquido"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          Switch
            Case Campo="I_Pedido":
                 VSD_I_Pedido=AlinhM(ControlValue("I_Pedido"),6)
                 If VSD_I_Pedido="000000"
                    Then VSD_I_Pedido     =""
                         VSD_I_Pedido_Item=""
                         Campo="I_Codigo_Item"
                    Else Campo="I_Pedido_Item"
                 EndIf
            Case Campo="I_Pedido_Item":
                 VSD_I_Pedido_Item=ControlValue("I_Pedido_Item")
                 If VSD_I_Pedido_Item=""
                    Then VSD_I_Pedido_Item=0
                 EndIf
                 If Not IsBlank(VSD_I_Pedido_Item)
                    Then Moveto "NotaC"
                         [Numero Pedido_Orcamento]=VSD_I_Pedido
                         If PARAM_PEDIDO="S"
                            Then Moveto "PedidoI"
                                 Moveto [Item do Pedido]
                            Else Moveto "OrcaI"
                                 Moveto [Item do Orcamento]
                         EndIf
                         Locate NumVal(VSD_I_Pedido_Item)
                         If Not RetVal
                            Then Mensagem("Item do Pedido n„o Encontrado !")
                         EndIf
                         Moveto "NotaI"
                 EndIf
                 Campo="I_Codigo_Item"
            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 CopyToArray REG_BUSCA_LOOKUP
                                 VSD_I_Codigo_Item   =[Codigo do Item   ]
                                 KeyPress "ESC"

                                 Pega_Preco("Novo")

                                 [Codigo do Item]=VSD_I_Codigo_Item

                                 If [Tributacao de ICMS]="D"
                                    Then If TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0
                                            Then [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                                            Else [Tributacao de Icms]=TRIB_ICMS
                                                 If Not IsBlank([Tipo Tributacao])
                                                    Then [Aliquota de ICMS]=BlankNum()
                                                         Switch
                                                          Case [Tributacao de Icms]="O": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"90"                
                                                          Case [Tributacao de Icms]="I": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"40"                                
                                                          Case [Tributacao de Icms]="N": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"41"                                
                                												 EndSwitch
                        												 EndIf
                                         EndIf
                                         If OPCAO_RED_BCICMS="1"
                                            Then [Aliquota Reduzida BCICMS]=BlankNum()
                                         EndIf
                                 EndIf
                                 [MVA]=REG_BUSCA_LOOKUP["MVA_1"]

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

                                 If SYS_CODIGO_CLIENTE="0296"
                                    Then If [Tipo do Item]="C"
                                            Then [ISSQN_Municipio]=3122306
                                                 [ISSQN_UF       ]="MG"
                                                 Switch
                                                   Case Substr([NotaC->CFO],1,1)="5" : [CFO]="5933"
                                                   Case Substr([NotaC->CFO],1,1)="6" : [CFO]="6933"
                                                 EndSwitch  
                                          EndIf        
                                 EndIf

                                 Registro_Item("Ler")
                                 If [Edita Descricao do Item]="S"
                                    Then Campo="I_Descricao_Item"
                                    Else If PARAM_COR_TECIDO="S"
                                            Then Campo="I_Codigo_Cor_Tecido"
                                            Else If PARAM_TAMANHO="S"
                                                    Then Campo="I_Tamanho"
                                                    Else If PARAM_TABPR_ITEM="S"
                                                            Then Campo="I_Tabela"
                                                            Else If PARAM_CPGTO_ITEM="S"
                                                                    Then Campo="I_Condicao_Pagamento"
                                                                    Else Campo="I_Quantidade"
                                                                 EndIf
                                                         EndIf
                                                 EndIf
                                         EndIf
                                 EndIf
                            Else Mensagem("Item n„o Cadastrado !")
                                 VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_UN_Item       =""
                                 VSD_I_CF_Item       =""
                                 VSD_I_CST_Item      =""
                                 VSD_I_Tipo_Item     =""
                                 VSD_I_Modelo_Item   =""
                                 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 KeyPress "ESC"
                                 Moveto "NotaI"
                                 [Tipo do Item]=VSD_I_Tipo_Item
                                 Campo="I_CF_Item"
                            Else Mensagem("Tipo do Item n„o Cadastrado !")
                                 VSD_I_Tipo_Item=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                    Else VSD_I_Tipo_Item=""
                 EndIf
            Case Campo="I_CF_Item":
                 VSD_I_CF_Item=ControlValue("I_CF_Item")
                 If PARAM_COR_TECIDO="S"
                    Then Campo="I_Codigo_Cor_Tecido"
                    Else If PARAM_TAMANHO="S"
                            Then Campo="I_Tamanho"
                            Else If PARAM_TABPR_ITEM="S"
                                    Then Campo="I_Tabela"
                                    Else If PARAM_CPGTO_ITEM="S"
                                            Then Campo="I_Condicao_Pagamento"
                                            Else Campo="I_Quantidade"
                                         EndIf
                                 EndIf
                         EndIf
                 EndIf
            Case Campo="I_Modelo_Item":
                 VSD_I_Modelo_Item=ControlValue("I_Modelo_Item")
                 Campo="I_Quantidade"
            Case Campo="I_Codigo_Cor_Tecido":
                 VSD_I_Codigo_Cor_Tecido=ControlValue("I_Codigo_Cor_Tecido")
                 If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                    Then Moveto [Codigo da Cor_Tecido]
                         Ativa_Lookup()
                         Moveto [Codigo da Cor_Tecido]
                         Locate VSD_I_Codigo_Cor_Tecido
                         If RetVal
                            Then KeyPress "ESC"
                                 Moveto "NotaI"
                                 [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                                 Campo="I_Descricao_Cor_Tecido"
                            Else Mensagem("Cor/Tecido n„o Cadastrado !")
                                 VSD_I_Codigo_Cor_Tecido   =""
                                 VSD_I_Descricao_Cor_Tecido=""
                                 KeyPress "ESC"
                         EndIf
                    Else Campo="I_Descricao_Cor_Tecido"
                 EndIf
                 Echo Off
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 If PARAM_TAMANHO="S"
                    Then Campo="I_Tamanho"
                    Else If PARAM_TABPR_ITEM="S"
                            Then Campo="I_Tabela"
                            Else If PARAM_CPGTO_ITEM="S"
                                    Then Campo="I_Condicao_Pagamento"
                                    Else Campo="I_Quantidade"
                                 EndIf
                         EndIf
                 EndIf
            Case Campo="I_Tamanho":
                 VSD_I_Tamanho=ControlValue("I_Tamanho")
                 If PARAM_TABPR_ITEM="S"
                    Then Campo="I_Tabela"
                    Else If PARAM_CPGTO_ITEM="S"
                            Then Campo="I_Condicao_Pagamento"
                            Else Campo="I_Quantidade"
                         EndIf
                 EndIf
            Case Campo="I_Tabela":
                 VSD_I_Tabela=ControlValue("I_Tabela")
                 If Not IsBlank(VSD_I_Tabela)
                    Then Moveto [Codigo da Tabela]
                         Ativa_Lookup()
                         Moveto [Codigo da Tabela]
                         Locate VSD_I_Tabela
                         If RetVal
                            Then KeyPress "ESC"
                                 [Codigo da Tabela]=VSD_I_Tabela
                                 If PARAM_CPGTO_ITEM="S"
                                    Then Campo="I_Condicao_Pagamento"
                                    Else Pega_Preco("Novo")
                                         Campo="I_Quantidade"
                                 EndIf
                            Else Mensagem("Tabela n„o Cadastrada !")
                                 VSD_I_Tabela=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Condicao_Pagamento":
                 VSD_I_Condicao_Pagamento=ControlValue("I_Condicao_Pagamento")
                 If Not IsBlank(VSD_I_Condicao_Pagamento)
                    Then Moveto [Condicao de Pagamento]
                         Ativa_Lookup()
                         Moveto [Condicao de Pagamento]
                         Locate VSD_I_Condicao_Pagamento
                         If RetVal
                            Then VSD_I_Composicao_Dias=[Composicao de Dias]
                                 KeyPress "ESC"
                                 [Condicao de Pagamento]=VSD_I_Condicao_Pagamento
                                 Pega_Preco("Novo")
                                 Campo="I_Composicao_Dias"
                            Else Mensagem("Condicao n„o Cadastrada !")
                                 VSD_I_Condicao_Pagamento=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Composicao_Dias":
                 VSD_I_Composicao_Dias=ControlValue("I_Composicao_Dias")
                 If VSD_I_Composicao_Dias=""
                    Then VSD_I_Composicao_Dias="0"
                 EndIf
                 If Checa_CompDias(VSD_I_Composicao_Dias)
                    Then Campo="I_Quantidade"
                 EndIf
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 [Quantidade]=VSD_I_Quantidade
                 If Checa_Estoque()
                    Then 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)
                         EndIf
                         If IsBlank(VSD_I_Codigo_Item)
                            Then Campo="I_UN_Item"
                            Else Campo="I_Preco_Unitario"
                         EndIf
                 EndIf
            Case Campo="I_UN_Item":
                 VSD_I_UN_Item=ControlValue("I_UN_Item")
                 Campo="I_Preco_Unitario"
            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
                If PARAM_DESCUNIT="S"
                   Then Campo="I_Taxa_Desconto_Unitario"
                   Else Campo="I_Preco_Total"
                EndIf
            Case Campo="I_Taxa_Desconto_Unitario":
                 VSD_I_Taxa_Desconto_Unitario=ControlValue("I_Taxa_Desconto_Unitario")

                 Switch
                   Case SYS_CODIGO_CLIENTE="0078" And  [NotaC->Tipo do Documento]="CUP":
                     If VSD_I_Taxa_Desconto_Unitario>0
                        Then VSD_I_Preco_Total=VSD_I_Quantidade*VSD_I_Preco_Unitario
                             VSD_I_Preco_Total=VSD_I_Preco_Total-NDecimal((VSD_I_Preco_Total*VSD_I_Taxa_Desconto_Unitario)/100,2)
                             VSD_I_Valor_Desconto_Unitario=BlankNum()
                             Campo="I_Preco_Total"
                        Else Campo="I_Valor_Desconto_Unitario"
                     EndIf

                   OtherWise:
                     If VSD_I_Taxa_Desconto_Unitario>0
                        Then VSD_I_Valor_Desconto_Unitario=NDecimal((VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100,2)
                             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
                EndSwitch
            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")

                 Switch
                   Case SYS_CODIGO_CLIENTE="0078" And  [NotaC->Tipo do Documento]="CUP":
                     If VSD_I_Taxa_Desconto_Unitario>0
                        Then VSD_I_Preco_Total=VSD_I_Quantidade*VSD_I_Preco_Unitario
                             VSD_I_Preco_Total=VSD_I_Preco_Total-NDecimal((VSD_I_Preco_Total*VSD_I_Taxa_Desconto_Unitario)/100,2)
                             VSD_I_Valor_Desconto_Unitario=BlankNum()
                        Else 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)
                             EndIf
                     EndIf
                   OtherWise:
                     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)
                     EndIf
                 EndSwitch
                 If PARAM_COMIS_ITEM="S"
                    Then Campo="I_Comissao_Item"
                    Else If PARAM_IMPOSTOS="S"
                            Then Digita_ICMS()
                                 Campo="I_CST_Item"
                            Else If PARAM_VOLUMES="S"
                                    Then Campo="I_NUMERO_VOLUMES"
                                    Else AcceptDialog
                                 EndIf
                         EndIf
                 EndIf
            Case Campo="I_Comissao_Item":
                 VSD_I_Comissao_Item=ControlValue("I_Comissao_Item")
                 If PARAM_IMPOSTOS="S"
                    Then Campo="I_CST_Item"
                    Else If PARAM_VOLUMES="S"
                            Then Campo="I_NUMERO_VOLUMES"
                            Else AcceptDialog
                         EndIf
                 EndIf                
            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",[NotaC->Tipo Movimento Estoque],VSD_I_CST_Item)
                         If TribCST<>""
                            Then CSTOk  =False
        												 TribCST=SubStr(VSD_I_CST_Item,2,2)
            										 If (SubStr(VSD_I_CST_Item,1,1)="0"   Or
            										     SubStr(VSD_I_CST_Item,1,1)="1"   Or
            										     SubStr(VSD_I_CST_Item,1,1)="2")  And
                                    TribCST="00" Or 
                                    TribCST="10" Or
                                    TribCST="20" Or
                                    TribCST="30" Or
                                    TribCST="40" Or
                                    TribCST="41" Or
                                    TribCST="50" Or
                                    TribCST="51" Or
                                    TribCST="60" Or
                                    TribCST="70" Or
                                    TribCST="90"
                                    Then CSTOk=True
                                 EndIf
        												 If CSTOk
                                    Then Switch
                                          Case TribCST="00"    : VSD_I_TICMS="D"
                                          Case TribCST="10"    : VSD_I_TICMS="S"
                                          Case TribCST="20"    : VSD_I_TICMS="D"
                                          Case TribCST="30"    : VSD_I_TICMS="S"
                                          Case TribCST="40"    : VSD_I_TICMS="I"
                                          Case TribCST="41"    : VSD_I_TICMS="N"
                                          Case TribCST="50" Or 
                                               TribCST="51"    : VSD_I_TICMS="O"
                                          Case TribCST="60"    : VSD_I_TICMS="S"
                                          Case TribCST="70"    : VSD_I_TICMS="S"
                                          Case TribCST="90"    : VSD_I_TICMS="O"
                                          OtherWise            : VSD_I_TICMS="O"   
                                         EndSwitch
                                         Switch
                                          Case (TribCST="00" Or TribCST="10")                                :
                                               VSD_I_RBC_ICMS=BlankNum()
                                               Campo="I_AICMS"
                                          Case (TribCST="20" Or TribCST="60" Or TribCST="70" Or TribCST="90"):
                                               Campo="I_RBC_ICMS"
                                          Case (TribCST="30" Or TribCST="40" Or TribCST="41" Or                                                 
                                                TribCST="50" Or TribCST="51")                                :                               
                                               VSD_I_RBC_ICMS=BlankNum()
                                               VSD_I_AICMS=BlankNum()
                                               VSD_I_Valor_ICMS=BlankNum()
                                               Campo="I_CST_IPI"
               												  EndSwitch
        												    Else Mensagem("CST inv lido para tipo de tributa‡„o de ICMS !")
        												 EndIF   
                            Else Mensagem("CST ICMS inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
                 If IsAssigned(CST_TEMP)
                    Then If (SubStr(CST_TEMP,1,1)="1" And SubStr(VSD_I_CST_Item,1,1)<>"1") Or VSD_I_CST_Item=""
                            Then VERIFICA_IMPORTACAO="SIM"
                                 Echo Normal
                                 Echo Off
                                 APLIC_ORIGEM="NOTA"
                                 Play "FT_IMP"
                                 If VERIFICA_IMPORTACAO
                                    Then VSD_I_CST_Item=CST_TEMP
                                         Mensagem("Imposs¡vel Altera‡„o! // //Exclua as Importa‡”es para alter o CST!")
                                         Campo="I_CST_Item"
                                    Else CST_TEMP=VSD_I_CST_Item
                                 EndIf
                                 VERIFICA_IMPORTACAO="NAO"
                         EndIf
                 EndIf
            Case Campo="I_RBC_ICMS":
                 VSD_I_RBC_ICMS=ControlValue("I_RBC_ICMS")
                 If TribCST="70"
                    Then VSD_I_AICMS=BlankNum()
                         VSD_I_Valor_ICMS=BlankNum()
                         Campo="I_CST_IPI"
                    Else If VSD_I_RBC_ICMS>0 And
                            VSD_I_AICMS>0
                            Then VSD_I_Valor_ICMS=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_ICMS)/100))*VSD_I_AICMS)/100,2)
                            Else VSD_I_Valor_ICMS=Round((VSD_I_Preco_Total*VSD_I_AICMS)/100,2)
                         EndIf
                         Campo="I_AICMS"
                 EndIf
            Case Campo="I_AICMS":
                 VSD_I_AICMS=ControlValue("I_AICMS")
                 If VSD_I_RBC_ICMS>0 And
                    VSD_I_AICMS>0
                    Then VSD_I_Valor_ICMS=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_ICMS)/100))*VSD_I_AICMS)/100,2)
                    Else VSD_I_Valor_ICMS=Round((VSD_I_Preco_Total*VSD_I_AICMS)/100,2)
                 EndIf   
                 Campo="I_Valor_ICMS"
            Case Campo="I_Valor_ICMS":
                 VSD_I_Valor_ICMS=ControlValue("I_Valor_ICMS")
                 Campo="I_CST_IPI"
            Case Campo="I_CST_IPI":
                 VSD_I_CST_IPI=ControlValue("I_CST_IPI")
                 If Not IsBlank(VSD_I_CST_IPI)
                    Then TribCST=Checa_CST("IPI",[NotaC->Tipo Movimento Estoque],VSD_I_CST_IPI)
                         If TribCST<>""
                            Then CSTOk  =False
        												 TribCST=VSD_I_CST_IPI
            										 If [NotaC->Tipo Movimento Estoque]="E"
                                    Then If TribCST="00" Or 
                                            TribCST="01" Or
                                            TribCST="02" Or
                                            TribCST="03" Or
                                            TribCST="04" Or
                                            TribCST="05" Or
                                            TribCST="49" 
                                            Then CSTOk=True
                                          EndIf
                                    Else If TribCST="50" Or
                                            TribCST="51" Or
                                            TribCST="52" Or
                                            TribCST="53" Or
                                            TribCST="54" Or
                                            TribCST="55" Or
                                            TribCST="99" 
                                            Then CSTOk=True
                                         EndIf
                                 EndIf
                                 If CSTOk
        												    Then If Not IsBlank(VSD_I_CST_IPI)
                                            Then If [NotaC->Tipo Movimento Estoque]="E"
                          							            Then Switch
                                                          Case TribCST="00" Or 
                                                               TribCST="01"    : VSD_I_TIPI="D" 
                                                          Case TribCST="02"    : VSD_I_TIPI="I"
                                                          Case TribCST="03"    : VSD_I_TIPI="N"
                                                          Case TribCST="49"    : VSD_I_TIPI="O"  
                                                          OtherWise            : VSD_I_TIPI="O"   
                                                         EndSwitch
                                                    Else Switch
                                                          Case TribCST="50" Or
                                                               TribCST="51"    : VSD_I_TIPI="D" 
                                                          Case TribCST="52"    : VSD_I_TIPI="I"
                                                          Case TribCST="53"    : VSD_I_TIPI="N"
                                                          Case TribCST="54" Or  
                                                               TribCST="55" Or 
                                                               TribCST="99"    : VSD_I_TIPI="O"
                                                          OtherWise            : VSD_I_TIPI="O"      
                                												 EndSwitch
                          											 EndIf
                                         EndIf
                                         If VSD_I_TIPI<>"D" And VSD_I_TIPI<>"O"
                                            Then If Not IsBlank(VSD_I_TIPI)
                                                    Then VSD_I_AIPI=BlankNum()
                                                         VSD_I_Valor_IPI=BlankNum()
                                                         Campo="I_TISSQN"
                                                 EndIf
                                            Else Campo="I_AIPI"
                                        EndIf
        												    Else Mensagem("CST inv lido para tipo de tributa‡„o de IPI !")
        												 EndIF
                            Else Mensagem("CST IPI inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
            Case Campo="I_AIPI":
                 VSD_I_AIPI=ControlValue("I_AIPI")
                 If VSD_I_AIPI>0
                    Then VSD_I_Valor_IPI=Round((VSD_I_Preco_Total*VSD_I_AIPI)/100,2)
                 EndIf
                 Campo="I_Valor_IPI"
            Case Campo="I_Valor_IPI":
                 VSD_I_Valor_IPI=ControlValue("I_Valor_IPI")
                 Campo="I_TISSQN"
            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_AISSQN=BlankNum()
                                         VSD_I_Valor_ISSQN=BlankNum()
        
                                         If TPEMPR="SIMPLES NACIONAL" Or
                                            TPEMPR="SIMPLES NAC. ESRB"
                                            Then 
                                                 VSD_I_CST_PIS="99"
                                                 VSD_I_APIS=BlankNum()
                                                 VSD_I_Valor_PIS=BlankNum()
                                                 
                                                 VSD_I_CST_COFINS="99"
                                                 VSD_I_ACOFINS=BlankNum()
                                                 VSD_I_Valor_COFINS=BlankNum()
                                                 
                                                 Campo="I_NCM"
                                            Else Campo="I_CST_PIS"
                                         EndIf
                                    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")
                 If Not IsBlank(VSD_I_AISSQN)
                    Then VSD_I_Valor_ISSQN=Round((VSD_I_Preco_Total*VSD_I_AISSQN)/100,2)
                         Campo="I_Valor_ISSQN"
                 EndIf
            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 Not IsBlank(VSD_I_CST_PIS)
                    Then TribCST=Checa_CST("PIS",[NotaC->Tipo Movimento Estoque],VSD_I_CST_PIS)
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then 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
            Case Campo="I_APIS":
                 VSD_I_APIS=ControlValue("I_APIS")
                 If VSD_I_APIS>0
                    Then VSD_I_Valor_PIS=Round((VSD_I_Preco_Total*VSD_I_APIS)/100,2)
                 EndIf
                 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",[NotaC->Tipo Movimento Estoque],VSD_I_CST_COFINS)
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then VSD_I_ACOFINS=BlankNum()
                                         VSD_I_Valor_COFINS=BlankNum()
                                         Campo="I_NCM"
                                    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")
                 If VSD_I_ACOFINS>0
                    Then VSD_I_Valor_COFINS=Round((VSD_I_Preco_Total*VSD_I_ACOFINS)/100,2)
                 EndIf
                 Campo="I_Valor_COFINS"
            Case Campo="I_Valor_COFINS":
                 VSD_I_Valor_COFINS=ControlValue("I_Valor_COFINS")
                 Campo="I_NCM"

                 DigitaI2()
                 Campo="I_Valor_COFINS"
                 AcceptDialog

            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 Campo="I_CFOP"

            Case Campo="I_CFOP":
                 VSD_I_CFOP=ControlValue("I_CFOP")

                 Moveto "NotaC"
                 Moveto [CFO]
                 Ativa_Lookup()
                 Moveto [Codigo Fiscal de Operacao]
                 Locate VSD_I_CFOP
                 If RetVal
                    Then KeyPress "ESC"
                          Switch
                            Case SubStr(VSD_I_CFOP,1,1)<>SubStr([NotaC->CFO],1,1):
                                 Mensagem("CFOP "+VSD_I_CFOP+" difere da OF "+[NotaC->CFO]+" !")

                           ;Case [NotaC->Tipo Movimento Estoque]="S" And VSD_I_TICMS ="S" And (SubStr(VSD_I_CFOP,1,2)<>"54" And SubStr(VSD_I_CFOP,1,2)<>"64"):  
                           ;     Mensagem("CFOP "+VSD_I_CFOP+" nÆo ‚ de substitui‡Æo tribut ria !")
                           ;Case [NotaC->Tipo Movimento Estoque]="S" And VSD_I_TICMS<>"S" And (SubStr(VSD_I_CFOP,1,2) ="54"  Or SubStr(VSD_I_CFOP,1,2) ="64"):  
                           ;     Mensagem("CFOP "+VSD_I_CFOP+" ‚ para substitui‡Æo tribut ria !")
                           ;
                           ;Case [NotaC->Tipo Movimento Estoque]="E" And VSD_I_TICMS ="S" And (SubStr(VSD_I_CFOP,1,2)<>"14" And SubStr(VSD_I_CFOP,1,2)<>"24"):  
                           ;     Mensagem("CFOP "+VSD_I_CFOP+" nÆo ‚ de substitui‡Æo tribut ria !")
                           ;Case [NotaC->Tipo Movimento Estoque]="E" And VSD_I_TICMS<>"S" And (SubStr(VSD_I_CFOP,1,2) ="14"  Or SubStr(VSD_I_CFOP,1,2) ="24"):  
                           ;     Mensagem("CFOP "+VSD_I_CFOP+" ‚ para substitui‡Æo tribut ria !")
                           ;
                           ;Case [NotaC->Tipo Movimento Estoque]="E" And VSD_I_Tipo_Item="C" And (SubStr(VSD_I_CFOP,1,2)<>"19" And SubStr(VSD_I_CFOP,1,2)<>"29"):  
                           ;     Mensagem("CFOP "+VSD_I_CFOP+" nÆo ‚ de servi‡o !")
                           ;Case [NotaC->Tipo Movimento Estoque]="S" And VSD_I_Tipo_Item="C" And (SubStr(VSD_I_CFOP,1,2)<>"59" And SubStr(VSD_I_CFOP,1,2)<>"69"):  
                           ;     Mensagem("CFOP "+VSD_I_CFOP+" nÆo ‚ de servi‡o !")

                            OtherWise:
                                 Switch
                                   Case TPEMPR="SIMPLES NACIONAL"    : Campo="I_CSOSN"
                                   Case VSD_I_TICMS="S"              : Campo="I_MVA"
                                   OtherWise:
                                       If VSD_I_Tipo_Item="C"
                                          Then Campo="I_CDSERV"
                                          Else VSD_I_CDSERV =BlankNum()
                                               VSD_I_MUNSERV=BlankNum()     
                                               VSD_I_UFSERV =""
                                               If PARAM_VOLUMES="S"
                                                  Then Campo="I_Numero_Volumes"
                                                  Else AcceptDialog
                                               EndIf
                                       EndIf
                                EndSwitch
                          EndSwitch
                    Else Mensagem("CFOP "+VSD_I_CFOP+" n„o Cadastrado !")
                         KeyPress "ESC"
                 EndIf
                 Moveto "NotaI"
                 Echo Off
            Case Campo="I_CSOSN":
                 VSD_I_CSOSN=ControlValue("I_CSOSN")
                 If IsBlank(VSD_I_CSOSN) And TPEMPR<>"SIMPLES NACIONAL"
                    Then VSD_I_CSOSN="900"
                 EndIf        
                 If Not IsBlank(VSD_I_CSOSN)
                    Then TribCST=Checa_CSOSN(VSD_I_TICMS,VSD_I_CSOSN)
                         If TribCST<>""
                            Then
                                 MSG=""
                                 If TPEMPR="SIMPLES NACIONAL"
                                    Then Switch
                                           Case VSD_I_CSOSN="101" And  ALIQUOTA_CREDITO_ICMS_NOSN<0: MSG="?"                      
                                           Case VSD_I_CSOSN="102" And  ALIQUOTA_CREDITO_ICMS_NOSN>0: MSG="?"
                                           Case VSD_I_CSOSN="201" And  ALIQUOTA_CREDITO_ICMS_NOSN<0: MSG="?"                           
                                           Case VSD_I_CSOSN="202" And  ALIQUOTA_CREDITO_ICMS_NOSN>0: MSG="?"
                                         EndSwitch 
                                 EndIf

                                 If MSG=""
                                    Then Switch
                                           Case VSD_I_TICMS="S"              : Campo="I_MVA"
                                           OtherWise:
                                             If PARAM_VOLUMES="S"
                                                Then Campo="I_Numero_Volumes"
                                                Else AcceptDialog
                                             EndIf
                                         EndSwitch
                                    Else Mensagem("CSOSN inv lido p/ destina‡Æo nÆo optante Simples Nacional !")
                                 EndIf
                            Else Mensagem("CSOSN inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf
            Case Campo="I_MVA":
                 VSD_I_MVA=ControlValue("I_MVA")
                 If VSD_I_Tipo_Item="C"
                    Then Campo="I_CDSERV"
                    Else VSD_I_CDSERV =BlankNum()
                         VSD_I_MUNSERV=BlankNum()     
                         VSD_I_UFSERV =""
                         If PARAM_VOLUMES="S"
                            Then Campo="I_Numero_Volumes"
                            Else AcceptDialog
                         EndIf
                 EndIf
            Case Campo="I_CDSERV":
                 VSD_I_CDSERV=ControlValue("I_CDSERV")
                 Campo="I_MUNSERV"

            Case Campo="I_MUNSERV":
                 VSD_I_MUNSERV=ControlValue("I_MUNSERV")
                 If PARAM_VOLUMES="S"
                    Then Campo="I_Numero_Volumes"
                    Else AcceptDialog
                 EndIf
            Case Campo="I_Numero_Volumes":
                 VSD_I_Numero_Volumes=ControlValue("I_Numero_Volumes")
                 Campo="I_Peso_Liquido"
            Case Campo="I_Peso_Liquido":
                 VSD_I_Peso_Liquido=ControlValue("I_Peso_Liquido")
                 Campo="I_Peso_Embalagem"
            Case Campo="I_Peso_Embalagem":
                 VSD_I_Peso_Embalagem=ControlValue("I_Peso_Embalagem")
                 AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item"       Or
   Campo="I_Tipo_Item"         Or
   Campo="I_Codigo_Cor_Tecido" Or
   Campo="I_Codicao_Pagamento" Or
   Campo="I_Tabela"            Or
   Campo="I_CFOP"              Or
   Campo="I_CST_Item"          Or  
   Campo="I_CST_IPI"           Or  
   Campo="I_CST_PIS"           Or  
   Campo="I_CST_COFINS"        Or
   Campo="I_CSOSN"             Or
   Campo="I_MUNSERV"                 
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf

If Not IsAssigned(LOCALIZAR_POR)
   Then Switch 
          Case SYS_CODIGO_CLIENTE="0296" : LOCALIZAR_POR="CodFor"
          Case SYS_CODIGO_CLIENTE="0046" And 
               PARAM_UTILIZACDBARRA="S"  : LOCALIZAR_POR="CodBar"
          OtherWise                      : LOCALIZAR_POR="CodItem"
        EndSwitch   
EndIf

Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="I_Pedido":
       Switch
         Case MSG_Pedido_Orcamento="Pedido": MSGCAMPO="Numero do Pedido"
         Case MSG_Pedido_Orcamento="Orcam.": MSGCAMPO="Numero do Orcamento"
         Case MSG_Pedido_Orcamento="N§. OS": MSGCAMPO="Numero da Ordem de Servi‡o"
       EndSwitch
  Case Campo="I_Pedido_Item":
       Switch
         Case MSG_Pedido_Orcamento="Pedido": MSGCAMPO="Sequencia do Item do Pedido"
         Case MSG_Pedido_Orcamento="Orcam.": MSGCAMPO="Sequencia do Item do Orcamento"
         Case MSG_Pedido_Orcamento="N§. OS": MSGCAMPO="Sequencia do Item da Ordem de Servi‡o"
       EndSwitch
  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_CF_Item"                : MSGCAMPO="Normas Brasileiras de Mercadorias"
  Case Campo="I_Codigo_Cor_Tecido"      : MSGCAMPO="Codigo da Cor"
  Case Campo="I_Tamanho"                : MSGCAMPO="Tamanho"
  Case Campo="I_Quantidade"             : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"                : MSGCAMPO="Unidade Fiscal"
  Case Campo="I_Preco_Unitario"         : MSGCAMPO="Pre‡o Unitario"
  Case Campo="I_Taxa_Desconto_Unitario" : MSGCAMPO="Taxa Desconto Unitario"
  Case Campo="I_Valor_Desconto_Unitario": MSGCAMPO="Valor Desconto Unitario"
  Case Campo="I_Preco_Total"            : MSGCAMPO="Pre‡o Total"
  Case Campo="I_Custo_Unitario"         : MSGCAMPO="Custo Unitario"
  Case Campo="I_Preco_Tabela"           : MSGCAMPO="Pre‡o da Tabela de Pre‡o"
  Case Campo="I_Comissao_Item"          : MSGCAMPO="Comiss„o do Item"

  Case Campo="I_TICMS"                  : MSGCAMPO="Tributacao ICMS: N„o tributado,Debitado,Isento,Outros,Substitui‡„o"
  Case Campo="I_CST_Item"               : MSGCAMPO="Codigo Situa‡„o Tributaria/ICMS"
  Case Campo="I_RBC_ICMS"               : MSGCAMPO="Aliquota Redu‡Æo na Base de Calculo de ICMS"
  Case Campo="I_AICMS"                  : MSGCAMPO="Aliquota de ICMS"
  Case Campo="I_Valor_ICMS"             : MSGCAMPO="Valor do ICMS"

  Case Campo="I_CST_IPI"                : MSGCAMPO="Codigo Situa‡„o Tributaria/IPI"
  Case Campo="I_AIPI"                   : MSGCAMPO="Aliquota de IPI"
  Case Campo="I_Valor_IPI"              : MSGCAMPO="Valor do IPI"

  Case Campo="I_AISSQN"                 : MSGCAMPO="Aliquota do ISSQN"
  Case Campo="I_Valor_ISSQN"            : MSGCAMPO="Valor do ISSQN"

  Case Campo="I_CST_PIS"                : MSGCAMPO="Codigo Situa‡„o Tributaria/PIS"
  Case Campo="I_APIS"                   : MSGCAMPO="Aliquota do PIS"
  Case Campo="I_Valor_PIS"              : MSGCAMPO="Valor do PIS"

  Case Campo="I_CST_COFINS"             : MSGCAMPO="Codigo Situa‡„o Tributaria/COFINS"
  Case Campo="I_ACOFINS"                : MSGCAMPO="Aliquota do COFINS"
  Case Campo="I_Valor_COFINS"           : MSGCAMPO="Valor do COFINS"

  Case Campo="I_Numero_Volumes"         : MSGCAMPO="Quantidade de Volumes"
  Case Campo="I_Peso_Liquido"           : MSGCAMPO="Peso Liquido"
  Case Campo="I_Peso_Embalagem"         : MSGCAMPO="Peso da Embalagem"

  Case Campo="I_CFOP"                   : MSGCAMPO="CFOP p/ 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_NCM"                    : MSGCAMPO="NCM"

  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"

  OtherWise                             : MSGCAMPO=""
EndSwitch

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

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
   Else TECLA=TECLA+"Alt+F=Fun‡”es  Localizar-> "+LOCALIZAR_POR 
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()

;*******************************************************************************
;* Parƒmetros FT_IMP                                                           *
;*******************************************************************************
Proc PARAM_FTIMP()
If Not IsAssigned(CANCELA_IMPORTACAO_FTIMP) Then CANCELA_IMPORTACAO_FTIMP=False EndIf 
                                                                                    
Switch
  Case FTIMP=1 : Tela = 0
                 Carrega_Array_FTIMP=True
                 
                 Release Vars CST_TEMP
                 If IsAssigned(VSD_I_CST_Item)
                    Then CST_TEMP=VSD_I_CST_Item
                 EndIf  

  Case FTIMP=2 : If CANCELA_IMPORTACAO_FTIMP
                    Then APLIC_ORIGEM="NOTA"
                         Cancelar_Importacao=True
                         Play "FT_IMP"
                         Cancelar_Importacao=False
                 EndIf

  Case FTIMP=3 : CANCELA_IMPORTACAO_FTIMP=False
  
  Case FTIMP=4 : If INICIO_DIALOG
                    Then If Tela=0
                            Then Campo="I_Codigo_Item"
                                 Dynarray WinArray51[]
                                 Window Handle Dialog to JANELA1
                                 Window GetAttributes JANELA1 To WinArray51
                         EndIf
                 EndIf              
EndSwitch

EndProc ; PARAM_FT_IMP()

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

TabAnt=Table()

INICIO_DIALOG=True
OP_SHOWD="OCP"

UnLockRecord
FormKey
SaveTables

Moveto "NotaOCP"
Moveto [Codigo da Empresa]
Locate EMPRESA,NUMDOC,SERIE
If RetVal 
   Then VSDGOCPEMPENHO  = [Nota de Empenho]
        VSDGOCPPEDIDO   = [Pedido         ]  
        VSDGOCPCONTRATO = [Contrato       ]
   Else VSDGOCPEMPENHO  = ""
        VSDGOCPPEDIDO   = ""
        VSDGOCPCONTRATO = ""
EndIf

Echo Normal
Echo Off

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

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

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

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

Enddialog                     
Mouse Show 

If VSDGOCPEMPENHO<>"" Or VSDGOCPPEDIDO<>""  Or VSDGOCPCONTRATO<>""
   Then Moveto "NotaOCP"
        Moveto [Codigo da Empresa]
        Locate EMPRESA,NUMDOC,SERIE
        If RetVal 
           Then Del
        EndIf   
        End Down
        [Codigo da Empresa  ]= EMPRESA 
        [Numero do Documento]= NUMDOC 
        [Serie do Documento ]= SERIE 
        [Nota de Empenho    ]= VSDGOCPEMPENHO
        [Pedido             ]= VSDGOCPPEDIDO 
        [Contrato           ]= VSDGOCPCONTRATO
        
        SaveTables
EndIf

UnLockRecord
Moveto TabAnt
FormKey

EndProc    ;  Ordem_Compra_Publica()

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()

FTIMP=1                         
PARAM_FTIMP()

Switch
  Case Not IsBlank([NotaC->Numero do Pedido]) Or PARAM_PEDIDO="S":
       MSG_Pedido_Orcamento="Pedido"
  Case Not IsBlank([NotaC->Numero do Orcamento]) Or PARAM_ORCAMENTO="S":
       MSG_Pedido_Orcamento="Orcam."
  OtherWise:
       MSG_Pedido_Orcamento="......"
EndSwitch

Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","HOME","END","PGDN","PGUP","F4","F7","F8","F9",-33,-6,-147
     @ 02,0 height 21 width 80

   Accept @ -01,43 Width 6 "A3" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,03 MSG_Pedido_Orcamento For "I_Pedido"
   Accept @ 00,18 Width 09 "A06" picture "#*#" Tag "I_Pedido" to VSD_I_Pedido
   Label  @ 00,11 "/Item" For "I_Pedido_Item"
   Accept @ 00,28 Width 06 "N" picture "#*#" Tag "I_Pedido_Item" to VSD_I_Pedido_Item

   Label  @ 01,01 "Codigo Item" For "I_Codigo_Item"
   Accept @ 02,01 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 01,18 "Descricao Item" For "I_Descricao_Item"
   Accept @ 02,18 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item

   Label  @ 01,61 "TI" For "I_Tipo_Item"
   Accept @ 02,61 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   Label  @ 01,66 "NBM" For "I_CF_Item"
   Accept @ 02,66 Width 05 "A10" picture "!*!" Tag "I_CF_Item" to VSD_I_CF_Item

   Label  @ 03,00 "[F8]Inf.Adic->" For "I_InfAdic"
   Accept @ 03,18 Width 62 "A100" picture "!*!" Tag "I_InfAdic" to VSD_I_InfAdic

   Label  @ 04,05 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 05,11 Width 06 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Label  @ 04,18 "Descricao Cor/Tecido" For "I_Descricao_Cor_Tecido"
   Accept @ 05,18 Width 22 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   Label  @ 04,40 "Tamanho" For "I_Tamanho"
   Accept @ 05,41 Width 06 "A2" picture "!*!" Tag "I_Tamanho" to VSD_I_Tamanho
   Label  @ 04,48 "Modelo" For "I_Modelo_Item"
   Accept @ 05,49 Width 07 "A4" picture "!*!" Tag "I_Modelo_Item" to VSD_I_Modelo_Item

   Label  @ 06,09 "Tabela" For "I_Tabela"
   Accept @ 07,09 Width 08 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela
   Label  @ 06,18 "CPG" For "I_Condicao_Pagamento"
   Accept @ 07,18 Width 5 "A2" picture "#*#" Tag "I_Condicao_Pagamento" to VSD_I_Condicao_Pagamento
   Label  @ 06,24 "Comp. Dias" For "I_Composicao_Dias"
   Accept @ 07,24 Width 23 "A50" picture "!*!" Tag "I_Composicao_Dias" to VSD_I_Composicao_Dias


   Label  @ 08,04 "Quantidade" For "I_Quantidade"
   Accept @ 09,04 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 08,18 "UN" For "I_UN_Item"
   Accept @ 09,18 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 08,24 "Pr.Unitario" For "I_Preco_Unitario"
	 Accept @ 09,24 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 08,36 "%" For "I_Taxa_Desconto_Unitario"
   Accept @ 09,37 Width 10 "N" picture "#*#.[####]" Tag "I_Taxa_Desconto_Unitario" to VSD_I_Taxa_Desconto_Unitario
   Label  @ 08,38 "/Vr.Desconto" For "I_Valor_Desconto_Unitario"
   Accept @ 09,48 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_Desconto_Unitario" to VSD_I_Valor_Desconto_Unitario
   Label  @ 08,61 "Pr.Total" For "I_Preco_Total"
   Accept @ 09,61 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

   Label  @ 10,04 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 11,04 Width 13 "$" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 10,24 "Pr.Tabela" For "I_Preco_Tabela"
   Accept @ 11,24 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   Label  @ 10,37 "% Comiss„o" For "I_Comissao_Item"
   Accept @ 11,37 Width 10 "N" picture "#*#.[##]" Tag "I_Comissao_Item" to VSD_I_Comissao_Item

   @ 12,01 ?? "Impostos CST   %Red.BC    Aliq    Valor"
   
   Label  @ 14,00 "     IPI" For "I_CST_IPI"
   Accept @ 14,10 Width 06 "A2" picture "!*!" Tag "I_CST_IPI" to VSD_I_CST_IPI  
   Accept @ 14,15 Width 11 "A2" picture "#*#.[####]" Tag "I_RBC_IPI" to VSD_I_RBC_IPI
   Accept @ 14,26 Width 08 "N" picture "#*#.[##]" Tag "I_AIPI" to VSD_I_AIPI
   Accept @ 14,34 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_IPI" to VSD_I_Valor_IPI

   Label  @ 15,00 "   ISSQN" For "I_TISSQN"
   Accept @ 15,10 Width 06 "A1" picture "D,N,I,S,R" Tag "I_TISSQN" to VSD_I_TISSQN 
   Accept @ 15,15 Width 11 "A2" picture "#*#.[####]" Tag "I_RBC_ISSQN" to VSD_I_RBC_ISSQN
   Accept @ 15,26 Width 08 "N" picture "#*#.[##]" Tag "I_AISSQN" to VSD_I_AISSQN
   Accept @ 15,34 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_ISSQN" to VSD_I_Valor_ISSQN

   Label  @ 16,00 "     PIS" For "I_CST_PIS"    
   Accept @ 16,10 Width 06 "A2" picture "!*!" Tag "I_CST_PIS" to VSD_I_CST_PIS  
   Accept @ 16,15 Width 11 "A2" picture "#*#.[####]" Tag "I_RBC_PIS" to VSD_I_RBC_PIS
   Accept @ 16,26 Width 08 "N" picture "#*#.[##]" Tag "I_APIS" to VSD_I_APIS
   Accept @ 16,34 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_PIS" to VSD_I_Valor_PIS

   Label  @ 17,00 "  COFINS" For "I_CST_COFINS"   
   Accept @ 17,10 Width 06 "A2" picture "!*!" Tag "I_CST_COFINS" to VSD_I_CST_COFINS 
   Accept @ 17,15 Width 11 "A2" picture "#*#.[####]" Tag "I_RBC_COFINS" to VSD_I_RBC_COFINS
   Accept @ 17,26 Width 08 "N" picture "#*#.[##]" Tag "I_ACOFINS" to VSD_I_ACOFINS
   Accept @ 17,34 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_COFINS" to VSD_I_Valor_COFINS

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

EndProc    ;  (DigitaI)

;Origem X
;   NCM 1234567  
;  CFOP 1234

;                              ICMS      ICMS ST          ICMS  ICMS ST
;  Situa‡Æo tribut ria          999                    Cr‚dito  Retido UF Remet
;   Modalidade c lculo            9            9         
;  % Redu‡Æo B.c lculo     999,9999     999,9999                                       ICMS ST
;                 %MVA                    999,99                                     Destino
;      Base de c lculo 9.999.999,99 9.999.999,99                9.999.999,99       9.999.999,99
;             Aliquota        99,99        99,99        99,99 
;     Valor do imposto   999.999,99   999.999,99 9.999.999,99    999.999,99         999.999,99
; %BC opera‡Æo pr¢pria        99,99      
;UF devido na opera‡Æo                        XX   Motivo da desonera‡Æo ICMS X 12345678901234567890
;   
;                               IPI 
;  Situa‡Æo tribut ria           99       Classe de enquadramento
;         Tipo c lculo            X       C¢digo de enquadramento      
;      Base de c lculo 9.999.999,99                 CNPJ produtor
;             Aliquota        99,99    C¢digo do selo de controle   
;  Qtd.tot unid padrÆo                   Qtd. do selo de controle
;    Valor por unidade                 
;     Valor do imposto   999.999,99                
;
;                               PIS       PIS ST
;  Situa‡Æo tribut ria           99             
;         Tipo c lculo            X             
;      Base de c lculo 9.999.999,99 9.999.999,99
;             Aliquota        99,99        99,99
;      Aliquota(reais)
;   Quantidade vendida
;     Valor do imposto   999.999,99   999.999,99    999.999,99   999.999,99
;
;                            COFINS    COFINS ST
;  Situa‡Æo tribut ria           99             
;         Tipo c lculo            X             
;      Base de c lculo 9.999.999,99 9.999.999,99
;             Aliquota        99,99        99,99
;      Aliquota(reais)
;   Quantidade vendida
;     Valor do imposto   999.999,99   999.999,99    999.999,99   999.999,99
;
;                             ISSQN 
;  Situa‡Æo tribut ria            X  C¢digo servi‡o 1234567
;      Base de c lculo 9.999.999,99       Munic¡pio 1234567               
;             Aliquota        99,99              UF XX
;     Valor do imposto   999.999,99                 
;
;                           Volumes
;           Quantidade    9.999.999
;         Peso l¡quido  999.999,999
;       Peso embalagem  999.999,999

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc Digita_ICMS()

Showdialog "ICMS/ST" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","HOME","END","PGDN","PGUP","F4","F7","F8","F9",-33,-6,-147
     @ 10,0 height 13 width 80

@ 01,01 ?? "                              ICMS      ICMS ST          ICMS  ICMS ST                        "
@ 02,01 ?? "  Situa‡Æo tribut ria          999                    Cr‚dito  Retido UF Remet                "
@ 03,01 ?? "   Modalidade c lculo            9            9                                               "
@ 04,01 ?? "  % Redu‡Æo B.c lculo     999,9999     999,9999                                       ICMS ST "
@ 05,01 ?? "                 %MVA                    999,99                                     Destino   "
@ 06,01 ?? "      Base de c lculo 9.999.999,99 9.999.999,99                9.999.999,99       9.999.999,99"
@ 07,01 ?? "             Aliquota        99,99        99,99        99,99                                  "
@ 08,01 ?? "     Valor do imposto   999.999,99   999.999,99 9.999.999,99    999.999,99         999.999,99 "
@ 09,01 ?? " %BC opera‡Æo pr¢pria        99,99                                                            "
@ 10,01 ?? "UF devido na opera‡Æo                        XX   Motivo da desonera‡Æo ICMS X 12345678901234567890"

   Accept @ 02,30 Width 06 "A3" picture "!*!" Tag "I_CST_Item" to VSD_I_CST_Item   
   Accept @ 04,25 Width 11 "N" picture "#*#.[####]" Tag "I_RBC_ICMS" to VSD_I_RBC_ICMS
   Accept @ 07,28 Width 08 "N" picture "#*#.[##]" Tag "I_AICMS" to VSD_I_AICMS
   Accept @ 08,25 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_ICMS" to VSD_I_Valor_ICMS


Enddialog
If Not RetVal
   Then Campo="I_Quantidade"
EndIf   

EndProc    ;  (DigitaI)

;         1         2         3         4         5         6         7         8  
;12345678901234567890123456789012345678901234567890123456789012345678901234567890
;                              ICMS      ICMS ST          ICMS  ICMS ST
;  Situa‡Æo tribut ria          999                    Cr‚dito  Retido UF Remet
;   Modalidade c lculo            9            9         
;  % Redu‡Æo B.c lculo     999,9999     999,9999                                       ICMS ST
;                 %MVA                    999,99                                     Destino
;      Base de c lculo 9.999.999,99 9.999.999,99                9.999.999,99       9.999.999,99
;             Aliquota        99,99        99,99        99,99 
;     Valor do imposto   999.999,99   999.999,99 9.999.999,99    999.999,99         999.999,99
; %BC opera‡Æo pr¢pria        99,99      
;UF devido na opera‡Æo                        XX   Motivo da desonera‡Æo ICMS X 12345678901234567890
   
;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI2()


Showdialog "Dados 2" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","HOME","END","PGDN","PGUP","F4","F7","F8","F9",-33,-6,-147
     @ 14,0 height 09 width 80

   Label  @ 00,01 "NCM" For "I_NCM"
   Accept @ 01,01 Width 11 "A8" picture "#*#" Tag "I_NCM" to VSD_I_NCM
   Label  @ 00,11 "CFOP" For "I_CFOP"
   Accept @ 01,11 Width 07 "A4" picture "####" Tag "I_CFOP" to VSD_I_CFOP
   
   Label  @ 00,17 "CSOSN" For "I_CSOSN"
   Accept @ 01,18 Width 06 "A3" picture "###" Tag "I_CSOSN" to VSD_I_CSOSN
   Label  @ 00,24 "%MVA" For "I_MVA"
   Accept @ 01,24 Width 08 "N" picture "#*#.[##]" Tag "I_MVA" to VSD_I_MVA

   Label  @ 02,01 "Servi‡o" For "I_CDSERV"
   Accept @ 03,01 Width 10 "N" picture "#*#" Tag "I_CDSERV" to VSD_I_CDSERV
   Label  @ 02,11 "Munic¡po" For "I_MUNSERV"
   Accept @ 03,11 Width 10 "N" picture "#*#" Tag "I_MUNSERV" to VSD_I_MUNSERV
   Label  @ 02,21 "UF" For "I_UFSERV"
   Accept @ 03,21 Width 5  "A2" picture "!!" Tag "I_UFSERV" to VSD_I_UFSERV

   Label  @ 04,00 "Qtde/Volumes" For "I_Numero_Volumes"
   Accept @ 04,14 Width 12 "N" picture "#*#.[###]" Tag "I_Numero_Volumes" to VSD_I_Numero_Volumes
   Label  @ 05,00 "Peso Liquido" For "I_Peso_Liquido"
   Accept @ 05,14 Width 12 "N" picture "#*#.[###]" Tag "I_Peso_Liquido" to VSD_I_Peso_Liquido
   Label  @ 06,00 "Peso Embal.." For "I_Peso_Embalagem"
   Accept @ 06,14 Width 12 "N" picture "#*#.[###]" Tag "I_Peso_Embalagem" to VSD_I_Peso_Embalagem

Enddialog

EndProc    ;  (DigitaI)



;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Numero Pedido_Orcamento   ]=VSD_I_Pedido
       [Item Pedido_Orcamento     ]=VSD_I_Pedido_Item

       [Tipo do Item              ]=VSD_I_Tipo_Item
       [Codigo do Item            ]=VSD_I_Codigo_Item

       If SYS_CODIGO_CLIENTE="0003"
          Then [Descricao do Item ]=SubStr(VSD_I_Descricao_Item,1,30)+Spaces(30-Len(SubStr(VSD_I_Descricao_Item,1,30)))+VSD_I_Modelo_Item
          Else [Descricao do Item ]=VSD_I_Descricao_Item
       EndIf

       [Codigo da Cor_Tecido      ]=VSD_I_Codigo_Cor_Tecido
       [Descricao da Cor_Tecido   ]=VSD_I_Descricao_Cor_Tecido
       [Tamanho                   ]=VSD_I_Tamanho

       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Fiscal            ]=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)

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

       [CFO                       ]=VSD_I_CFOP                
       [NCM                       ]=VSD_I_NCM                
       [NBM                       ]=VSD_I_CF_Item

       [Tipo Tributacao           ]=VSD_I_CST_Item
       [CSOSN                     ]=VSD_I_CSOSN              
       [Tributacao de ICMS        ]=VSD_I_TICMS
       [Aliquota Reduzida BCICMS  ]=VSD_I_RBC_ICMS
       [Aliquota de ICMS          ]=VSD_I_AICMS
       [Valor do ICMS             ]=VSD_I_Valor_ICMS
       [MVA                       ]=VSD_I_MVA                

       [Tributacao de IPI         ]=VSD_I_TIPI
       [Aliquota Reduzida BCIPI   ]=VSD_I_RBC_IPI
       [Aliquota de IPI           ]=VSD_I_AIPI
       [Valor do IPI              ]=VSD_I_Valor_IPI

       [Tributacao de ISSQN       ]=VSD_I_TISSQN
       [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   

       [Tributacao de INSS        ]=VSD_I_TINSS
       [Aliquota de INSS          ]=VSD_I_AINSS
       [Valor do INSS             ]=VSD_I_Valor_INSS

       [Tributacao de IR          ]=VSD_I_TIR
       [Aliquota de IR            ]=VSD_I_AIR
       [Valor do IR               ]=VSD_I_Valor_IR

       [IPI_CST                   ]=VSD_I_CST_IPI                
       [PIS_CST                   ]=VSD_I_CST_PIS                
       [PIS_Aliquota              ]=VSD_I_APIS                  
       [PIS_Valor                 ]=VSD_I_Valor_PIS              

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

       [Volumes                   ]=VSD_I_Numero_Volumes
       [Peso Liquido              ]=VSD_I_Peso_Liquido
       [Peso Embalagem            ]=VSD_I_Peso_Embalagem
       [Comissao do Item          ]=VSD_I_Comissao_Item
       [Condicao de Pagamento     ]=VSD_I_Condicao_Pagamento
       [Composicao de Dias        ]=VSD_I_Composicao_Dias
       [Codigo da Tabela          ]=VSD_I_Tabela

       UnLockRecord
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Item do Documento         ]

       VSD_I_Pedido                 =[Numero Pedido_Orcamento   ]
       VSD_I_Pedido_Item            =[Item Pedido_Orcamento     ]

       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]

       If SYS_CODIGO_CLIENTE="0003"
          Then VSD_I_Descricao_Item         =Substr([Descricao do Item],1,30)
               VSD_I_Modelo_Item            =Substr([Descricao do Item],31,4)
          Else VSD_I_Descricao_Item         =[Descricao do Item ]
       EndIf

       VSD_I_Codigo_Cor_Tecido      =[Codigo da Cor_Tecido      ]
       VSD_I_Descricao_Cor_Tecido   =[Descricao da Cor_Tecido   ]
       VSD_I_Tamanho                =[Tamanho                   ]

       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Fiscal            ]
       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_Custo_Unitario         =[Custo Medio Unitario      ]
       VSD_I_Preco_Tabela           =[Preco Unitario Tabela     ]

       VSD_I_CFOP                   =[CFO                       ]
       VSD_I_NCM                    =[NCM                       ]
       VSD_I_CF_Item                =[NBM                       ]

       VSD_I_CST_Item               =[Tipo Tributacao           ]
       VSD_I_CSOSN                  =[CSOSN                     ]
       VSD_I_TICMS                  =[Tributacao de ICMS        ]
       VSD_I_RBC_ICMS               =[Aliquota Reduzida BCICMS  ]
       VSD_I_AICMS                  =[Aliquota de ICMS          ]
       VSD_I_Valor_ICMS             =[Valor do ICMS             ]
       VSD_I_MVA                    =[MVA                       ]

       VSD_I_CST_IPI                =[IPI_CST                   ]
       VSD_I_TIPI                   =[Tributacao de IPI         ]
       VSD_I_RBC_IPI                =[Aliquota Reduzida BCIPI   ]
       VSD_I_AIPI                   =[Aliquota de IPI           ]
       VSD_I_Valor_IPI              =[Valor do IPI              ]

       VSD_I_TISSQN                 =[Tributacao de ISSQN       ]
       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_TINSS                  =[Tributacao de INSS        ]
       VSD_I_AINSS                  =[Aliquota de INSS          ]
       VSD_I_Valor_INSS             =[Valor do INSS             ]

       VSD_I_TIR                    =[Tributacao de IR          ]
       VSD_I_AIR                    =[Aliquota de IR            ]
       VSD_I_Valor_IR               =[Valor do IR               ]

       VSD_I_TPIS                   =""                          
       VSD_I_CST_PIS                =[PIS_CST                   ]
       VSD_I_APIS                   =[PIS_Aliquota              ]
       VSD_I_Valor_PIS              =[PIS_Valor                 ]

       VSD_I_TCOFINS                =""                          
       VSD_I_CST_COFINS             =[COFINS_CST                ]
       VSD_I_ACOFINS                =[COFINS_Aliquota           ]
       VSD_I_Valor_COFINS           =[COFINS_Valor              ]

       VSD_I_Numero_Volumes         =[Volumes                   ]
       VSD_I_Peso_Liquido           =[Peso Liquido              ]
       VSD_I_Peso_Embalagem         =[Peso Embalagem            ]
       VSD_I_Comissao_Item          =[Comissao do Item          ]
       VSD_I_Condicao_Pagamento     =[Condicao de Pagamento     ]
       VSD_I_Composicao_Dias        =[Composicao de Dias        ]
       VSD_I_Tabela                 =[Codigo da Tabela          ]

       VSD_I_InfAdic                =[Informacoes_Adicionais    ]
       
EndSwitch
EndProc   ; (Registro_Item)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Item do Documento]
Locate [NotaC->Codigo da Empresa],[NotaC->Numero do Documento],
       [NotaC->Serie do Documento],SEQIT
CopyToArray RegItem
QUANT   = [Quantidade          ]
CTTOTAL = NDecimal(([Quantidade]*[Custo Medio Unitario]),2)
CODIGO_MARCA=""
If CHAVEI=1
   Then [Codigo da Tabela     ]=[NotaC->Codigo da Tabela     ]
        [Condicao de Pagamento]=[NotaC->Condicao de Pagamento]
        [Composicao de Dias   ]=[NotaC->Composicao de Dias   ]
EndIf
Registro_Item("Ler")

EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok

If Ok
   Then Registro_Item("Gravar")
        FTIMP=3                         
        PARAM_FTIMP()
   Else If CHAVEI=8
           Then CopyFromArray RegItem
                Exclusao_I()
           Else FTIMP=2                         
                PARAM_FTIMP()
        EndIf
EndIf

EndProc   ; (Finaliza_Registro)

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DIGITAF()
CHAVEF=0
CHAVEV=1
COPIOU_REGISTRO=False

For I From 1 To 10
    AICMS[I] =BlankNum()
    AIPI[I]  =BlankNum()
    AISSQN[I]=BlankNum()
    AINSS[I] =BlankNum()
    AIR[I]   =BlankNum()
    APIS[I]  =BlankNum()
    ACOFINS[I]=BlankNum()

    BCICMS[I] =BlankNum()
    BCIPI[I]  =BlankNum()
    BCISSQN[I]=BlankNum()
    BCINSS[I] =BlankNum()
    BCIR[I]   =BlankNum()
    BCPIS[I]  =BlankNum()
    BCCOFINS[I]=BlankNum()

    VIICMS[I] =BlankNum()
    VIIPI[I]  =BlankNum()
    VIISSQN[I]=BlankNum()
    VIINSS[I] =BlankNum()
    VIIR[I]   =BlankNum()
    VIPIS[I]  =BlankNum()
    VICOFINS[I]=BlankNum()

    RICMS[I] =BlankNum()
    RIPI[I]  =BlankNum()

    AMVA[I]    =BlankNum()
    BCMVA[I]   =BlankNum()
    VRIPIMVA[I]=BlankNum()

EndFor

VRBCICMS_CREDSN=0
VRICMS_CREDSN  =0

VRBC_COMIS=0
VRMERC=0
VRSERV=0 
VRII=0
VRSOMA_ST=0

Moveto "NotaI"
Scan

  If ([Tributacao de ICMS]="S" And SubStr([Tipo Tributacao],2,2)<>"60") 
     Or
     (Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And
      [Tributacao de ICMS]="S" And SubStr([Tipo Tributacao],2,2)="60")
     Then VRSOMA_ST=VRSOMA_ST+[Preco Total]
  EndIf   

  If ([Tributacao de ICMS]="D" Or
      [Tributacao de ICMS]="S" Or
      [Tributacao de ICMS]="O") And
      [Aliquota de ICMS]>0
     Then For I From 1 To 10
              If Not IsBlank(AICMS[I])
                 Then If AICMS[I]=[Aliquota de ICMS] And RICMS[I]=[Aliquota Reduzida BCICMS]
                         Then BCICMS[I]=BCICMS[I]+[Preco Total]
                              If Not [Preco Total]>0
                                 Then VIICMS[I]=VIICMS[I]+[Valor do ICMS]
                              EndIf
                              QuitLoop
                      EndIf
                 Else AICMS[I] =[Aliquota de ICMS]
                      RICMS[I] =[Aliquota Reduzida BCICMS]
                      BCICMS[I]=[Preco Total]
                      If Not [Preco Total]>0
                         Then VIICMS[I]=VIICMS[I]+[Valor do ICMS]
                      EndIf
                      QuitLoop
              EndIf
          EndFor
  EndIf

  If ([Tributacao de ICMS]="S" And SubStr([Tipo Tributacao],2,2)<>"60") 
     Or
     (Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And
     [Tributacao de ICMS]="S" And SubStr([Tipo Tributacao],2,2)="60")
     Then 
          For I From 1 To 10
              If Not IsBlank(AMVA[I])
                 Then If AMVA[I]=[MVA]
                         Then BCMVA[I]   =BCMVA[I]+[Preco Total]
                              VRIPIMVA[I]=VRIPIMVA[I]+[Valor do IPI]
                              QuitLoop
                      EndIf
                 Else AMVA[I]    =[MVA]
                      BCMVA[I]   =[Preco Total]
                      VRIPIMVA[I]=[Valor do IPI]
                      QuitLoop
              EndIf
          EndFor
  EndIf

  If [Tipo do Item]<>"C" And
     ([Tributacao de ICMS]="O" Or [Tributacao de ICMS]="N")
     Then VRBCICMS_CREDSN=VRBCICMS_CREDSN+[Preco Total]
  EndIf

  If ([Tributacao de IPI]="D" Or
      [Tributacao de IPI]="O") And
      [Aliquota de IPI]>0
     Then For I From 1 To 10
             If Not IsBlank(AIPI[I])
                Then If AIPI[I]=[Aliquota de IPI] And RIPI[I]=[Aliquota Reduzida BCIPI]
                         Then BCIPI[I]=BCIPI[I]+[Preco Total]
                              If Not [Preco Total]>0
                                 Then VIIPI[I]=VIIPI[I]+[Valor do IPI]
                              EndIf
                              QuitLoop
                      EndIf
                 Else AIPI[I] =[Aliquota de IPI]
                      RIPI[I] =[Aliquota Reduzida BCIPI]
                      BCIPI[I]=[Preco Total]
                      If Not [Preco Total]>0
                         Then VIIPI[I]=VIIPI[I]+[Valor do IPI]
                      EndIf
                      QuitLoop
             EndIf
         EndFor
  EndIf

  If [Tributacao de ISSQN]="D"
     Then For I From 1 To 10
              If Not IsBlank(AISSQN[I])
                 Then If AISSQN[I]=[Aliquota de ISSQN]
                         Then BCISSQN[I]=Round(BCISSQN[I]+[Preco Total],2)
                              VIISSQN[I]=VIISSQN[I]+[Valor do ISSQN]
                              QuitLoop
                      EndIf
                 Else AISSQN[I]=[Aliquota de ISSQN]
                      BCISSQN[I]=[Preco Total]
                      VIISSQN[I]=VIISSQN[I]+[Valor do ISSQN]
                      QuitLoop
              EndIf
          EndFor
  EndIf

  If [Tributacao de INSS]="D"
     Then For I From 1 To 10
              If Not IsBlank(AINSS[I])
                 Then If AINSS[I]=[Aliquota de INSS]
                         Then BCINSS[I]=BCINSS[I]+[Preco Total]
                              VIINSS[I]=VIINSS[I]+[Valor do INSS]
                              QuitLoop
                      EndIf
                 Else AINSS[I]=[Aliquota de INSS]
                      BCINSS[I]=[Preco Total]
                      VIINSS[I]=VIINSS[I]+[Valor do INSS]
                      QuitLoop
              EndIf
          EndFor
  EndIf

  If [PIS_CST]<>"" And Checa_CST("PIS",[NotaC->Tipo Movimento Estoque],[PIS_CST])="C"
     Then For I From 1 To 10
              If Not IsBlank(APIS[I])
                 Then If APIS[I]=[PIS_Aliquota]
                         Then BCPIS[I]=BCPIS[I]+[Preco Total]
                              VIPIS[I]=VIPIS[I]+[PIS_Valor]
                              QuitLoop
                      EndIf
                 Else APIS[I]=[PIS_Aliquota]
                      BCPIS[I]=[Preco Total]
                      VIPIS[I]=VIPIS[I]+[PIS_Valor]
                      QuitLoop
              EndIf
          EndFor
  EndIf

  If [COFINS_CST]<>"" And Checa_CST("COFINS",[NotaC->Tipo Movimento Estoque],[COFINS_CST])="C"
     Then For I From 1 To 10
              If Not IsBlank(ACOFINS[I])
                 Then If ACOFINS[I]=[COFINS_Aliquota]
                         Then BCCOFINS[I]=BCCOFINS[I]+[Preco Total]
                              VICOFINS[I]=VICOFINS[I]+[COFINS_Valor]
                              QuitLoop
                      EndIf
                 Else ACOFINS[I]=[COFINS_Aliquota]
                      BCCOFINS[I]=[Preco Total]
                      VICOFINS[I]=VICOFINS[I]+[COFINS_Valor]
                      QuitLoop
              EndIf
          EndFor
  EndIf

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

          If [Tributacao de IR]="D"
             Then For I From 1 To 10
                      If Not IsBlank(AIR[I])
                         Then If AIR[I]=[Aliquota de IR]
                                 Then BCIR[I]=BCIR[I]+[Preco Total]
                                      VIIR[I]=VIIR[I]+[Valor do IR]
                                      QuitLoop
                              EndIf
                         Else AIR[I]=[Aliquota de IR]
                              BCIR[I]=[Preco Total]
                              VIIR[I]=VIIR[I]+[Valor do IR]
                              QuitLoop
                      EndIf
                  EndFor
          EndIf
  EndIf

  If PARAM_CALC_COMIS_ITEM="S"
     Then VRBC_COMIS=VRBC_COMIS+Round((([Preco Total]*[Comissao do Item])/100),2)
  EndIf
  
  If SubStr([Tipo Tributacao],1,1)="1"
     Then VRII=VRII+[II_Valor Imposto]
  EndIf

EndScan

Moveto "NotaC"
CALC_OF()
If PARAM_SUBSTICMS="S"
   Then Moveto [Valor BCSubstituicao ICMS]
   Else Moveto [Valor Despesas Acessorias]
EndIf
While True

      MSGCAMPO=Field()
      If CALCULO_NF_AUTOMATICO
         Then If Field()="Valor BCSubstituicao ICMS" Then MSGCAMPO="Valor Base Calculo da Substituicao ICMS, CALCULADO" EndIf
              If Field()="Valor Substituicao ICMS"   Then MSGCAMPO="Valor Substituicao ICMS, CALCULADO"                 EndIf
         Else If Field()="Valor BCSubstituicao ICMS" Then MSGCAMPO="Valor Base Calculo da Substituicao ICMS, DIGITADO"  EndIf
              If Field()="Valor Substituicao ICMS"   Then MSGCAMPO="Valor Substituicao ICMS, DIGITADO"                  EndIf
      EndIf
         
      If Field()="Tipo de Pagamento"         Then MSGCAMPO="Tipo de Pagamento=> V=A Vista  P=A Prazo  O=Outros" EndIf
      If Field()="Composicao de Dias"        Then MSGCAMPO=MSGCAMPO+", Exemplo: 15/30/45/60 "                   EndIf

      If Field()="Forma de Pagamento"
         Then TECLA=" Esc=Retornar  F1=Tabelas  "
         Else TECLA=" Esc=Retornar  "
      EndIf
      TECLA=TECLA+"F4=Calc_Venctos  F8=Venctos  PgDn=Finalizar  PgUp  "

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","PGDN","F8","PGUP","F1","F4","F","D"

    Switch
      Case RetVal="F1":
           If Field()="Forma de Pagamento"
              Then CONSULTAF1()
           EndIf
      Case RetVal="F4":
           If PARAM_CPGTO_ITEM="S"
              Then Calc_Venctos_Itens()
              Else If IsBlank([Composicao de Dias])
                      Then Mensagem("Informe a Composi‡Æo de Dias para se calcular os Vencimentos!")
                           Loop
                   EndIf

                   Nome_Cartao=""
                   Numero_Cartao=""
                   If [Forma de Pagamento]="CT" Or
                      [Forma de Pagamento]="CD"
                      Then CHAVEV=1
                           Digita_Cartao()
                           UnLockRecord
                   EndIf
                   Calc_Venctos()
           EndIf
           If PARAM_CPGTO_ITEM="S"
              Then Moveto [Forma de Pagamento]
              Else Moveto [Tipo de Pagamento ]
           EndIf
      Case RetVal="F8":
           Moveto "NotaV"
           While True
               CHAVEV()
               If CHAVEV=9 Then QuitLoop EndIf
               Controla_EdicaoV()
           EndWhile
           Moveto "NotaC"
           Moveto [Tipo de Pagamento]
      Case RetVal="PGUP":
           CHAVEF=9
           QuitLoop
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento])     Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           If IsBlank([Forma de Pagamento]) And [Tipo de Pagamento]<>"O"
              Then Mensagem("Forma Pagto Invalido !")
                   Loop
           EndIf
           If Search("VEND",[NotaC->Descricao da Destinacao])>0
              Then If [Tipo de Pagamento]<>"O"
                      Then Moveto "NotaV"
                           TOT_VECTOS=0
                           CHAVEV=0
                           Scan
                             If [Data]<[NotaC->Data de Emissao]
                                Then CHAVEV=1
                                     MSG="Vencimento invalido !// //"
                                     MSG=MSG+"Vencimento ["+StrVal([Sequencia])+"] de "+Format("D13",[Data])
                                     MSG=MSG+" inferior a data de emiss„o !"
                                     Mensagem(MSG)
                             EndIf
                             TOT_VECTOS=TOT_VECTOS+[Valor]
                           EndScan
                           Moveto "NotaC"
                           If CHAVEV=1
                              Then Loop
                           EndIf
                           If StrVal(TOT_VECTOS)<>StrVal([Valor Nota Fiscal])
                              Then Mensagem("O Valor Total dos Vencimentos Difere do Valor da Nota Fiscal !")
                                   ConfGeral("Deseja encerrar c/ esta diferen‡a ?")
                                   If OK<>"S"
                                      Then Loop
                                   EndIf
                           EndIf
                   EndIf
           EndIf
           If PARAM_UTILIZA_COMISSAO_VENDEDOR="S" Or
              PARAM_UTILIZA_COMISSAO_VENDREAL="S"
              Then Switch
                     Case SYS_CODIGO_CLIENTE="0117":
                       If [Codigo da Destinacao]="001" Or
                          [Codigo da Destinacao]="002"
                          Then If Not Checa_Comissao_Produto()
                                  Then Loop
                               EndIf
                          Else If Not Checa_Comissao_Vendedor()
                                  Then Loop
                               EndIf
                       EndIf
                     OtherWise:
                       If Not Checa_Comissao_Vendedor()
                          Then Loop
                       EndIf
                   EndSwitch
           EndIf

           If PARAM_COMIS_VENCTO="S" And
              PARAM_CPGTO_ITEM<>"S"
              Then RATEIO_COMISSAO_VENCTOS()
           EndIf

           If PARAM_CALC_COMIS_ITEM="S"
              Then
                   VRBC_COMIS  =Round(VRBC_COMIS-((VRBC_COMIS*TXDESCTO_TOTAL)/100),2)
                   VRCALC_COMIS=0
                   Moveto "NotaV"
                   Scan For Not IsBlank([Valor])
                     [Valor da Comissao]=Round((VRBC_COMIS*(([Valor]*100)/[NotaC->Valor Mercadoria Liquido]))/100,2)
                     VRCALC_COMIS       =VRCALC_COMIS+[Valor da Comissao]
                   EndScan
                   If Not IsBlank([Valor])
                      Then [Valor da Comissao]=[Valor da Comissao]+(VRBC_COMIS-VRCALC_COMIS)
                   EndIf
                   Moveto "NotaC"
           EndIf

           ATUA_DADOS()
           QuitLoop
      Case RetVal="F":
           CHAVEV=4
           DIGITA_FRETE()
           CALC_OF()
      Case RetVal="D":
           CHAVEV=4
           If Not Field()="Forma de Pagamento"
              Then DIGITA_DESCTO()
                   CALC_OF()
              Else KeyPress "D"
           EndIf
      Case RetVal="ESC":
        Switch
           Case Field()="Valor BCSubstituicao ICMS":
                CHAVEF=9
                QuitLoop
           Case Field()="Valor Substituicao ICMS":
                Moveto [Valor BCSubstituicao ICMS]
           Case Field()="Valor Despesas Acessorias":
                If PARAM_SUBSTICMS="S"
                   Then Moveto [Valor Substituicao ICMS]
                   Else CHAVEF=9
                        QuitLoop
                EndIf
           Case Field()="Valor do Seguro":
                Moveto [Valor Despesas Acessorias]
           Case Field()="Tipo de Pagamento":
                Moveto [Valor do Seguro]
           Case Field()="Forma de Pagamento":
                If PARAM_CPGTO_ITEM="S"
                   Then Moveto [Valor do Seguro  ]
                   Else Moveto [Tipo de Pagamento]
                EndIf
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Valor BCSubstituicao ICMS" Or
                Field()="Valor Substituicao ICMS" Or
                Field()="Valor Despesas Acessorias" Or
                Field()="Valor do Seguro":
                Switch
                  Case Field()="Valor BCSubstituicao ICMS":
                       Moveto [Valor Substituicao ICMS]
                  Case Field()="Valor Substituicao ICMS":
                       Moveto [Valor Despesas Acessorias]
                  Case Field()="Valor Despesas Acessorias":
                       Moveto [Valor do Seguro]
                  Case Field()="Valor do Seguro":
                       If PARAM_CPGTO_ITEM="S"
                          Then Moveto [Forma de Pagamento]
                          Else Moveto [Tipo de Pagamento ]
                       EndIf
                EndSwitch
                CALC_OF()
           Case Field()="Tipo de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If []="O"
                   Then [Numero de Parcelas]=BlankNum()
                        [Composicao de Dias]=""
                        [Forma de Pagamento]=""
                   Else Moveto [Numero de Parcelas]
                EndIf
           Case Field()="Forma de Pagamento":
                If IsBlank([]) Then Loop EndIf
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc   ; (DigitaF)

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc Closed CALC_OF()
UseVars AutoLib, ErrorProc, VRMERC, VRSERV, VRDESCTO, TXDESCTO_TOTAL, AICMS, AIPI, AISSQN, AINSS, AIR,
        VRBCICMS, VRICMS, VRINSS, VRNF, VRIPI, VRIR, BCIR,
        BCICMS, BCIPI, BCISSQN, BCINSS, RICMS, VIINSS, VISSQN, VIIPI, VIICMS,
        UF_ALIQUOTA_ICMS, SYS_CODIGO_CLIENTE,VIISSQN,VIIR,
        PARAM_UTILIZA_COMISSAO_VENDEDOR, PARAM_UTILIZA_COMISSAO_VENDREAL,
        UFEMPRESA_ALIQUOTA_ICMS,
        VRIPI_SUBST, VRBCICMS_CREDSN, VRICMS_CREDSN,
        ALIQUOTA_CREDITO_ICMS_NOSN,
        MSG_AUTOMATICA,
        AMVA, BCMVA, VRIPIMVA, CALCULO_NF_AUTOMATICO,
        TRIB_ICMS, OPCAO_RED_BCICMS, UF_ALIQUOTA_ICMS_INTERNA,
        TXACRES, TXACRES_ST, VRRATEIO_ACRES, VRRATEIO_ACRESST,
        APIS,ACOFINS,BCPIS,BCCOFINS,VIPIS,VICOFINS,VRPIS,VRCOFINS,VRII, VRBCISSQN,
        TabelaRefC, REG_TABELAREFC,
        VRRATEIO_BCICMS,VRSOMA_ST
        
Private VBC, VRBCST1, VRBCST2,
        tx_PISCOFINS, bc_PISCOFINS

MSG_AUTOMATICA=""

[Valor Mercadoria]=VRMERC
If [Descricao da Destinacao]="COMPLEMENTO IPI SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO IPI CBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ST"
   Then [Valor Mercadoria  ]=BlankNum()
EndIf
[Valor Servico   ]=VRSERV
If [Taxa de Desconto]>0
   Then VRDESCTO=Round((VRMERC*[Taxa de Desconto])/100,2)
        TXDESCTO_TOTAL=[Taxa de Desconto]
   Else VRDESCTO=[Valor do Desconto]
        TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
EndIf
[Valor Desconto          ]=VRDESCTO
[Valor Mercadoria Liquido]=[Valor Mercadoria]-VRDESCTO

VRRATEIO_ACRES  =[Valor Despesas Acessorias]+[Valor do Seguro]
If [Frete Incluso na Nota]="+"
   Then VRRATEIO_ACRES=VRRATEIO_ACRES+[Valor do Frete]
EndIf
TXACRES=NDecimal((VRRATEIO_ACRES/VRMERC)*100,12)

VRRATEIO_ACRESST=[Valor Despesas Acessorias]+[Valor do Seguro]+[Valor do Frete]
If SYS_CODIGO_CLIENTE="0167"
   Then VRRATEIO_ACRESST=VRRATEIO_ACRESST-[Valor do Frete]     
EndIf
TXACRES_ST=NDecimal((VRRATEIO_ACRESST/VRSOMA_ST)*100,12)

VRBCICMS =0
VRICMS   =0
VRIPI    =0
VRIR     =0
VRBCISSQN=0
VRISSQN  =0
VRINSS   =0
VRNF     =0
VRBCST1  =0
VRBCST2  =0
VRPIS    =0
VRCOFINS =0

VRICMS_CREDSN  =0
VRRATEIO_BCICMS=0

If TRIB_ICMS="D"
   Then VRRATEIO_BCICMS=[Valor Despesas Acessorias]+[Valor do Seguro]
        If VRRATEIO_BCICMS>0
           Then VBC     =VRRATEIO_BCICMS
                VRBCICMS=VRBCICMS+VBC
                VRICMS  =Round(VRICMS+((VBC*UF_ALIQUOTA_ICMS)/100),2)
        EndIf            
        
        If [Frete Incluso na Nota]="+"
           Then If [Aliquota de ICMS Frete]>0
                   Then VBC     =[Valor do Frete]
                        VBC     =Round(VBC-((VBC*[Aliquota BCICMS Frete])/100),2)
                        VRBCICMS=VRBCICMS+VBC
                        VRICMS  =Round(VRICMS+((VBC*[Aliquota de ICMS Frete])/100),2)
                        VRRATEIO_BCICMS=VRRATEIO_BCICMS+VBC
                EndIf
        EndIf
        
        If VRII>0
           Then VBC     =VRII
                VRBCICMS=VRBCICMS+VBC
                VRICMS  =Round(VRICMS+((VBC*UF_ALIQUOTA_ICMS)/100),2)
        EndIf                
EndIf

For I From 1 To 10
    If Not IsBlank(AICMS[I])
       Then If BCICMS[I]>0
               Then Switch
                      Case OPCAO_RED_BCICMS="3" And RICMS[I]>0 And TXDESCTO_TOTAL>0:
                           VBC=BCICMS[I]
                      OtherWise:
                           VBC=BCICMS[I]-Round(((BCICMS[I]*TXDESCTO_TOTAL)/100),2)
                    EndSwitch
                    VBC=Round(VBC-((VBC*RICMS[I])/100),2)
                    VRBCICMS=VRBCICMS+VBC
                    VRICMS=Round(VRICMS+((VBC*AICMS[I])/100),2)
               Else VRICMS=VRICMS+VIICMS[I]
            EndIf
    EndIf
    If Not IsBlank(AIPI[I])
       Then If BCIPI[I]>0
               Then VBC=BCIPI[I]
                    VRIPI=Round(VRIPI+((VBC*AIPI[I])/100),2)
               Else VRIPI=VRIPI+VIIPI[I]
            EndIf
    EndIf
    If Not IsBlank(AISSQN[I])
       Then If BCISSQN[I]>0
               Then VRBCISSQN=VRBCISSQN+BCISSQN[I]
                    VRISSQN  =Round(VRISSQN+((BCISSQN[I]*AISSQN[I])/100),2)
               Else VRISSQN  =VRISSQN+VIISSQN[I]
            EndIf
    EndIf
    If Not IsBlank(AINSS[I])
       Then If BCINSS[I]>0
               Then VRINSS=VRINSS+Round((((BCINSS[I]-((BCINSS[I]*TXDESCTO_TOTAL)/100))*AINSS[I])/100),2)
               Else VRINSS=VRINSS+VIINSS[I]
            EndIf
    EndIf
    If Not IsBlank(AIR[I])
       Then If BCIR[I]>0
               Then VRIR=Round(VRIR+((BCIR[I]*AIR[I])/100),2)
               Else VRIR=VRIR+VIIR[I]
            EndIf
    EndIf
    
    If Not IsBlank(AMVA[I])
       Then If BCMVA[I]>0
               Then 
                    VBC=BCMVA[I]-Round(((BCMVA[I]*TXDESCTO_TOTAL)/100),2)
                    VRBCST1=VRBCST1+VBC

                    VBC=Round(VBC+((VBC* TXACRES_ST)/100),2)
                    VBC=VBC+VRIPIMVA[I]
                    
                    VBC=VBC+Round((VBC*AMVA[I])/100,2)
                    VRBCST2=VRBCST2+VBC 
            EndIf
    EndIf

EndFor


If (Search("VENDA",[Descricao da Destinacao])>0 And [Tipo Movimento Estoque]="S" And VRBCST2>0) Or
   (Search("DEVOL",[Descricao da Destinacao])>0 And [Tipo Movimento Estoque]="E" And VRBCST2>0)
   Then If CALCULO_NF_AUTOMATICO
           Then VRBCST1=VRBCST1+VRRATEIO_ACRES

                [Valor BCSubstituicao ICMS]=VRBCST2
                [Valor Substituicao ICMS  ]=Round(([Valor BCSubstituicao ICMS]*UF_ALIQUOTA_ICMS_INTERNA)/100,2)
                [Valor Substituicao ICMS  ]=[Valor Substituicao ICMS  ]-Round((VRBCST1*UF_ALIQUOTA_ICMS)/100,2)
                
        EndIf
EndIf

[Valor BCICMS ]=VRBCICMS
[Valor ICMS   ]=VRICMS
[Valor IPI    ]=VRIPI
[Valor BCISSQN]=VRBCISSQN
[Valor ISSQN  ]=VRISSQN
[Valor INSS   ]=VRINSS
[Valor IR     ]=VRIR
[Valor II     ]=VRII    

[Valor Nota Fiscal]=([Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
                    [Valor Substituicao ICMS]+[Valor do Seguro]+[Valor II])-([Valor INSS]+[Valor IR])

If SYS_CODIGO_CLIENTE="0057"
   Then If [Codigo da Destinacao]="036"
           Then [Valor Nota Fiscal]=([Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
                                    [Valor do Seguro])-([Valor INSS]+[Valor IR])
        EndIf
EndIf

VRNF=[Valor Nota Fiscal]

If [Frete Incluso na Nota]="+"
   Then [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Valor do Frete]
EndIf

If VRBCICMS_CREDSN>0 And ALIQUOTA_CREDITO_ICMS_NOSN>0
   Then
        If [Consumidor Final]="S"
           Then VRBCICMS_CREDSN=[Valor Nota Fiscal]
           Else VRBCICMS_CREDSN=VRBCICMS_CREDSN-((VRBCICMS_CREDSN*[Valor Desconto])/[Valor Mercadoria])
                VRBCICMS_CREDSN=VRBCICMS_CREDSN+((VRBCICMS_CREDSN*VRRATEIO_ACRES  )/[Valor Mercadoria])
        EndIf
        VRICMS_CREDSN  =Round((VRBCICMS_CREDSN*ALIQUOTA_CREDITO_ICMS_NOSN)/100,2)

        MSG_AUTOMATICA=" ** PERMITE O APROVEITAMENTO DO CREDITO DE ICMS NO VALOR DE RS "+
                       LTRIM(Format("W12.2,EIC",VRICMS_CREDSN))+
                       " , CORRESPONDENTE A ALIQUOTA DE "+
                       LTRIM(Format("W12.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN))+
                       "% NOS TERMOS DO ARTIGO 23 DA LC123/2006 * "+
                       " NAO GERA DIREITO A CREDITO FISCAL DE ISS E IPI"
EndIf

If [Consumidor Final]="S" And [Valor BCICMS]>0
   Then [Valor BCICMS]=[Valor Nota Fiscal]
        [Valor ICMS  ]=Round(([Valor BCICMS]*UF_ALIQUOTA_ICMS)/100,2)
EndIf

If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ICMS CBC"
   Then [Valor Nota Fiscal       ]=BlankNum()
        [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC"
   Then [Valor BCICMS            ]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ST" 
   Then [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf

If SYS_CODIGO_CLIENTE="0075"
   Then If [Codigo da Destinacao]="022"
           Then [Valor Despesas Acessorias]=Round(([Valor Mercadoria Liquido]*2.5)/100,2)
                [Valor Nota Fiscal        ]=[Valor Mercadoria Liquido]+[Valor Despesas Acessorias]
                [Valor INSS               ]=Round(([Valor Nota Fiscal]*2.3)/100,2)

                [Valor BCSubstituicao ICMS]=[Valor ICMS]
                [Valor Substituicao ICMS  ]=Round(([Valor BCSubstituicao ICMS]*5)/100,2)

                If [Data de Emissao]>=DateVal("31.05.2003")
                   Then [Valor Nota Fiscal        ]=[Valor Nota Fiscal       ]-([Valor INSS]+[Valor Substituicao ICMS])
                   Else [Valor Nota Fiscal        ]=[Valor Nota Fiscal       ]- [Valor INSS]
                EndIf
        EndIf
EndIf

If SYS_CODIGO_CLIENTE="0057"
   Then If [Codigo da Destinacao]="036"
           Then [Valor BCSubstituicao ICMS]=[Valor Mercadoria]
                [Valor Substituicao ICMS  ]=Round(([Valor BCSubstituicao ICMS]*[Aliquota de ICMS])/100,2)
        EndIf
EndIf


;*** Calculo PIS/COFINS ********************************************************
If [Valor Nota Fiscal]>0 And [Valor Mercadoria]>0
   Then tx_PISCOFINS=(100*[Valor Nota Fiscal])/[Valor Mercadoria]
        tx_PISCOFINS=tx_PISCOFINS-100
        For I From 1 To 10
            If Not IsBlank(APIS[I])
               Then If BCPIS[I]>0
                       Then bc_PISCOFINS=BCPIS[I]
                            Switch
                              Case tx_PISCOFINS>0: bc_PISCOFINS=Round(BCPIS[I]+((BCPIS[I]*tx_PISCOFINS)/100),2)
                              Case tx_PISCOFINS<0: bc_PISCOFINS=Round(BCPIS[I]-((BCPIS[I]*(tx_PISCOFINS*-1))/100),2)
                            EndSwitch
                            VRPIS=Round(VRPIS+((bc_PISCOFINS*APIS[I])/100),2)
                       Else VRPIS=VRPIS+VIPIS[I]
                    EndIf
            EndIf
            If Not IsBlank(ACOFINS[I])
               Then If BCCOFINS[I]>0
                       Then bc_PISCOFINS=BCCOFINS[I]
                            Switch
                              Case tx_PISCOFINS>0: bc_PISCOFINS=Round(BCCOFINS[I]+((BCCOFINS[I]*tx_PISCOFINS)/100),2)
                              Case tx_PISCOFINS<0: bc_PISCOFINS=Round(BCCOFINS[I]-((BCCOFINS[I]*(tx_PISCOFINS*-1))/100),2)
                            EndSwitch
                            VRCOFINS=Round(VRCOFINS+((bc_PISCOFINS*ACOFINS[I])/100),2)
                       Else VRCOFINS=VRCOFINS+VICOFINS[I]
                    EndIf
            EndIf
        EndFor
EndIf
[Valor PIS   ]=VRPIS
[Valor COFINS]=VRCOFINS

;*** 0=BlankNum() **************************************************************
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 IPI                ]=0 Then [Valor IPI                ]=BlankNum() EndIf
If [Valor BCISSQN            ]=0 Then [Valor BCISSQN            ]=BlankNum() EndIf
If [Valor ISSQN              ]=0 Then [Valor ISSQN              ]=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 Despesas Acessorias]=0 Then [Valor Despesas Acessorias]=BlankNum() EndIf
If [Valor PIS                ]=0 Then [Valor PIS                ]=BlankNum() EndIf
If [Valor COFINS             ]=0 Then [Valor COFINS             ]=BlankNum() EndIf
If [Valor II                 ]=0 Then [Valor II                 ]=BlankNum() EndIf

If PARAM_UTILIZA_COMISSAO_VENDEDOR="S" Or
   PARAM_UTILIZA_COMISSAO_VENDREAL="S"
   Then Checa_Comissao_Vendedor()
EndIf

EndProc     ;  (Calc_OF)

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc Closed Rateio_BC_Itens(TabelaRefC)
UseVars AutoLib, ErrorProc, 
        UF_ALIQUOTA_ICMS, SYS_CODIGO_CLIENTE,
        UFEMPRESA_ALIQUOTA_ICMS,
        CALCULO_NF_AUTOMATICO, OPCAO_RED_BCICMS, UF_ALIQUOTA_ICMS_INTERNA,
        TXDESCTO_TOTAL, TXACRES_ST,
        ALIQUOTA_CREDITO_ICMS_NOSN, VRICMS_CREDSN,
        VRRATEIO_ACRESST,VRRATEIO_BCICMS
        
Private ICMS_BC, ICMS_Valor, ICMS_ST_BC, ICMS_ST_Valor, ICMS_CredSN_Valor, 
        IPI_Valor, PIS_Valor, COFINS_Valor, ISSQN_BC, ISSQN_Valor, 
        Frete_Valor, Seguro_Valor, OutDesp_Valor, Descto_Valor,
        SOMA_ITENS_ST, SOMA_ITENS_PIS, SOMA_ITENS_COFINS,
        PORC_IT_ST, PORC_IT_MERC, PORC_IT_PIS_COF,
        VR_ACRESC, VR_ACRESCST, VL_ITEM, VL_DESC, VL_IPI, ALIQ_ICMS, ALIQ_RD_ICMS, MVA_ST,ALIQ_ST,
        VL_BC_ICMS , VL_RED_BC , VL_ICMS , VL_BC_ICMS_ST, VL_ICMS_ST, 
        VL_BC_ICMS2, VL_RED_BC2, VL_ICMS2, 
        VL_BC_PIS, VL_PIS, VL_BC_COFINS, VL_COFINS,VL_II,
        DIF_ICMS_BC, DIF_ICMS_Valor, DIF_ICMS_ST_BC,DIF_ICMS_ST_Valor,DIF_ICMS_CredSN_Valor,
        DIF_IPI_Valor, DIF_PIS_BC, DIF_COFINS_BC, DIF_PIS_Valor, DIF_COFINS_Valor,
        DIF_ISSQN_BC, DIF_ISSQN_Valor,
        DIF_Descto_Valor, DIF_Frete_Valor, DIF_Seguro_Valor, DIF_OutDesp_Valor,
        ICMSOk, ICMSSTOk, ICMSCredSNOk, IPIOk, PISOk, COFINSOk, ISSQNOk, 
        DesctoOk, FreteOk, SeguroOk, OutDespOk,
        TabelaRefC, TabelaRefI, REG_TABELAREFC, OutrosRateioOk

;--- Seta Tabelas de Trabalho --------------------------------------------------
Moveto TabelaRefC
CopyToArray REG_TABELAREFC ; guarda dados registro mestre

Switch
  Case TabelaRefC="FaturaC": TabelaRefI="FaturaI"
  Case TabelaRefC="NotaC"  : TabelaRefI="NotaI"
EndSwitch

;--- Totalizadores -------------------------------------------------------------
ICMS_BC          =0
ICMS_Valor       =0 
ICMS_ST_BC       =0
ICMS_ST_Valor    =0
ICMS_CredSN_Valor=0
IPI_Valor        =0 
PIS_BC           =0
PIS_Valor        =0
COFINS_BC        =0 
COFINS_Valor     =0 
ISSQN_BC         =0 
ISSQN_Valor      =0 
Frete_Valor      =0
Seguro_Valor     =0
OutDesp_Valor    =0
Descto_Valor     =0

SOMA_ITENS_ST    =0
SOMA_ITENS_PIS   =0
SOMA_ITENS_COFINS=0

;--- Somar Itens ST,PIS,COFINS -------------------------------------------------
Moveto TabelaRefI
Scan

  If ([Tributacao de ICMS]="S" And SubStr([Tipo Tributacao],2,2)<>"60") 
     Or
     (Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And
      [Tributacao de ICMS]="S" And SubStr([Tipo Tributacao],2,2)="60")
   Then SOMA_ITENS_ST    =SOMA_ITENS_ST    +[Preco Total]
  EndIf    

  If [PIS_Aliquota]>0   
     Then SOMA_ITENS_PIS   =SOMA_ITENS_PIS   +[Preco Total]
  EndIf

  If [COFINS_Aliquota]>0   
     Then SOMA_ITENS_COFINS=SOMA_ITENS_COFINS+[Preco Total]
  EndIf

EndScan
     
Moveto TabelaRefI
Scan

;--- Calcular impostos e rateios proporcionais ---------------------------------
  PORC_IT_ST     =([Preco Total]/SOMA_ITENS_ST)*100 
  PORC_IT_MERC   =([Preco Total]/REG_TABELAREFC["Valor Mercadoria"])*100 
  PORC_IT_PIS_COF=(100*REG_TABELAREFC["Valor Nota Fiscal"])/REG_TABELAREFC["Valor Mercadoria"]
  PORC_IT_PIS_COF=PORC_IT_PIS_COF-100

  VR_ACRESC      =NDecimal((VRRATEIO_BCICMS *PORC_IT_MERC)/100,2)
  VR_ACRESCST    =NDecimal((VRRATEIO_ACRESST*PORC_IT_MERC)/100,2)

  VL_ITEM        =[Preco Total             ]
  VL_DESC        =NDecimal((VL_ITEM*TXDESCTO_TOTAL)/100,2)

  If [Aliquota de IPI]>0
     Then [IPI_BC]=VL_ITEM
     Else [IPI_BC]=BlankNum()    
  EndIf
  VL_IPI          =[Valor do IPI]
  VL_II           =[II_Valor Imposto]
  
  ALIQ_ICMS      =[Aliquota de ICMS        ]
  ALIQ_RD_ICMS   =[Aliquota Reduzida BCICMS]
  MVA_ST         =[MVA         ]
  ALIQ_ST        =UF_ALIQUOTA_ICMS_INTERNA
  If [Aliquota de ICMS]>0 
     Then Switch
            Case OPCAO_RED_BCICMS=3 And ALIQ_RD_ICMS>0 And TXDESCTO_TOTAL>0:
              VL_BC_ICMS=VL_ITEM
            OtherWise:
              VL_BC_ICMS=VL_ITEM
              VL_BC_ICMS=VL_BC_ICMS-VL_DESC
          EndSwitch
          VL_RED_BC =NDecimal((VL_BC_ICMS*ALIQ_RD_ICMS)/100,2)
          VL_BC_ICMS=VL_BC_ICMS-VL_RED_BC                   
          Switch
            Case REG_TABELAREFC["Consumidor Final"]="S" And 
                 REG_TABELAREFC["Valor BCICMS"]>0:
                  VL_BC_ICMS=VL_BC_ICMS+VR_ACRESC+VL_IPI+VL_II                 
            OtherWise:
                  VL_BC_ICMS=VL_BC_ICMS+VR_ACRESC+VL_II            
          EndSwitch
          VL_ICMS   =NDecimal((VL_BC_ICMS*ALIQ_ICMS)/100,2)
          [ICMS_BC      ]=VL_BC_ICMS
          [Valor do ICMS]=VL_ICMS

          [ICMS_CredSN_Aliquota]=BlankNum()
          [ICMS_CredSN_Valor   ]=BlankNum()
     Else 
          VL_ICMS        =[Valor do ICMS]
          [ICMS_BC      ]=BlankNum()    
          [Valor do ICMS]=VL_ICMS

          If [Tipo do Item]<>"C" And ([Tributacao de ICMS]="O" Or [Tributacao de ICMS]="N") And
             ALIQUOTA_CREDITO_ICMS_NOSN>0 And REG_TABELAREFC["Valor BCICMS"]<=0
             Then VL_BC_ICMS2=VL_ITEM-VL_DESC
                  Switch
                    Case REG_TABELAREFC["Consumidor Final"]="S" And 
                         REG_TABELAREFC["Valor BCICMS"]<=0:
                          VL_BC_ICMS2=VL_BC_ICMS2+VR_ACRESC+VL_IPI
                    OtherWise:
                          VL_BC_ICMS2=VL_BC_ICMS2+VR_ACRESC
                  EndSwitch
                  [ICMS_CredSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                  [ICMS_CredSN_Valor   ]=NDecimal((VL_BC_ICMS2*ALIQUOTA_CREDITO_ICMS_NOSN)/100,2)
             Else [ICMS_CredSN_Aliquota]=BlankNum()
                  [ICMS_CredSN_Valor   ]=BlankNum()
          EndIf   
  EndIf

	If (REG_TABELAREFC["Valor Substituicao ICMS"]>0 And
      [Tributacao de ICMS]="S" And SubStr([Tipo Tributacao],2,2)<>"60") 
      Or
	   (REG_TABELAREFC["Valor Substituicao ICMS"]>0 And
      Search("DEVOL",REG_TABELAREFC["Descricao da Destinacao"])>0 And
      [Tributacao de ICMS]="S" And SubStr([Tipo Tributacao],2,2)="60")
	   Then If CALCULO_NF_AUTOMATICO And MVA_ST>0 And VL_ITEM>0
   	         Then 
	                If VL_ICMS>0
	                   Then VL_ICMS2=VL_ICMS
	                   Else VL_BC_ICMS2=VL_ITEM
                          VL_BC_ICMS2=VL_BC_ICMS2-VL_DESC 
                          VL_RED_BC2 =NDecimal((VL_BC_ICMS2*ALIQ_RD_ICMS)/100,2)
                          VL_BC_ICMS2=VL_BC_ICMS2-VL_RED_BC2                   
                          Switch
                            Case REG_TABELAREFC["Consumidor Final"]="S" And 
                                 REG_TABELAREFC["Valor BCICMS"]>0:
                                  VL_BC_ICMS2=VL_BC_ICMS2+VR_ACRESCST+VL_IPI
                            OtherWise:
                                  VL_BC_ICMS2=VL_BC_ICMS2+VR_ACRESCST
                          EndSwitch
                          VL_ICMS2  =NDecimal((VL_BC_ICMS2*REG_TABELAREFC["Aliquota de ICMS"])/100,2)
                  EndIf

	                VL_BC_ICMS_ST=VL_ITEM
	                VL_BC_ICMS_ST=Round(VL_BC_ICMS_ST+((VL_ITEM*TXACRES_ST)/100),2)
	                VL_BC_ICMS_ST=VL_BC_ICMS_ST+VL_IPI
	                VL_BC_ICMS_ST=VL_BC_ICMS_ST+Round((VL_BC_ICMS_ST*MVA_ST)/100,2)
                  VL_RED_BC2   =NDecimal((VL_BC_ICMS_ST*ALIQ_RD_ICMS)/100,2)
                  VL_BC_ICMS_ST=VL_BC_ICMS_ST-VL_RED_BC2                  
	                VL_ICMS_ST   =Round((VL_BC_ICMS_ST*ALIQ_ST)/100,2)
	                VL_ICMS_ST   =VL_ICMS_ST-VL_ICMS2
	
             Else VL_BC_ICMS_ST=NDecimal((REG_TABELAREFC["Valor BCSubstituicao ICMS"]*PORC_IT_ST)/100,2)
                  VL_ICMS_ST   =NDecimal((REG_TABELAREFC["Valor Substituicao ICMS"  ]*PORC_IT_ST)/100,2)
          EndIf
     Else VL_BC_ICMS_ST     =BlankNum()
          VL_ICMS_ST        =BlankNum()
          ALIQ_ST           =BlankNum()
	EndIf
  [ICMS_ST_BC      ]=VL_BC_ICMS_ST
  [ICMS_ST_Valor   ]=VL_ICMS_ST
  [ICMS_ST_Aliquota]=ALIQ_ST

  If [PIS_Aliquota]>0 And REG_TABELAREFC["Valor PIS"]>0 
     Then VL_BC_PIS=(VL_ITEM-VL_DESC)+VL_IPI+VL_ICMS_ST+VR_ACRESCST
          VL_PIS   =NDecimal((VL_BC_PIS*[PIS_Aliquota])/100,2)
     Else VL_BC_PIS  =BlankNum()
          VL_PIS     =BlankNum()
  EndIf
  [PIS_BC   ]=VL_BC_PIS
  [PIS_Valor]=VL_PIS

  If [COFINS_Aliquota]>0 And REG_TABELAREFC["Valor COFINS"]>0 
     Then VL_BC_COFINS=(VL_ITEM-VL_DESC)+VL_IPI+VL_ICMS_ST+VR_ACRESCST
          VL_COFINS=NDecimal((VL_BC_COFINS*[COFINS_Aliquota])/100,2)
     Else VL_BC_COFINS  =BlankNum()
          VL_COFINS     =BlankNum()
  EndIf
  [COFINS_BC   ]=VL_BC_COFINS
  [COFINS_Valor]=VL_COFINS

  If [Aliquota de ISSQN]>0
     Then [ISSQN_BC] =VL_ITEM
     Else [ISSQN_BC] =BlankNum()    
  EndIf

;--- Rateio Frete, Seguro, Desconto, Despesas ----------------------------------
  OutrosRateioOk=True 
  Switch
    Case [Tipo do Item]="C":  ;Igual a Seri‡o
      OutrosRateioOk=False    ;nÆo rateia frete e outros
    ;;If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And [CFO]="5124" ; servi‡o de insdustrializa‡Æo
    ;;   Then OutrosRateioOk=True
    ;;EndIf
    OtherWise              :  ;Diferente de servi‡o
      OutrosRateioOk=True     ;rateia frete e outros 
      If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And [CFO]="5902" ;retorno industrializa‡Æo
         Then OutrosRateioOk=False
      EndIf
  EndSwitch
  If OutrosRateioOk
     Then [Taxa Desconto Total ]=TXDESCTO_TOTAL
          [Valor Desconto Total]=VL_DESC
          If REG_TABELAREFC["Frete Incluso na Nota"]="+"
             Then [Valor Frete Total]=NDecimal((REG_TABELAREFC["Valor do Frete"     ]*PORC_IT_MERC)/100,2)
             Else [Valor Frete Total]=BlankNum()
          EndIf
          [Valor Seguro Total ]=NDecimal((REG_TABELAREFC["Valor do Seguro"          ]*PORC_IT_MERC)/100,2)
          [Valor OutDesp Total]=NDecimal((REG_TABELAREFC["Valor Despesas Acessorias"]*PORC_IT_MERC)/100,2)

          Descto_Valor =Descto_Valor +[Valor Desconto Total]
          Frete_Valor  =Frete_Valor  +[Valor Frete Total   ]
          Seguro_Valor =Seguro_Valor +[Valor Seguro Total  ]
          OutDesp_Valor=OutDesp_Valor+[Valor OutDesp Total ]
     Else [Taxa Desconto Total ]=BlankNum()
          [Valor Desconto Total]=BlankNum()
          [Valor Frete Total   ]=BlankNum()
          [Valor Seguro Total  ]=BlankNum()
          [Valor OutDesp Total ]=BlankNum()
  EndIf

;--- Somar totalizadores -------------------------------------------------------
  ICMS_BC          =ICMS_BC          +[ICMS_BC]
  ICMS_Valor       =ICMS_Valor       +[Valor do ICMS] 
  ICMS_ST_BC       =ICMS_ST_BC       +[ICMS_ST_BC]
  ICMS_ST_Valor    =ICMS_ST_Valor    +[ICMS_ST_Valor]
  ICMS_CredSN_Valor=ICMS_CredSN_Valor+[ICMS_CredSN_Valor]
  IPI_Valor        =IPI_Valor        +[Valor do IPI] 
  PIS_BC           =PIS_BC           +[PIS_BC   ] 
  PIS_Valor        =PIS_Valor        +[PIS_Valor] 
  COFINS_BC        =COFINS_BC        +[COFINS_BC   ] 
  COFINS_Valor     =COFINS_Valor     +[COFINS_Valor] 
  ISSQN_BC         =ISSQN_BC         +[ISSQN_BC] 
  ISSQN_Valor      =ISSQN_Valor      +[Valor do ISSQN] 

EndScan


Moveto TabelaRefC
;--- Calcular diferen‡a totalizadores ------------------------------------------
DIF_ICMS_BC          =[Valor BCICMS             ]-ICMS_BC      
DIF_ICMS_Valor       =[Valor ICMS               ]-ICMS_Valor  
DIF_ICMS_ST_BC       =[Valor BCSubstituicao ICMS]-ICMS_ST_BC   
DIF_ICMS_ST_Valor    =[Valor Substituicao ICMS  ]-ICMS_ST_Valor
DIF_ICMS_CredSN_Valor=VRICMS_CREDSN              -ICMS_CredSN_Valor
DIF_IPI_Valor        =[Valor IPI                ]-IPI_Valor  
DIF_PIS_BC           =[Valor Nota Fiscal        ]-PIS_BC     
DIF_PIS_Valor        =[Valor PIS                ]-PIS_Valor  
DIF_COFINS_BC        =[Valor Nota Fiscal        ]-COFINS_BC     
DIF_COFINS_Valor     =[Valor COFINS             ]-COFINS_Valor  
DIF_ISSQN_BC         =[Valor BCISSQN            ]-ISSQN_BC
DIF_ISSQN_Valor      =[Valor ISSQN              ]-ISSQN_Valor  
DIF_Descto_Valor     =[Valor Desconto           ]-Descto_Valor
If [Frete Incluso na Nota]="+"
   Then DIF_Frete_Valor  =[Valor do Frete   ]-Frete_Valor
   Else DIF_Frete_Valor  =0
EndIf
DIF_Seguro_Valor     =[Valor do Seguro          ]-Seguro_Valor
DIF_OutDesp_Valor    =[Valor Despesas Acessorias]-OutDesp_Valor

ICMSOk       =True
ICMSSTOk     =True
ICMSCredSNOk =True
IPIOk        =True
PISOk        =True
COFINSOk     =True
ISSQNOk      =True
DesctoOk     =True
FreteOk      =True
SeguroOk     =True
OutDespOk    =True

If DIF_ICMS_BC          <>0.00 Then ICMSOk       =False EndIf
If DIF_ICMS_Valor       <>0.00 Then ICMSOk       =False EndIf
If DIF_ICMS_ST_BC       <>0.00 Then ICMSSTOk     =False EndIf
If DIF_ICMS_ST_Valor    <>0.00 Then ICMSSTOk     =False EndIf
If DIF_ICMS_CredSN_Valor<>0.00 Then ICMSCredSNOk =False EndIf
If DIF_IPI_Valor        <>0.00 Then IPIOk        =False EndIf
If DIF_PIS_Valor        <>0.00 Then PISOk        =False EndIf
If DIF_PIS_BC           <>0.00 Then PISOk        =False EndIf
If DIF_COFINS_BC        <>0.00 Then COFINSOk     =False EndIf
If DIF_COFINS_Valor     <>0.00 Then COFINSOk     =False EndIf
If DIF_ISSQN_BC         <>0.00 Then ISSQNOk      =False EndIf
If DIF_ISSQN_Valor      <>0.00 Then ISSQNOk      =False EndIf
If DIF_Descto_Valor     <>0.00 Then DesctoOk     =False EndIf
If DIF_Frete_Valor      <>0.00 Then FreteOk      =False EndIf
If DIF_Seguro_Valor     <>0.00 Then SeguroOk     =False EndIf
If DIF_OutDesp_Valor    <>0.00 Then OutDespOk    =False EndIf

Moveto TabelaRefI
Scan
      
  If [Aliquota de ICMS]>0 And Not ICMSOk
    Then [ICMS_BC      ]=[ICMS_BC        ]+DIF_ICMS_BC
         [Valor do ICMS]=[Valor do ICMS  ]+DIF_ICMS_Valor
         ICMSOk=True
  EndIf  

  If [Tipo do Item]<>"C" And ([Tributacao de ICMS]="O" Or [Tributacao de ICMS]="N") And
     ALIQUOTA_CREDITO_ICMS_NOSN>0 And REG_TABELAREFC["Valor BCICMS"]<=0 And
     Not ICMSCredSNOk
    Then [ICMS_CredSN_Valor]=[ICMS_CredSN_Valor]+DIF_ICMS_CredSN_Valor
         ICMSCredSNOk=True
  EndIf  
  
  If ([Tributacao de ICMS]="S" And SubStr([Tipo Tributacao],2,2)<>"60" And Not ICMSSTOk)
     Or
     (Search("DEVOL",REG_TABELAREFC["Descricao da Destinacao"])>0 And
      [Tributacao de ICMS]="S" And SubStr([Tipo Tributacao],2,2)="60"  And Not ICMSSTOk)
    Then [ICMS_ST_BC   ]=[ICMS_ST_BC     ]+DIF_ICMS_ST_BC
         [ICMS_ST_Valor]=[ICMS_ST_Valor  ]+DIF_ICMS_ST_Valor
         ICMSSTOK=True
  EndIf  
  
  If [Aliquota de IPI]>0 And Not IPIOk
    Then [Valor do IPI]=[Valor do IPI  ]+DIF_IPI_Valor
         IPIOk=True
  EndIf  
  
  If [PIS_Aliquota]>0 And Not PISOk
    Then [PIS_BC   ]=[PIS_BC   ]+DIF_PIS_BC    
         [PIS_Valor]=[PIS_Valor]+DIF_PIS_Valor
         PISOk=True
  EndIf  
  
  If [COFINS_Aliquota]>0 And Not COFINSOk
    Then [COFINS_BC   ]=[COFINS_BC   ]+DIF_COFINS_BC    
         [COFINS_Valor]=[COFINS_Valor]+DIF_COFINS_Valor
         COFINSOk=True
  EndIf  
  
  If [Aliquota de ISSQN]>0 And Not ISSQNOk
    Then [ISSQN_BC      ]=[ISSQN_BC      ]+DIF_ISSQN_BC
         [Valor do ISSQN]=[Valor do ISSQN]+DIF_ISSQN_Valor
         ISSQNOk=True
  EndIf  

  OutrosRateioOk=True 
  Switch
    Case [Tipo do Item]="C":  ;Igual a Seri‡o
      OutrosRateioOk=False    ;nÆo rateia frete e outros
    ;;If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And [CFO]="5124" ; servi‡o de insdustrializa‡Æo
    ;;   Then OutrosRateioOk=True
    ;;EndIf
    OtherWise              :  ;Diferente de servi‡o
      OutrosRateioOk=True     ;rateia frete e outros 
      If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And [CFO]="5902" ;retorno industrializa‡Æo
         Then OutrosRateioOk=False
      EndIf
  EndSwitch
  If OutrosRateioOk And 
     (Not DesctoOk Or Not FreteOk Or Not SeguroOk Or Not OutDespOk)
     Then [Valor Desconto Total]=[Valor Desconto Total]+DIF_Descto_Valor
          If REG_TABELAREFC["Frete Incluso na Nota"]="+"
             Then [Valor Frete Total]=[Valor Frete Total]+DIF_Frete_Valor
          EndIf
          [Valor Seguro Total  ]=[Valor Seguro Total  ]+DIF_Seguro_Valor
          [Valor OutDesp Total ]=[Valor OutDesp Total ]+DIF_OutDesp_Valor
          DesctoOk =True
          FreteOk  =True
          SeguroOk =True
          OutDespOk=True
  EndIf

  If ICMSOk And ICMSSTOk And ICMSCredSNOk And IPIOk And PISOk And COFINSOk And ISSQNOk And
     DesctoOk And FreteOk And SeguroOk And OutDespOk
     Then QuitLoop
  EndIf   

EndScan
If RecordStatus("Locked") Then UnLockRecord EndIf         
          
Moveto TabelaRefC

EndProc   ; (Rateio_BC_Itens)


;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS()
Private NPC, i, pos_s, NP, VREF,
        VRVENCTO, VRDIFERE, j, NDIAS,
        VCVENCTO, VCDIFERE,
        DIA_VECTO, MES_VECTO, ANO_VECTO, SOMAVRF, SOMAVRC

If Not Checa_CompDias([NotaC->Composicao de Dias])
   Then Return
EndIf

Moveto "NotaV"
Home
While Not RecordStatus("New")
  Del
EndWhile

If [NotaC->Tipo de Pagamento]="O"
   Then Moveto "NotaC"
        Return
EndIf

NPC=1
i=1
If Not IsBlank([NotaC->Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[NotaC->Composicao de Dias],i)
          If pos_s=0
             Then QuitLoop
             Else NPC=NPC+1
                  i=pos_s+1
          EndIf
        EndWhile
   Else NPC=0
EndIf
If NPC=0
   Then NP=[NotaC->Numero de Parcelas]
   Else If NPC=1 And [NotaC->Numero de Parcelas]>1
           Then NP=[NotaC->Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

VRVENCTO=NDecimal(([NotaC->Valor Nota Fiscal]/NP),2)
VRDIFERE=[NotaC->Valor Nota Fiscal]-(VRVENCTO*NP)

If PARAM_COMIS_VENCTO="S"
   Then VREF=NDecimal(([NotaC->Valor Nota Fiscal]*[NotaC->Comissao do Representante])/100,2)
        VCVENCTO=NDecimal((VREF/NPC),2)
        VCDIFERE=VREF-(VCVENCTO*NPC)
   Else VCVENCTO=BlankNum()
        VCDIFERE=BlankNum()
EndIf

j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[NotaC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,(Len([NotaC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([NotaC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,Len([NotaC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,pos_s-j))
          j=pos_s+1
  EndIf

  End
  Down
  [Sequencia        ]=AlinhM(StrVal(i),2)
  If pos_s=0 And NPC=1 And NP>1
     Then [Numero de Dias   ]=BlankNum()
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day([NotaC->Data de Emissao])
                  MES_VECTO=Month([NotaC->Data de Emissao])
                  ANO_VECTO=Year([NotaC->Data de Emissao])
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12
                     Then MES_VECTO=1
                          ANO_VECTO=ANO_VECTO+1
                  EndIf
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+SubStr(StrVal(ANO_VECTO),3,2))
             Else [Numero de Dias   ]=NDIAS*i
                  [Data             ]=[NotaC->Data de Emissao]+(NDIAS*i)
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=[NotaC->Data de Emissao]+NDIAS
  EndIf
  If i<>NP
     Then [Valor            ]=VRVENCTO
          [Valor da Comissao]=VCVENCTO
     Else [Valor            ]=VRVENCTO+VRDIFERE
          [Valor da Comissao]=VCVENCTO+VCDIFERE
  EndIf
  [Forma de Pagamento]=[NotaC->Forma de Pagamento]

  If [Forma de Pagamento]="CT" Or
     [Forma de Pagamento]="CD"
     Then [Numero do Cartao]=Numero_Cartao
          [Nome do Cartao  ]=Nome_Cartao
  EndIf

  i=i+1
EndWhile

Switch
  Case SYS_CODIGO_CLIENTE="0222":
    SOMAVRF=0
    SOMAVRC=0

    Moveto "NotaV"
    Scan For Not IsBlank([Sequencia])

      SOMAVRF=SOMAVRF+[Valor da Comissao]-Int([Valor da Comissao])
      SOMAVRC=SOMAVRC+[Valor            ]-Int([Valor            ])

      [Valor da Comissao]=Int([Valor da Comissao])
      [Valor            ]=Int([Valor            ])

    EndScan

    Scan For Not IsBlank([Sequencia])

      [Valor da Comissao]=[Valor da Comissao]+SOMAVRF
      [Valor            ]=[Valor            ]+SOMAVRC
      QuitLoop

    EndScan

EndSwitch

Moveto "NotaC"

EndProc

;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS_ITENS()
Private i, ii, v, sq, j, NDIAS, NPC, pos_s, VREF, DCompDD, DTVENCTO,
        VRVENCTO, VRDIFERE, VCVENCTO, VCDIFERE

Aguarde("Gerando Vencimentos/Comissoes")
Moveto "NotaV"
Home
While Not RecordStatus("New")
  Del
EndWhile

If [NotaC->Tipo de Pagamento]="O"
   Then Moveto "NotaC"
        Return
EndIf

For i From 1 To 12
  Dt_Vencto[i]=BlankDate()
  Vr_Vencto[i]=BlankNum()
  ND_Vencto[i]=BlankNum()
  VC_Vencto[i]=BlankNum()
EndFor

Moveto "NotaI"
Scan
  DCompDD=[Composicao de Dias]
  NPC=1
  If Not IsBlank(DCompDD)
     Then i=1
          While True
            pos_s=SearchFrom("/",DCompDD,i)
            If pos_s=0
               Then QuitLoop
               Else NPC=NPC+1
                    i=pos_s+1
            EndIf
          EndWhile
  EndIf

  VREF=[Preco Total]-NDecimal(([Preco Total]*TXDESCTO_TOTAL)/100,2)
  VREF=VREF+[Valor do IPI]
  VRVENCTO=NDecimal((VREF/NPC),2)
  VRDIFERE=VREF-(VRVENCTO*NPC)

  If PARAM_COMIS_VENCTO="S"
     Then VREF=NDecimal((VREF*[Comissao do Item])/100,2)
          VCVENCTO=NDecimal((VREF/NPC),2)
          VCDIFERE=VREF-(VCVENCTO*NPC)
     Else VCVENCTO=BlankNum()
          VCDIFERE=BlankNum()
  EndIf

  j=1
  i=1
  While i<=NPC
    pos_s=SearchFrom("/",DCompDD,j)
    If pos_s=0
       Then If i>1
               Then NDIAS=NumVal(SubStr(DCompDD,j,(Len(DCompDD)-(j-1))))
               Else If Not IsBlank(DCompDD)
                       Then NDIAS=NumVal(SubStr(DCompDD,j,Len(DCompDD)))
                       Else NDIAS=0
                    EndIf
            EndIf
       Else NDIAS=NumVal(SubStr(DCompDD,j,pos_s-j))
            j=pos_s+1
    EndIf
    DTVENCTO=[NotaC->Data de Emissao]+NDIAS

    For v From 1 To 12
      If Dt_Vencto[v]=DTVENCTO Or
         IsBlank(Dt_Vencto[v])
         Then Dt_Vencto[v]=DTVENCTO
              If i<>NPC
                 Then Vr_Vencto[v]=Vr_Vencto[v]+VRVENCTO
                      VC_Vencto[v]=VC_Vencto[v]+VCVENCTO
                 Else Vr_Vencto[v]=Vr_Vencto[v]+VRVENCTO+VRDIFERE
                      VC_Vencto[v]=VC_Vencto[v]+VCVENCTO+VCDIFERE
              EndIf
              ND_Vencto[v]=NDIAS
              QuitLoop
      EndIf
    EndFor
    i=i+1
  EndWhile
EndScan

If [NotaC->Frete Incluso na Nota]="+"
   Then Vr_Vencto[1]=Vr_Vencto[1]+[NotaC->Valor do Frete]
EndIf
Vr_Vencto[1]=Vr_Vencto[1]+[NotaC->Valor do Seguro]+[NotaC->Valor Despesas Acessorias]

Nome_Cartao=""
sq=1
Moveto "NotaV"
For i From 1 To 12
  If IsBlank(Dt_Vencto[i]) Then Loop EndIf
  While True
    For v From 1 To 12
      If Not IsBlank(Dt_Vencto[v]) And
         Dt_Vencto[v]<=Dt_Vencto[i]
         Then ii=v
      EndIf
    EndFor
    End
    Down
    [Sequencia         ]=AlinhM(StrVal(sq),2)
    [Numero de Dias    ]=ND_Vencto[ii]
    [Data              ]=Dt_Vencto[ii]
    [Valor             ]=Vr_Vencto[ii]
    [Valor da Comissao ]=VC_Vencto[ii]
    [Forma de Pagamento]=[NotaC->Forma de Pagamento]

    sq=sq+1
    Dt_Vencto[ii]=BlankDate()
    If IsBlank(Dt_Vencto[i]) Then QuitLoop EndIf
  EndWhile
EndFor

Moveto "NotaC"
EndProc

;*******************************************************************************
;* Rotina para Checagem de Composicao de Dias                                  *
;*******************************************************************************
Proc Closed Checa_CompDias(Texto)
UseVars AutoLib, ErrorProc

Private Texto,Contador_Repeticao,ncc

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

;*******************************************************************************
;* Rotina para Tabela de Preco                                                 *
;*******************************************************************************
Proc Pega_Preco(OpcaoP)

Private OpcaoP, TABPR, CPGTO, Registro_Tab_Preco,
        Registro_TabPreco_CondPagto, PesqOk, CodItem,
        CodClie, CodRepr

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

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

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

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

    TX_DESCTO_CLIE=0
EndSwitch

CodItem=VSD_I_Codigo_Item
Moveto [Codigo do Item]
If Busca_Lookup("Codigo do Item",CodItem,"")
   Then If Not IsBlank(REG_BUSCA_LOOKUP["Codigo da Grade"])
           Then CodItem=PegaCodigoRaiz(CodItem)
        EndIf
        
        If SYS_CODIGO_CLIENTE="0239"
           Then CodItem=PegaCodigoRaiz(CodItem)
        EndIf

EndIf

ITEM_PROMOCIONAL="N"
PesqOk     =False

If PARAM_UTILIZA_TABPR_CLIENTE="S"
   Then Moveto [Lookup_TabPreco_Cliente]
        Ativa_Lookup()
        Moveto [Codigo da Tabela]
        Locate TABPR,CodClie,CodItem
        If RetVal
           Then PesqOk=True
           Else KeyPress "ESC"
        EndIf
EndIf


If PARAM_UTILIZA_TABPR_REPRES="S" AND Not PesqOk
   Then Moveto [Lookup_TabPreco_Repres]
        Ativa_Lookup()
        Moveto [Codigo da Tabela]
        Locate TABPR,CodRepr,CodItem
        If RetVal
           Then PesqOk=True
           Else KeyPress "ESC"
        EndIf
EndIf

If Not PesqOk
   Then Moveto [Lookup_TabPreco_Item]
        Ativa_Lookup()
        Moveto [Codigo da Tabela]
        Locate TABPR,CodItem
        If RetVal
           Then PesqOk=True
        EndIf
EndIf

If PesqOK
   Then CopyToArray Registro_TabPreco_Item
        ITEM_PROMOCIONAL=[Em Promocao]
        KeyPress "ESC"

        If OpcaoP="Checa"
           Then Return True
        EndIf

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

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

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

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

        EndIf
   Else KeyPress "ESC"
        [Preco Unitario       ]=BlankNum()
        [Preco Unitario Tabela]=BlankNum()
EndIf

VSD_I_Preco_Unitario=[Preco Unitario       ]
VSD_I_Preco_Tabela  =[Preco Unitario Tabela]
UnLockRecord
EndProc ;(Pega_Preco)

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

Private TCOM, COM_NF, DIFER, TOT_VECTOS

If [NotaC->Tipo de Pagamento]="O"
   Then Moveto "NotaC"
        Return
EndIf
Aguarde("Rateio Comissoes/Vencimentos")

COM_NF=NDecimal(([NotaC->Valor Nota Fiscal]*[NotaC->Comissao do Representante])/100,2)
TCOM  =0

Moveto "NotaV"
Moveto [Valor]
TOT_VECTOS=ImageCSum()
If TOT_VECTOS>0
   Then Scan
          [Valor da Comissao]=NDecimal(([Valor]*[NotaC->Comissao do Representante])/100,2)
          TCOM=TCOM+[Valor da Comissao]
        EndScan

        DIFER=COM_NF-TCOM
        [Valor da Comissao]=[Valor da Comissao]+DIFER
        UnLockRecord
EndIf

Moveto "NotaC"
EndProc

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

If INICIO_DIALOG
   Then INICIO_DIALOG=False
EndIf      

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

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

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

                    echo Normal
                    echo off

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

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

           If Pode_Gravar
              Then Ler_Gravar_Cheque("Gravar")
                   CancelDialog
           EndIf
       Case Evento["KeyCode"] = -6:
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf
      Case Evento["KeyCode"] = 27:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso" : CancelDialog
                  [Frete Incluso na Nota ]=OLD_Frete_Incluso
                  [Aliquota BCFrete Nota ]=OLD_ABC_Frete
                  [Valor do Frete        ]=OLD_Frete
                  [Aliquota BCICMS Frete ]=OLD_ABCICMS_Frete
                  [Aliquota de ICMS Frete]=OLD_AICMS_Frete
                  [CFO Frete             ]=OLD_CFO_FRETE
             Case Campo="ABC_Frete"     : Campo="Frete_Incluso"
             Case Campo="Valor_Frete"   : Campo="ABC_Frete"
             Case Campo="AICMS_Frete"   : Campo="Valor_Frete"
             Case Campo="ABCICMS_Frete" : Campo="AICMS_Frete"
             Case Campo="CFO_Frete"     : Campo="ABCICMS_Frete"
             Case Campo="I_Flag"        : Campo="CFO_Frete"
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto"      : CancelDialog
             Case Campo="Descto"        : Campo="A_Descto"
           EndSwitch
      ;;;***** Cheque ****
           Switch
             Case Campo="CBanco"        : CancelDialog
             Case Campo="Agencia"       : Campo="CBanco"
             Case Campo="CCorrente"     : Campo="Agencia"
             Case Campo="NCheque"       : Campo="CCorrente"
             Case Campo="TipoEmit"      : Campo="NCheque"
             Case Campo="CPF"           : Campo="TipoEmit"
             Case Campo="Nome"          : Campo="CPF"
             Case Campo="Cidade"        : Campo="Nome"
             Case Campo="UF"            : Campo="Cidade"
             Case Campo="DataV"         : Campo="UF"
             Case Campo="Valor"         : Campo="DataV"
             Case Campo="Obs"           : Campo="Valor"
           EndSwitch
      ;;;***** Cartao ****
           Switch
             Case Campo="NCartao"       : CancelDialog
             Case Campo="NomeCartao"    : Campo="NCartao"
           EndSwitch
      ;;;***** Ordem de Compra P£blica **
           Switch
             Case Campo="TG_OCPEMPENHO"  : CancelDialog
             Case Campo="TG_OCPPEDIDO"   : Campo="TG_OCPEMPENHO"
             Case Campo="TG_OCPCONTRATO" : Campo="TG_OCPPEDIDO"
           EndSwitch           
      ;;;***** Obs    ****
           Switch
             Case Campo="OBS"           : CancelDialog
           EndSwitch
      ;;;***** Cupom   ****
           Switch
             Case Campo="CUPOM"         : CancelDialog
           EndSwitch
      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
                  Campo="ABC_Frete"
             Case Campo="ABC_Frete":
                  VSD_ABC_Frete=ControlValue("ABC_Frete")
                  If VSD_ABC_Frete>0
                     Then VSD_Frete=Round((VRNF*VSD_ABC_Frete)/100,2)
                          If VSD_Frete<VRMINIMO_FRETE
                             Then VSD_FRETE=VRMINIMO_FRETE
                          EndIf
                     Else VSD_ABC_Frete=BlankNum()
                  EndIf
                  Campo="Valor_Frete"
             Case Campo="Valor_Frete":
                  VSD_Frete=ControlValue("Valor_Frete")
                  If Not VSD_Frete>0
                     Then [Frete Incluso na Nota ]=":"
                          [Aliquota BCFrete Nota ]=BlankNum()
                          [Valor do Frete        ]=BlankNum()
                          [Aliquota BCICMS Frete ]=BlankNum()
                          [Aliquota de ICMS Frete]=BlankNum()
                          [CFO Frete             ]=""

                          Campo="I_Flag"
                     Else If VSD_Frete_Incluso="S"
                             Then If VSD_Frete_Incluso="S"
                                     Then [Frete Incluso na Nota ]="+"
                                     Else [Frete Incluso na Nota ]=":"
                                  EndIf
                                  [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                                  [Valor do Frete        ]=VSD_Frete
                                  [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                                  [CFO Frete             ]=VSD_CFO_Frete
                                  Campo="AICMS_Frete"
                             Else Campo="AICMS_Frete"
                          EndIf
                  EndIf
             Case Campo="AICMS_Frete":
                  VSD_AICMS_Frete=ControlValue("AICMS_Frete")
                  If Not IsBlank(VSD_AICMS_Frete) Or VSD_Frete<=0
                     Then Campo="ABCICMS_Frete"
                  EndIf
             Case Campo="ABCICMS_Frete":
                  VSD_ABCICMS_Frete=ControlValue("ABCICMS_Frete")
                  Campo="CFO_Frete"
             Case Campo="CFO_Frete":
                  VSD_CFO_Frete=ControlValue("CFO_Frete")
                  If Not IsBlank(VSD_CFO_Frete) And VSD_Frete>0
                     Then Moveto [CFO Frete]
                          If Busca_Lookup("Codigo Fiscal de Operacao",VSD_CFO_Frete,"CFO Inv lido")
                            Then If VSD_Frete_Incluso="S"
                                    Then [Frete Incluso na Nota ]="+"     
                                    Else [Frete Incluso na Nota ]=":"
                                 EndIf
                            [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                            [Valor do Frete        ]=VSD_Frete
                            [Aliquota BCICMS Frete ]=VSD_ABCICMS_Frete
                            [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                            [CFO Frete             ]=VSD_CFO_Frete
                          
                            Campo="I_Flag"
                          EndIF  
                  EndIf
             Case Campo="I_Flag":
                  CancelDialog
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto":
                  VSD_A_Descto=ControlValue("A_Descto")
                  If VSD_A_Descto>0
                     Then VSD_Descto=BlankNum()
                          [Taxa de Desconto ]=VSD_A_Descto
                          [Valor do Desconto]=VSD_Descto

                          CancelDialog
                     Else VSD_A_Descto=BlankNum()
                          Campo="Descto"
                  EndIf
             Case Campo="Descto":
                  VSD_Descto=ControlValue("Descto")

                  [Taxa de Desconto ]=VSD_A_Descto
                  [Valor do Desconto]=VSD_Descto

                  CancelDialog
           EndSwitch

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

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


      ;;;***** Cartao ****
           Switch
             Case Campo="NCartao":
                  VSD_NCartao=ControlValue("NCartao")
                  Campo="NomeCartao"
             Case Campo="NomeCartao":
                  VSD_NomeCartao=ControlValue("NomeCartao")
                  If Not IsBlank(VSD_NomeCartao)
                     Then Moveto [Nome do Cartao]
                          Ativa_Lookup()
                          Moveto [Nome do Cartao]
                          Locate VSD_NomeCartao
                          If RetVal
                             Then KeyPress "ESC"
                                  Moveto "NotaV"
                                  [Numero do Cartao    ]=VSD_NCartao
                                  [Nome do Cartao      ]=VSD_NomeCartao
                                  Numero_Cartao         =VSD_NCartao
                                  Nome_Cartao           =VSD_NomeCartao
                                  CancelDialog
                             Else Mensagem("Cart„o n„o Cadastrado !")
                                  VSD_NomeCartao=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
           EndSwitch
      ;** Ordem de Compra P£blica **        
           Switch
             Case Campo="TG_OCPEMPENHO" : Campo="TG_OCPPEDIDO"
                  VSDGOCPEMPENHO=ControlValue("TG_OCPEMPENHO")
             Case Campo="TG_OCPPEDIDO"  : Campo="TG_OCPCONTRATO"
                  VSDGOCPPEDIDO=ControlValue("TG_OCPPEDIDO") 
             Case Campo="TG_OCPCONTRATO": AcceptDialog
                  VSDGOCPCONTRATO=ControlValue("TG_OCPCONTRATO")
           EndSwitch    

      ;;;***** OBS    ****
           Switch
             Case Campo="OBS":
                  VSD_OBS=ControlValue("OBS")
                  [Observacao          ]=VSD_OBS
                  CancelDialog
           EndSwitch
   EndSwitch
EndIf

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

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

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

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

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

ncampo=Field()

INICIO_DIALOG=True
OP_SHOWD="Frete"

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

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

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

VSD_Flag         =""
Echo Normal
Echo Off

Showdialog "Calculo do Frete" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 09,09 height 06 width 61

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

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

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

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

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

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

   Label  @ 2,34 "%Red.BCICMS" for "ABCICMS_Frete"
   Accept @ 3,36 Width 10 "N" picture "#*#.[###]" Tag "ABCICMS_Frete" to VSD_ABCICMS_Frete

   Label  @ 2,46 "CFOP" for "CFO_Frete"
   Accept @ 3,47 Width 7 "A4" picture "####" Tag "CFO_Frete" to VSD_CFO_Frete

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

Enddialog
Mouse Show
Moveto Field ncampo
EndProc    ;  (Digita_Frete)

;*******************************************************************************
;* Digitacao dos Dados do Desconto                                             *
;*******************************************************************************
Proc Digita_Descto()
INICIO_DIALOG=True
OP_SHOWD="Desconto"

VSD_A_Descto   =[Taxa de Desconto ]
VSD_Descto     =[Valor do Desconto]

Showdialog "Calculo do Desconto" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 12,20 height 04 width 32


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

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

Enddialog
Mouse Show
EndProc

;*******************************************************************************
;* Digitacao de Cheques                                                        *
;*******************************************************************************
Proc Digita_Cheque()
INICIO_DIALOG=True
OP_SHOWD="Cheque"
Echo Normal
Echo Off

Moveto "NotaV"
Ler_Gravar_Cheque("Ler")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Enddialog
Mouse Show
EndProc  ; (Digita_Cheque)

;*******************************************************************************
;* Digitacao de Cartao                                                         *
;*******************************************************************************
Proc Digita_Cartao()
INICIO_DIALOG=True
OP_SHOWD="Cartao"

Moveto "NotaV"
VSD_NCartao   =[Numero do Cartao    ]
VSD_NomeCartao=[Nome do Cartao      ]

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


   Label  @ 0,00 "N§ Cartao" for "NCartao"
   Accept @ 1,01  Width 22 "A19" picture "####.####.####.####" Tag "NCartao" to VSD_NCartao

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

Enddialog
Mouse Show
EndProc

;*******************************************************************************
;* Digitacao de Observacao                                                     *
;*******************************************************************************
Proc Digita_Obs()
INICIO_DIALOG=True
OP_SHOWD="Observacao"

Moveto "NotaV"
VSD_OBS       =[Observacao          ]

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

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

Enddialog
Mouse Show
EndProc

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

;*******************************************************************************
;* Rotina para Digitacao de Vencimentos                                        *
;*******************************************************************************
Proc ChaveV()
While True
  Moveto [Sequencia]
  End
  SEQ = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(SEQ,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While True

        TECLA= " Esc=Retornar  F7=Paginar  F9=Limpa_Venctos"

        Prompt TECLA

        Wait Field
             Until "ESC","ENTER","F7","HOME","UP","PGUP","F9"

        Switch
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               PAGINA("NotaV","MR")
               If EDITAR="S"
                  Then CHAVEV=0
                       SEQ=[Sequencia]
                       Controla_EdicaoV()
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then Del
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="F9":
             Home
             While Not RecordStatus("New")
               Del
             EndWhile
             QuitLoop
        Case Retval="ESC":
             CHAVEV=9
             Del
             Return
        Case Retval="ENTER":
             If Not Seta_Sequencia(SEQ,True)
                Then Del
                     QuitLoop
             EndIf
             SEQ=[]
             Del
             Locate SEQ
             If Retval
                Then CHAVEV=0
                Else CHAVEV=1
                     End Down
                     [Sequencia]=SEQ
                     UnLockRecord
                     Locate SEQ
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc   ;  (ChaveV)

;*******************************************************************************
;* Rotina para Digitacao dos Vencimentos                                       *
;*******************************************************************************
Proc DigitaV()
If CHAVEV=1
   Then Moveto [Numero de Dias   ]
   Else Moveto [Forma de Pagamento]
EndIf
FPAGTO=[Forma de Pagamento]
While True

  TECLA= " Esc=Retornar  "
  If Field()="Forma de Pagamento"
     Then TECLA=TECLA+"F1=Tabelas  "
  EndIf
  If CHAVEV=0
     Then TECLA=TECLA+"Del=Excluir  "
  EndIf

  Prompt TECLA

  Wait Field
       Message Field()
       Until "ESC","ENTER","DEL","F1"

  Switch
  Case RetVal="F1":
       If Field()="Forma de Pagamento"
          Then CONSULTAF1()
       EndIf
  Case RetVal="ESC":
       If Field()="Numero de Dias"
          Then If QuerDesfazer("")
                  Then If CHAVEV=1
                          Then Del
                       EndIf
                       QuitLoop
               Endif
          Else Left
       EndIf
  Case RetVal="DEL":
       Confirma()
       If OK="S"
          Then Del
               QuitLoop
       EndIf
  Case RetVal="ENTER":
    Switch
       Case Field()="Numero de Dias":
            If Not IsBlank([]) Or []>0
               Then ND=[]
                    Right
                    []=[NotaC->Data de Emissao]+ND
               Else Right
            EndIf
       Case Field()="Forma de Pagamento":
            If []<>FPAGTO And Not IsBlank(FPAGTO)
               Then Mensagem("Para mudar forma de Pagto exclua e inclua novamente este Vencimento Ok !")
                    Loop
            EndIf
            FPAGTO=[]
            If []="CH" or []="CP"
               Then Digita_Cheque()
               Else CHAVEV=4
                    If []="CT" Or []="CD"
                       Then Digita_Cartao()
                       Else Digita_Obs()
                    EndIf
            EndIf
            QuitLoop
       OtherWise:
            Right
    EndSwitch
  EndSwitch
EndWhile
EndProc    ; (DigitaV)

;*******************************************************************************
;* Atualiza Demais Dados                                                       *
;*******************************************************************************
Proc Atua_Dados()

Moveto "NotaC"
UnLockRecord
KeyPress "F7"

Moveto "NotaI"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa  ],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento ]
If RetVal
   Then While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
              [Numero do Documento]=[NotaC->Numero do Documento] And
              [Serie do Documento ]=[NotaC->Serie do Documento ]
              
          If [NotaC->Tipo Movimento Estoque]="S"
             Then While True
                    Moveto "\\Sistemas\\Estoque\\EstqPrm"
                    Moveto [Codigo da Empresa]
                    Locate [NotaC->Codigo da Empresa],
                           [NotaI->Codigo do Item]
                    If Not RetVal
                       Then End Down
                            [Codigo da Empresa   ]=[NotaC->Codigo da Empresa]
                            [Codigo do Item      ]=[NotaI->Codigo do Item   ]
                            If IsLockRecord()
                               Then Del
                               Else QuitLoop
                            EndIf
                       Else If Not IsLockRecord()
                               Then QuitLoop
                            EndIf
                    EndIf        
                  EndWhile
                  If Not IsBlank([NotaC->Data de Saida])
                     Then If [NotaC->Data de Saida]>[Data da Ultima Saida]
                             Then [Data da Ultima Saida]=[NotaC->Data de Saida]
                           EndIf
                     Else If [NotaC->Data de Emissao]>[Data da Ultima Saida]
                             Then [Data da Ultima Saida]=[NotaC->Data de Emissao]
                           EndIf
                  EndIf
                  UnLockRecord
          EndIf

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

Moveto "NotaC"
;*********** Atualiza Ficha Financeira do Cliente ***********
If [NotaC->Tipo]="C" And
   [NotaC->Tipo Movimento Estoque]="S" And
   ( (Search("VEND",[NotaC->Descricao da Destinacao])>0) Or
     (Search("SERV",[NotaC->Descricao da Destinacao])>0) )
   Then Moveto "\\Sistemas\\Cadastro\\FichaCli"
        Moveto [Codigo]
        Locate [NotaC->Codigo]
        If Not RetVal
           Then End Down
                [Codigo                  ]=[NotaC->Codigo]
                [Data da Primeira Compra ]=[NotaC->Data de Emissao]
                [Valor da Primeira Compra]=[NotaC->Valor Nota Fiscal]
        EndIf
        If IsBlank([Data da Primeira Compra ])
           Then [Data da Primeira Compra ]=[NotaC->Data de Emissao  ]
                [Valor da Primeira Compra]=[NotaC->Valor Nota Fiscal]
        EndIf
        If [NotaC->Valor Nota Fiscal]>=[Maior Fatura]
           Then [Maior Fatura        ]=[NotaC->Valor Nota Fiscal]
                [Data da Maior Fatura]=[NotaC->Data de Emissao  ]
        EndIf
        If [Data da Ultima Compra ]<=[NotaC->Data de Emissao  ]
           Then [Data da Ultima Compra ]=[NotaC->Data de Emissao  ]
                [Valor da Ultima Compra]=[NotaC->Valor Nota Fiscal]
        EndIf
        UnLockRecord
EndIf
Moveto "NotaC"
NLANCTO_CHEQUE         = [NotaC->Numero Lancamento Cheque]
If PARAM_CHEQUES       = "S" Then CHEQUES()        EndIf
;;;If PARAM_CONSIGNACAO   = "S" Then CONSIGNACAO()    EndIf
If PARAM_TRANSFERENCIA = "S" Then TRANSFERENCIA()  EndIf

;******** Rotina Caixa/Banco e Duplicatas **************************************
APLIC_ORIGEM="NOTA"
OP_MOVCX    ="ATUALIZAR"
OP_MOVDP    ="ATUALIZAR"
CANCELA_DUP =False
If [NotaC->Tipo Movimento Estoque]="S" And DP_GERA_DUPLICATA="S" 
   Then EMPRESAFISC=[NotaC->Codigo da Empresa  ]
        NOTAFISC   =[NotaC->Numero do Documento]
        SERIEFISC  =[NotaC->Serie do Documento ]

        Estorno_DPCR_Ok=True

        DP_NUMERO_GERADO=""
        CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
        If PARAM_AVISTAAUTOMAT="S"
           Then OP_MOVCX="ESTORNAR"
                Play("FT_CAIXA")
        EndIf
        If PARAM_APRAZOAUTOMAT="S"
           Then If PARAM_AVISTADUPLIC="S"
                   Then OP_MOVCX="ESTORNAR"
                        Play("FT_CAIXA")
                EndIf
                OP_MOVDP="ESTORNAR"
                Play("FT_DUPLI")
        EndIf
        OP_MOVCX="ATUALIZAR"
        OP_MOVDP="ATUALIZAR"

        Switch
          Case [NotaC->Tipo de Pagamento]="V":
               Switch
                 Case PARAM_AVISTAAUTOMAT="S" And
                      ([NotaC->Forma de Pagamento]<>"CD" And
                       [NotaC->Forma de Pagamento]<>"CT"):
                      CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                      CX_VRLANC     =[NotaC->Valor Nota Fiscal]
                      If Verifica_Caixa()
                         Then Play("FT_CAIXA")
                      EndIf
                 Case (PARAM_APRAZOAUTOMAT="S" And PARAM_AVISTADUPLIC="S") Or
                      (PARAM_AVISTAAUTOMAT="S" And
                       ([NotaC->Forma de Pagamento]="CD" Or
                        [NotaC->Forma de Pagamento]="CT")):
                      CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                      If Estorno_DPCR_Ok
                         Then Play("FT_DUPLI")
                      EndIf
               EndSwitch
          Case [NotaC->Tipo de Pagamento]="P":
               If PARAM_AVISTAAUTOMAT="S"
                  Then Moveto "NotaV"
                       Moveto [Numero do Documento]
                       Locate [NotaC->Numero do Documento]
                       If RetVal
                          Then While [Numero do Documento]=[NotaC->Numero do Documento]
                                 If [Data]=[NotaC->Data de Emissao]
                                    Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                                         CX_VRLANC     =[Valor]
                                         If Verifica_Caixa()
                                            Then Play("FT_CAIXA")
                                         EndIf
                                 EndIf
                                 Moveto "NotaV"
                                 Skip
                                 If EOT() Then QuitLoop EndIf
                               EndWhile
                       EndIf
               EndIf
               If PARAM_APRAZOAUTOMAT="S"
                  Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                       If Estorno_DPCR_Ok
                          Then Play("FT_DUPLI")
                       EndIf
               EndIf
        EndSwitch
EndIf

Moveto "NotaC"
UnLockRecord
KeyPress "F7"
EndProc     ; (Atua_Dados)

;*******************************************************************************
;* Rotina Atualizacao do Estoque (Inclusao, Alteracao e Exclusao)             **
;*******************************************************************************
Proc Estoque()
CUSTO=BlankNum()
If [NotaC->Atualiza Estoque]<>"S" Or
   IsBlank([NotaI->Codigo do Item]) Or
   [NotaI->Tipo do Item]="C" Or [NotaI->Tipo do Item]="D" Or [NotaI->Tipo do Item]="F" Or
   [NotaI->Tipo do Item]="G" Or [NotaI->Tipo do Item]="H" Or [NotaI->Tipo do Item]="I"
   Then Return
EndIf

If Not IsBlank([NotaC->Data de Saida])
   Then MES_EST = AlinhM(StrVal(Month([NotaC->Data de Saida])),2)
        ANO_EST = StrVal(Year([NotaC->Data de Saida]))
   Else MES_EST = AlinhM(StrVal(Month([NotaC->Data de Emissao])),2)
        ANO_EST = StrVal(Year([NotaC->Data de Emissao]))
EndIf

While True
  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Locate [NotaC->Codigo da Empresa],
         [NotaI->Codigo do Item   ], ANO_EST, MES_EST
  If Not RetVal
     Then If CHAVEI<>8
             Then If Not Cria_Ficha([NotaC->Codigo da Empresa],[NotaI->Codigo do Item],False)
                     Then Moveto "NotaI"
                          Return False
                  EndIf
             Else Moveto "NotaI"
                  Return False
          EndIf
  EndIf

  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile

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

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


If PARAM_PECAS_ITEM="S" And 
   [NotaI->Tipo do Item]="T" And 
   [NotaC->Tipo Movimento Estoque]="E" And  
   Search("DEVOL",[NotaC->Descricao da Destinacao])>0
   Then While True
         Moveto "\\Sistemas\\Estoque\\PecasSD"
         Moveto [Codigo da Empresa]
         Locate [NotaC->Codigo da Empresa], [NotaI->Codigo do Item], 0, ANO_EST, MES_EST
         If RetVal
            Then If IsLockRecord()
                    Then Loop
                 EndIf

                 Switch
                   Case CHAVEI=8:
                        [Saldo Atual      ]=NDecimal([Saldo Atual]-[NotaI->Quantidade],3)
                   OtherWise    :
                        If CHAVEI=1
                           Then [Saldo Atual      ]=NDecimal([Saldo Atual]+[NotaI->Quantidade],3)
                           Else [Saldo Atual      ]=NDecimal(([Saldo Atual]-(QUANT))+[NotaI->Quantidade],3)
                        EndIf   

                        If Not IsBlank([NotaC->Data de Saida])
                           Then If [NotaC->Data de Saida]>[Ultima_Entrada]
                                   Then [Ultima_Entrada]=[NotaC->Data de Saida]
                                 EndIf
                           Else If [NotaC->Data de Emissao]>[Ultima_Entrada]
                                   Then [Ultima_Entrada]=[NotaC->Data de Emissao]
                                 EndIf
                        EndIf
                 EndSwitch
                 UnLockRecord
                 QuitLoop
            Else Cria_Ficha2([NotaC->Codigo da Empresa],[NotaI->Codigo do Item],False)
         EndIf
        EndWhile
EndIf


Moveto "NotaI"
[Custo Medio Unitario]=CUSTO
EndProc  ; (Estoque)

;*******************************************************************************
;* Rotina p/ Checagem de Estoque Negativo                                     **
;*******************************************************************************
Proc Checa_Estoque()
Private NOVOSALDO

If [NotaC->Atualiza Estoque]<>"S" Or
   [NotaC->Tipo Movimento Estoque]="E" Or
   IsBlank([NotaI->Codigo do Item]) Or
   [NotaI->Tipo do Item]="C" Or [NotaI->Tipo do Item]="D" Or [NotaI->Tipo do Item]="F" Or
   [NotaI->Tipo do Item]="G" Or [NotaI->Tipo do Item]="H" Or [NotaI->Tipo do Item]="I"
   Then Moveto "NotaI"
        Return True
EndIf

If Not IsBlank([NotaC->Data de Saida])
   Then MES_EST = AlinhM(StrVal(Month([NotaC->Data de Saida])),2)
        ANO_EST = StrVal(Year([NotaC->Data de Saida]))
   Else MES_EST = AlinhM(StrVal(Month([NotaC->Data de Emissao])),2)
        ANO_EST = StrVal(Year([NotaC->Data de Emissao]))
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
Locate [NotaC->Codigo da Empresa],
       [NotaI->Codigo do Item   ], ANO_EST, MES_EST
If Not RetVal
   Then If Not Cria_Ficha([NotaC->Codigo da Empresa],[NotaI->Codigo do Item],False)
           Then Moveto "NotaI"
                Return False
        EndIf
EndIf

NOVOSALDO=-1
Switch
  Case CHAVEI=1:
       NOVOSALDO=NDecimal([Saldo Atual]-[NotaI->Quantidade],3)
  Case CHAVEI=0:
       NOVOSALDO=NDecimal((([Saldo Atual]+QUANT)-[NotaI->Quantidade]),3)
EndSwitch
VSD_I_Custo_Unitario=NDecimal(([Custo Total Atual]/[Saldo Atual]),5)
If VSD_I_Custo_Unitario=0 Or IsBlank(VSD_I_Custo_Unitario)
   Then VSD_I_Custo_Unitario=[Ultimo Custo Atual]
EndIf

Moveto "NotaI"
If NOVOSALDO>=0
   Then Return True
   Else Mensagem("Estoque Insuficiente em "+StrVal(Format("W11.3,EIC",NOVOSALDO))+", Verificar !")
        If PARAM_BLOQUEIA_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf
EndProc   ; (Checa_Estoque)

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Closed Cria_Ficha(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
UseVars AutoLib, ErrorProc

Private ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_CONFIRMA, ESTQ_ANO, ESTQ_MES, MSG

If Not IsBlank([NotaC->Data de Saida])
   Then ESTQ_MES = AlinhM(StrVal(Month([NotaC->Data de Saida])),2)
        ESTQ_ANO = StrVal(Year([NotaC->Data de Saida]))
   Else ESTQ_MES = AlinhM(StrVal(Month([NotaC->Data de Emissao])),2)
        ESTQ_ANO = StrVal(Year([NotaC->Data de Emissao]))
EndIf

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

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

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Closed Cria_Ficha2(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
UseVars AutoLib, ErrorProc

Private ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA,ESTQ_ANO,ESTQ_MES

If Not IsBlank([NotaC->Data de Saida])
   Then ESTQ_MES = AlinhM(StrVal(Month([NotaC->Data de Saida])),2)
        ESTQ_ANO = StrVal(Year([NotaC->Data de Saida]))
   Else ESTQ_MES = AlinhM(StrVal(Month([NotaC->Data de Emissao])),2)
        ESTQ_ANO = StrVal(Year([NotaC->Data de Emissao]))
EndIf

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
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc Exclusao_C()
MSG="A exclus„o desta Nota Fiscal n„o estorna os //"
MSG=MSG+"poss¡veis lan‡amentos gerados no //"
MSG=MSG+"Contas a Receber ou no Caixa ! // //"
MSG=MSG+"Se necess rio o estorno, o fa‡a manualmente ! // //"
MSG=MSG+"Confirma a Exclus„o desta Nota Fiscal ?"
ConfGeral(MSG)
If OK<>"S"
   Then Return False
EndIf

DESTIN_ATUALIZA_PEDIDOS=""
Moveto [Codigo da Destinacao]
If Busca_Lookup("Codigo da Destinacao",[NotaC->Codigo da Destinacao],"")
   Then DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]
EndIf

Moveto "NotaI"
While RecordStatus("New")=False
  EXCLUSAO_I()
EndWhile
Moveto "NotaV"
While RecordStatus("New")=False
  Del
EndWhile

Moveto "NotaC"
[Numero Pedido_Orcamento]=""
NLANCTO_CHEQUE=[Numero Lancamento Cheque]
UnLockRecord
KeyPress "F7"

Moveto "NotaIDV"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento]
While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
      [Numero do Documento]=[NotaC->Numero do Documento] And
      [Serie do Documento ]=[NotaC->Serie do Documento ]
      Del
      If EOT() Then QuitLoop EndIf
EndWhile

Moveto "NotaOCP"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa], [NotaC->Numero do Documento], [NotaC->Serie do Documento]
If RetVal 
   Then Del
EndIf

Estorna_Cupom("Exclusao")

Moveto "NotaC"
CHAVEC=8
CHEQUES()
;;CONSIGNACAO()
TRANSFERENCIA()
TROCA()

Moveto "NotaC"
KeyPress "F7"
Del

Return True
EndProc    ;  (Exclusao_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc Exclusao_I()
CHAVEI=8
ESTOQUE()
ATUA_PEDIDO_ORCAMENTO()

Moveto "NotaI"
SEQIT=[Item do Documento]

;----- Brasil Textil ---------------------------------------------------------------------

If SYS_CODIGO_CLIENTE="0239" And
	[NotaC->Tipo Movimento Estoque]="S" And
	[NotaI->Valor IPI por Unidade]>0 And
	[NotaC->Codigo da Empresa]="0002"
  Then 
	
       Moveto "NotaC"
       UnLockRecord
       KeyPress "F7"

       Moveto "NotaI"
       Moveto [Codigo da Empresa]
       Locate EMPRESA,NUMDOC,SERIE,SEQIT
	
	     NLANCPC=Int([NotaI->Valor IPI por Unidade])
       Moveto "\\Sistemas\\Estoque\\PecasMov"
       Moveto [Numero do Lancamento]
       Locate NLANCPC
       If Not RetVal
          Then Mensagem("Lan‡amento de etiqueta n„o encontrado !")
          Else If [\Sistemas\Estoque\PecasMov->Codigo do Item]<>[NotaI->Codigo do Item] or
					        [\Sistemas\Estoque\PecasMov->Quantidade    ]<>[NotaI->Quantidade]
					        Then Mensagem("Lan‡amento encontrado n„o confere com dados da etiqueta !")
	  			  			Else [Sistema Destino  ]=""
	  			  			     [Documento Destino]=""
        					     UnLockRecord
			         EndIf
	     EndIf
	     
	     Moveto "NotaC"
       KeyPress "F7"

       Moveto "NotaI"
       Moveto [Item do Documento]
       Locate EMPRESA,NUMDOC,SERIE,SEQIT

EndIf
;-----------------------------------------------------------------------------------------

If PARAM_RATEIO_COMISSAO="I"
   Then Excluir_Rateio_Comissao()
EndIf

If Not NF_Cancelada
   Then Del
EndIf

APLIC_ORIGEM="NOTA"
Play "FT_IMP"

EndProc     ;  (Exclusao_I)

;*******************************************************************************
;* Checa Caixa                                                                 *
;*******************************************************************************
Proc Closed Verifica_Caixa()
UseVars AutoLib, ErrorProc, CX_CONTA_CAIXA

Private CX_GRAVA

CX_GRAVA=True

Moveto "P_Fatura"
While True
  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile

Moveto [Codigo_Conta_Caixa]
Ativa_Lookup()
Moveto [Codigo da Conta]
Locate CX_CONTA_CAIXA
If Not Retval
   Then MENSAGEM("Conta Caixa n„o Cadastrada!")
        CX_GRAVA=False
EndIf
KeyPress "ESC"
UnLockRecord

Moveto "NotaC"

Return CX_GRAVA
EndProc

;*******************************************************************************
;* Atualizacao Troca                                                           *
;*******************************************************************************
Proc Closed Estorna_Cupom(Tipo)
Private AutoLib, ErrorProc, Tipo, CEMPRE, NDOCTO, SDOCTO

CEMPRE=[NotaC->Codigo da Empresa  ]
NDOCTO=[NotaC->Numero do Documento]
SDOCTO=[NotaC->Serie do Documento ]

Moveto "NotaCF"
If Recno()>0
   Then Moveto [Codigo da Empresa]
        Locate CEMPRE,NDOCTO,SDOCTO
        While [Codigo da Empresa  ]=CEMPRE And
             [Numero do Documento]=NDOCTO And
             [Serie do Documento ]=SDOCTO

             Moveto "NotaC"
             Moveto [Codigo da Empresa]
             Locate [NotaCF->CF_Codigo da Empresa  ],
                    [NotaCF->CF_Numero do Documento],
                    [NotaCF->CF_Serie do Documento ]
             If RetVal
                Then [Cupom Fiscal Faturado]=""
                     UnLockRecord
             EndIf

             Moveto "NotaCF"
             If Tipo="Exclusao"
                Then Del
                Else Skip
             EndIf
             If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

Moveto "NotaC"
Moveto [Codigo da Empresa]
Locate CEMPRE,NDOCTO,SDOCTO
EndProc

;*******************************************************************************
;* Atualiza Quantidade Faturada do Pedido ou Orcamento                         *
;*******************************************************************************
Proc ATUA_PEDIDO_ORCAMENTO()
If (PARAM_ORCAMENTO="S") Or
   (PARAM_PEDIDO   ="S" And DESTIN_ATUALIZA_PEDIDOS="S")
   Then If Not IsBlank([NotaI->Numero Pedido_Orcamento]) And
           Not IsBlank([NotaI->Item Pedido_Orcamento])
           Then Moveto "NotaC"
                [Numero Pedido_Orcamento]=[NotaI->Numero Pedido_Orcamento]
                If PARAM_PEDIDO="S"
                   Then Moveto "PedidoI"
                        Moveto [Item do Pedido]
                   Else Moveto "OrcaI"
                        Moveto [Item do Orcamento]
                EndIf
                Locate [NotaI->Item Pedido_Orcamento]
                If RetVal
                   Then If CHAVEI<>8
                           Then [Quantidade Faturada]=([Quantidade Faturada]-QUANT)+[NotaI->Quantidade]
                                UnLockRecord
                           Else If [Quantidade Faturada]>0
													         Then [Quantidade Faturada]=[Quantidade Faturada]-[NotaI->Quantidade]
                                        UnLockRecord
                                EndIf        
                        EndIf
                        ATUA_SITUACAO_PEDIDO_ORCAMENTO()
                EndIf
        EndIf
EndIf
EndProc   ; (Atua_Pedido_Orcamento)

;*******************************************************************************
;* Atualiza Situacao do Pedido ou Orcamento                                    *
;*******************************************************************************
Proc Closed ATUA_SITUACAO_PEDIDO_ORCAMENTO()
UseVars AutoLib, ErrorProc, PARAM_PEDIDO

Private WC_NUMPED, WC_PEDFAT

WC_NUMPED=0
WC_PEDFAT=0
Scan
  WC_NUMPED=WC_NUMPED+1
  If [Quantidade Faturada]>0
     Then If ([Quantidade]-[Quantidade Faturada])<=0
				     Then WC_PEDFAT=WC_PEDFAT+1
				  EndIf
  EndIf
EndScan
If WC_NUMPED>0
   Then If PARAM_PEDIDO="S"
           Then Moveto "PedidoC"
                If WC_NUMPED=WC_PEDFAT
                   Then [Situacao do Pedido   ]="FATURADO"
                   Else [Situacao do Pedido   ]="ABERTO"
                EndIf
           Else Moveto "OrcaC"
                If WC_NUMPED=WC_PEDFAT
                   Then [Situacao do Orcamento]="FATURADO"
                   Else [Situacao do Orcamento]="ABERTO"
                EndIf
        EndIf
        UnLockRecord
        SaveTables
EndIf
EndProc    ;  (Atua_Situacao_Pedido_Orcamento)

;*******************************************************************************
;* Atualizacao de Cheques                                                      *
;*******************************************************************************
Proc Closed CHEQUES()
UseVars AutoLib, ErrorProc, NLANCTO_CHEQUE, PARAM_NLCHQ_IGUAL_NF, CHAVEC

Private NUMEROL, GERAR_CHEQUE, EXISTE_CHEQUE_LIQUIDADO, MSG

EXISTE_CHEQUE_LIQUIDADO=False
If Not IsBlank(NLANCTO_CHEQUE)
   Then Moveto "\\Sistemas\\CheqRec\\ChequeI"
        Moveto [Numero do Lancamento]
        Locate NLANCTO_CHEQUE
        If RetVal
           Then While [Numero do Lancamento]=NLANCTO_CHEQUE
                  If [Situacao]="LIQUIDADO"          Or
                     [Situacao]="SEM FUNDO"          Or
                     [Situacao]="EM COBRANCA"        Or
                     Search("TROCADO",[Situacao])>0  Or
                     [Situacao]="PRORROGADO"
                     Then
                          EXISTE_CHEQUE_LIQUIDADO=True

                          MSG=    Completa("Cheque.: "+[Numero_Cheque],50," ")+"//"
                          MSG=MSG+Completa("Banco..: "+[Codigo_Banco ]+" "+[Nome_Banco],50," ")+"//"
                          MSG=MSG+Completa("Agencia: "+[Agencia],50," ")+"//"
                          MSG=MSG+Completa("Titular: "+[Titular_Cheque],50," ")+"//"
                          MSG=MSG+Completa("Vencto.: "+Format("D13",[Data Vencimento]),50," ")+"//"
                          MSG=MSG+Completa("Valor..: "+Format("W10.2,EIC",[Valor]),50," ")+"// //"
                          MSG=MSG+"Situa‡„o: [ "+[Situacao]+" ] em "+Format("D13",[Data_Liquidado])+"// //"
                          MSG=MSG+"Os Cheques n„o podem ser atualizados por aqui//"
                          MSG=MSG+"Verificar no Controle de Cheques Ok !//"
                          MSG=MSG+"Lan‡amento: "+StrVal(NLANCTO_CHEQUE)+"  CH: "+SubStr([Observacao],1,12)
                          Mensagem(MSG)

                          Skip
                          If EOT() Then QuitLoop EndIf
                     Else Del
                  EndIf
                EndWhile
        EndIf

        If Not EXISTE_CHEQUE_LIQUIDADO
           Then Moveto "\\Sistemas\\CheqRec\\ChequeC"
                Moveto [Numero do Lancamento]
                Locate NLANCTO_CHEQUE
                If RetVal
                   Then Del
                EndIf
        EndIf
EndIf
If CHAVEC=8
   Then Moveto "NotaC"
        Return
EndIf

Moveto "\\Sistemas\\CheqRec\\ChequeC"
Moveto [Numero do Lancamento]
While True
  If EXISTE_CHEQUE_LIQUIDADO
     Then NUMEROL=NLANCTO_CHEQUE
     Else If PARAM_NLCHQ_IGUAL_NF="S"
             Then NUMEROL=NumVal([NotaC->Numero do Documento])
             Else End
                  If [Numero do Lancamento]=BlankNum()
                     Then NUMEROL=1
                     Else NUMEROL=[Numero do Lancamento]+1
                  EndIf
          EndIf
  EndIf
  Locate NUMEROL
  If Not RetVal
     Then End
          Down
          [Numero do Lancamento   ]=NUMEROL
          If Not IsLockRecord()
             Then Controle_Dia()
                  QuitLoop
          EndIf
          Del
  EndIf
  If Not IsLockRecord() then QuitLoop EndIf
EndWhile

[Codigo da Empresa         ]=[NotaC->Codigo da Empresa]
[Data de Entrada           ]=[NotaC->Data de Emissao]
[Codigo                    ]=[NotaC->Codigo]
[Codigo do Representante   ]=[NotaC->Codigo do Representante]
[Observacao do Lancamento  ]="REF. "+[NotaC->Codigo da Empresa]+"/"+[NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]
[Sistema Gerador           ]="DI"
[Tipo Docto Gerador        ]=[NotaC->Tipo do Documento]
[Numero Docto Gerador      ]=[NotaC->Numero do Documento]
[Numero_Carregamento_Orig  ]=[NotaC->Numero_Carregamento]
UnLockRecord

GERAR_CHEQUE=False
Moveto "NotaV"
Ins
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento]
While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
      [Numero do Documento]=[NotaC->Numero do Documento] And
      [Serie do Documento ]=[NotaC->Serie do Documento ]
      If [Forma de Pagamento]="CH" Or [Forma de Pagamento]="CP"
         Then

              If Not IsBlank([Numero_Cheque])
                 Then
                      Moveto "\\Sistemas\\CheqRec\\ChequeI"
                      Moveto [Numero do Lancamento]
                      Locate NUMEROL, NumVal([NotaV->Sequencia])
                      If Not RetVal
                         Then End
                              Down
                              [Numero do Lancamento]=NUMEROL
                              [Sequencia do Cheque ]=NumVal([NotaV->Sequencia])
                              [Data Vencimento     ]=[NotaV->Data ]
                              [Valor               ]=[NotaV->Valor]
                              [Codigo_Banco        ]=[NotaV->Codigo_Banco]
                              [Numero_Cheque       ]=[NotaV->Numero_Cheque]
                              [CPF                 ]=[NotaV->CPF           ]
                              [Tipo_Emitente       ]=[NotaV->Tipo_Emitente ]
                              [Titular_Cheque      ]=[NotaV->Titular_Cheque]
                              [Cidade              ]=[NotaV->Cidade        ]
                              [Agencia             ]=[NotaV->Agencia       ]
                              [Numero_Conta        ]=[NotaV->Numero_Conta  ]
                              [UF                  ]=[NotaV->UF            ]
                              [Observacao do Cheque]=[NotaV->Observacao    ]
                              [Sistema Origem      ]="NF"
                              [Tipo do Documento   ]="NF"
                              [Numero do Documento ]=[NotaV->Numero do Documento]
                              [Codigo_Cliente      ]=[NotaC->Codigo             ]
                              [Data_Entrada        ]=Today()
                              [Situacao            ]="EM ABERTO"
                              Controle_Dia()
                              UnLockRecord
                              GERAR_CHEQUE=True
                      EndIf
                      Moveto "NotaV"

              EndIf

      EndIf
      Skip
      If EOT() Then QuitLoop EndIf
EndWhile

If Not GERAR_CHEQUE And Not EXISTE_CHEQUE_LIQUIDADO
   Then Moveto "\\Sistemas\\CheqRec\\ChequeC"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then Del
        EndIf
        NUMEROL=BlankNum()
EndIf

Moveto "NotaC"
While True
  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile
[Numero Lancamento Cheque]=NUMEROL
UnLockRecord
EndProc   ; (Cheques)

;*******************************************************************************
;* Atualizacao Transferencias                                                  *
;*******************************************************************************
Proc Closed Transferencia()
UseVars AutoLib, ErrorProc, CHAVEC, TXDESCTO_TOTAL

Private NUMEROL, NE_ENCONTRADA, MES_EST, ANO_EST

If Search("TRANSF",[NotaC->Descricao da Destinacao])=0
   Then Return
EndIf
If [NotaC->Tipo]<>"E"
   Then Return
EndIf
If [NotaC->Tipo Movimento Estoque]<>"S"
   Then Return
EndIf

If [Codigo da Empresa]=[Codigo]
   Then Return
EndIf

Moveto "\\Sistemas\\Estoque\\NotaEC"
Moveto [Codigo]
Locate IndexOrder By "NotaEC01" [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento], [NotaC->Serie do Documento]
If RetVal
   Then NE_ENCONTRADA=True
   Else NE_ENCONTRADA=False
EndIf

If NE_ENCONTRADA
   Then NUMEROL=[\Sistemas\Estoque\NotaEC->Numero do Lancamento]

        Moveto "\\Sistemas\\Estoque\\NotaEI"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then While True
                  MES_EST = AlinhM(StrVal(Month([\Sistemas\Estoque\NotaEC->Data de Entrada])),2)
                  ANO_EST = StrVal(Year([\Sistemas\Estoque\NotaEC->Data de Entrada]))

                  Moveto "\\Sistemas\\Estoque\\SdEstq"
                  Locate [\Sistemas\Estoque\NotaEI->Codigo da Empresa],
                         [\Sistemas\Estoque\NotaEI->Codigo do Item], ANO_EST, MES_EST
                  If RetVal
                     Then While True
                            If Not IsLockRecord()
                               Then QuitLoop
                            EndIf
                          EndWhile

                          [Saldo Atual      ]=NDecimal([Saldo Atual      ]-[\Sistemas\Estoque\NotaEI->Quantidade ],3)
                          [Custo Total Atual]=NDecimal([Custo Total Atual]-([\Sistemas\Estoque\NotaEI->Custo Medio Unitario]*[\Sistemas\Estoque\NotaEI->Quantidade ]),2)
                          If ([Custo Total Atual]/[Saldo Atual])>0
                             Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                          EndIf
                          UnLockRecord
                  EndIf

                  Moveto "\\Sistemas\\Estoque\\NotaEI"
                  Del
                  If [Numero do Lancamento]<>NUMEROL
                     Then QuitLoop
                  EndIf
                EndWhile
        EndIf
        Moveto "\\Sistemas\\Estoque\\NotaEC"
        Del
EndIf
If CHAVEC=8
   Then Moveto "NotaC"
        Return
EndIf

Moveto "\\Sistemas\\Estoque\\NotaEC"
End
If [Numero do Lancamento]=""
   Then NUMEROL="000001"
   Else NUMEROL=AlinhM(StrVAl(NumVal([Numero do Lancamento])+1),6)
EndIf
Down
[Numero do Lancamento     ]=NUMEROL
[Codigo da Empresa        ]=[NotaC->Codigo]
[Codigo                   ]=[NotaC->Codigo da Empresa]
[UF                       ]=[NotaC->UF]
[Aliquota de ICMS         ]=[NotaC->Aliquota de ICMS    ]
[Numero do Documento      ]=[NotaC->Numero do Documento]
[Codigo do Documento      ]=[NotaC->Codigo do Documento]
[Tipo de Operacao         ]="T"
If SubStr([NotaC->CFO],1,1)="5"
   Then [CFO]="1152"
   Else [CFO]="2152"
EndIf
[Data de Emissao          ]=[NotaC->Data de Emissao               ]
[Data de Entrada          ]=[NotaC->Data de Saida                 ]
[Tipo de Pagamento        ]="O"
[Codigo do Representante  ]=""
[Nome Fantasia Represent  ]=""
[Valor Mercadoria         ]=[NotaC->Valor Mercadoria              ]
[Valor Servico            ]=[NotaC->Valor Servico                 ]
[Valor Desconto           ]=[NotaC->Valor Desconto                ]
[Valor Mercadoria Liquido ]=[NotaC->Valor Mercadoria Liquido      ]
[Valor BCICMS             ]=[NotaC->Valor BCICMS                  ]
[Valor ICMS               ]=[NotaC->Valor ICMS                    ]
[Valor IPI                ]=[NotaC->Valor IPI                     ]
[Valor Nota Fiscal        ]=[NotaC->Valor Nota Fiscal             ]
[Valor Despesas Acessorias  ]=[NotaC->Valor Despesas Acessorias   ]
[Valor BCSubstituicao ICMS  ]=[NotaC->Valor BCSubstituicao ICMS   ]
[Valor Substituicao ICMS    ]=[NotaC->Valor Substituicao ICMS     ]
[Recolhimento Substituicao  ]="0"
[Tipo CTR                   ]=[NotaC->Frete por Conta             ]
[Frete Incluso na Nota      ]=[NotaC->Frete Incluso na Nota       ]
[Valor do Frete             ]=[NotaC->Valor do Frete              ]
If [NotaC->Aliquota BCICMS Frete]>0
   Then [Valor ICMS Frete]=Round((([NotaC->Valor do Frete]-(([NotaC->Valor do Frete]*[NotaC->Aliquota BCICMS Frete])/100))*[NotaC->Aliquota de ICMS Frete])/100,2)
   Else [Valor ICMS Frete]=Round(([NotaC->Valor do Frete]*[NotaC->Aliquota de ICMS Frete])/100,2)
EndIf
[Valor do Seguro          ]=[NotaC->Valor do Seguro          ]
[Sistema Gerador          ]="NF"
UnLockrecord

Moveto "NotaI"
Moveto [Codigo da Empresa]
Locate [NotaC->Codigo da Empresa],
       [NotaC->Numero do Documento],
       [NotaC->Serie do Documento]
While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
      [Numero do Documento]=[NotaC->Numero do Documento] And
      [Serie do Documento ]=[NotaC->Serie do Documento ]

  Moveto "\\Sistemas\\Estoque\\NotaEI"
  End
  Down

  [Numero do Lancamento    ]=NUMEROL
  [Sequencia do Lancamento ]=[NotaI->Item do Documento]
  [Codigo da Empresa       ]=[NotaC->Codigo]
  [Codigo do Item          ]=[NotaI->Codigo do Item]
  [Tipo do Item            ]=[NotaI->Tipo do Item]
  [Descricao do Item       ]=[NotaI->Descricao do Item]
  [Codigo da Cor_Tecido    ]=[NotaI->Codigo da Cor_Tecido]
  [Descricao da Cor_Tecido ]=[NotaI->Descricao da Cor_Tecido]
  [Tamanho                 ]=[NotaI->Tamanho]
  [Quantidade              ]=[NotaI->Quantidade]
  [Unidade Fiscal          ]=[NotaI->Unidade Fiscal]
  [Preco Unitario          ]=[NotaI->Preco Unitario]
  [Taxa Desconto Unitario  ]=[NotaI->Taxa Desconto Unitario]
  [Valor Desconto Unitario ]=[NotaI->Valor Desconto Unitario]
  [Preco Total             ]=Round([NotaI->Preco Total],2)
  [Preco Unitario Tabela   ]=[NotaI->Preco Unitario Tabela]
  [Custo Medio Unitario    ]=[NotaI->Preco Unitario]
  [Valor Desconto Total    ]=Round((([Preco Total]*TXDESCTO_TOTAL)/100),5)
;;; Falta Valor Acrescimo Total
  [Tributacao de IPI       ]=[NotaI->Tributacao de IPI       ]
  [Aliquota Reduzida BCIPI ]=[NotaI->Aliquota Reduzida BCIPI ]
  [Aliquota de IPI         ]=[NotaI->Aliquota de IPI         ]
  [Valor do IPI            ]=[NotaI->Valor do IPI            ]
  [IPI_CST                 ]=[NotaI->IPI_CST                 ]
  [IPI_BC                  ]=[NotaI->IPI_BC                  ]

  [Tributacao de ICMS      ]=[NotaI->Tributacao de ICMS      ]
  [Aliquota Reduzida BCICMS]=[NotaI->Aliquota Reduzida BCICMS]
  [Aliquota de ICMS        ]=[NotaI->Aliquota de ICMS        ]
  [Valor do ICMS           ]=[NotaI->Valor do ICMS           ]
  [ICMS_BC                 ]=[NotaI->ICMS_BC                 ]
  [ICMS_ST_BC              ]=[NotaI->ICMS_ST_BC              ]
  [ICMS_ST_Valor           ]=[NotaI->ICMS_ST_Valor           ]
  [Tipo Tributacao         ]=[NotaI->Tipo Tributacao         ]  
  [CSOSN                   ]=[NotaI->CSOSN                   ]

  [Fator de Conversao      ]=1
  [Quantidade Convertida   ]=[NotaI->Quantidade]
  [Comissao do Item        ]=[NotaI->Comissao do Item]
  
  ;* Seta Variaveis PegaCFOP
  Checa_CFOP   ="E"
  CFO_C        =[\Sistemas\Estoque\NotaEC->CFO       ]
  CFOP_TPITEM  =[Tipo do Item      ]
  CFOP_TRIBICMS=[Tributacao de ICMS]
  Play "\\Sistemas\\Exporta\\PegaCFOP"
  [CFO        ]=CFO_C
  
  UnLockrecord

  If Not IsBlank([NotaC->Data de Saida])
     Then MES_EST = AlinhM(StrVal(Month([NotaC->Data de Saida])),2)
          ANO_EST = StrVal(Year([NotaC->Data de Saida]))
     Else MES_EST = AlinhM(StrVal(Month([NotaC->Data de Emissao])),2)
          ANO_EST = StrVal(Year([NotaC->Data de Emissao]))
  EndIf

  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Locate [NotaC->Codigo],
         [NotaI->Codigo do Item   ], ANO_EST, MES_EST
  If Not RetVal
     Then Cria_Ficha([NotaC->Codigo],[NotaI->Codigo do Item],False)
  EndIf
  While True
    If Not IsLockRecord()
       Then QuitLoop
    EndIf
  EndWhile
  [Saldo Atual      ]=NDecimal([Saldo Atual]+[NotaI->Quantidade],3)
  [Custo Total Atual]=NDecimal([Custo Total Atual]+([NotaI->Quantidade]*[NotaI->Preco Unitario]),2)
  If ([Custo Total Atual]/[Saldo Atual])>0
     Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
  EndIf
	If [NotaC->Data de Emissao]>=[Data do Preco de Custo]
     Then [Data do Preco de Custo]=[NotaC->Data de Emissao     ]
          [Preco de Custo        ]=[NotaI->Preco Unitario      ]
	EndIf
  UnLockRecord

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

Moveto "NotaC"
EndProc   ; (Transferencia)

;*******************************************************************************
;* Atualizacao Troca                                                           *
;*******************************************************************************
Proc Troca()
Private NUMEROL,  NE_ENCONTRADA, MES_EST, ANO_EST, CUSTO

If Search("TROCA",[Descricao da Destinacao])=0
   Then Return
EndIf
If [NotaC->Tipo]<>"C"
   Then Return
EndIf
If [NotaC->Tipo Movimento Estoque]<>"S"
   Then Return
EndIf

If [Codigo da Empresa]=[Codigo]
   Then Return
EndIf

Moveto "\\Sistemas\\Estoque\\NotaEC"
Moveto [Codigo]
Locate IndexOrder By "NotaEC01" [NotaC->Codigo],
       [NotaC->Numero do Documento], [NotaC->Serie do Documento]
If RetVal
   then If [Codigo da Empresa]=[NotaC->Codigo da Empresa]
           Then NE_ENCONTRADA=True
           Else NE_ENCONTRADA=False
        EndIf
   Else NE_ENCONTRADA=False
EndIf

If NE_ENCONTRADA
   Then NUMEROL=[\Sistemas\Estoque\NotaEC->Numero do Lancamento]

        Moveto "\\Sistemas\\Estoque\\NotaEI"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then While True
                  MES_EST = AlinhM(StrVal(Month([\Sistemas\Estoque\NotaEC->Data de Entrada])),2)
                  ANO_EST = StrVal(Year([\Sistemas\Estoque\NotaEC->Data de Entrada]))

                  While True
                    Moveto "\\Sistemas\\Estoque\\SdEstq"
                    Moveto [Codigo da Empresa]
                    Locate [\Sistemas\Estoque\NotaEI->Codigo da Empresa],
                           [\Sistemas\Estoque\NotaEI->Codigo do Item], ANO_EST, MES_EST
                    If RetVal
                       Then While True
                              If Not IsLockRecord()
                                 Then QuitLoop
                              EndIf
                            EndWhile
  
                            CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                            If CUSTO=0 Or IsBlank(CUSTO)
                               Then CUSTO=[Ultimo Custo Atual]
                            EndIf
                            [Saldo Atual      ]=NDecimal([Saldo Atual      ]-[\Sistemas\Estoque\NotaEI->Quantidade ],3)
                            [Custo Total Atual]=NDecimal([Custo Total Atual]-(CUSTO*[\Sistemas\Estoque\NotaEI->Quantidade ]),2)
                            If ([Custo Total Atual]/[Saldo Atual])>0
                               Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                            EndIf
                            UnLockRecord
                            QuitLoop
                       Else Cria_FichaTrf([\Sistemas\Estoque\NotaEI->Codigo da Empresa],[\Sistemas\Estoque\NotaEI->Codigo do Item],False)
                    EndIf
                  EndWhile

                  If PARAM_PECAS_ITEM="S" And 
                     [\Sistemas\Estoque\NotaEI->Tipo do Item]="T" 
                     Then While True
                           Moveto "\\Sistemas\\Estoque\\PecasSD"
                           Moveto [Codigo da Empresa]
                           Locate [\Sistemas\Estoque\NotaEI->Codigo da Empresa], [\Sistemas\Estoque\NotaEI->Codigo do Item], 0, ANO_EST, MES_EST
                           If RetVal
                              Then If IsLockRecord()
                                      Then Loop
                                   EndIf
                                   [Saldo Atual      ]=NDecimal([Saldo Atual]-[\Sistemas\Estoque\NotaEI->Quantidade],3)
                                   UnLockRecord
                                   QuitLoop
                              Else Cria_FichaTrf2([\Sistemas\Estoque\NotaEI->Codigo da Empresa],[\Sistemas\Estoque\NotaEI->Codigo do Item],False)
                           EndIf
                          EndWhile
                  EndIf
                  
                  Moveto "\\Sistemas\\Estoque\\NotaEI"
                  Del
                  If [Numero do Lancamento]<>NUMEROL
                     Then QuitLoop
                  EndIf
                EndWhile
        EndIf
        Moveto "\\Sistemas\\Estoque\\NotaEC"
        Del
EndIf
Moveto "NotaC"
EndProc   ; (Troca)


;*******************************************************************************
;* Rotina para exclusao do rateio da comissao                                  *
;*******************************************************************************
Proc Closed Excluir_Rateio_Comissao()
UseVars AutoLib, ErrorProc, EMPRESA,NUMDOC,SERIE,SEQIT
Moveto "NotaC"
UnLockRecord
FormKey

Moveto "NotaIC"
Moveto [Codigo da Empresa]
Locate EMPRESA,NUMDOC,SERIE,SEQIT
If RetVal
   Then While [Codigo da Empresa  ]=EMPRESA And
              [Numero do Documento]=NUMDOC  And
              [Serie do Documento ]=SERIE   And
              [Item do Documento  ]=SEQIT
          Del
        EndWhile
EndIf

Moveto "NotaC"
UnLockRecord
FormKey

Moveto "NotaI"
Moveto [Item do Documento]
Locate EMPRESA,NUMDOC,SERIE,SEQIT

EndProc  ; (Excluir_Rateio_Comissao)

;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_Comissao_Vendedor()
;;;UseVars AutoLib, ErrorProc, PARAM_UTILIZA_COMISSAO_VENDREAL

Private Tx_Comissao, Tx_Descto, Tx_Encontrada, Vr_Descto, NCampo,
        TOT_MERC_TABELA, TOT_MERC_VENDAS, DIFER,
        CODREP, CODTAB, CODCDIA, wc1, wc2, wc3

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

NCampo=Field()

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

        Moveto "NotaI"
        Scan
          TOT_MERC_TABELA=TOT_MERC_TABELA+NDecimal(([Quantidade]*[Preco Unitario Tabela]),2)
        EndScan
        Moveto "NotaC"

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

Tx_Comissao  =BlankNum()
Tx_Encontrada=False

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

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

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

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

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

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

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

EndProc


;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_Comissao_Produto()
;;;UseVars AutoLib, ErrorProc, PARAM_UTILIZA_COMISSAO_VENDREAL

Private Tx_Comissao, Tx_Descto, Tx_Encontrada, Vr_Descto, NCampo, CODREP, CODTAB,
        TOT_MERC_TABELA, TOT_MERC_VENDAS, DIFER, wc, VRCOMIS

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

NCampo=Field()
CODREP=[NotaC->Codigo do Representante]
CODTAB="01000"

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

        Moveto "NotaI"
        Scan
          TOT_MERC_TABELA=TOT_MERC_TABELA+NDecimal(([Quantidade]*[Preco Unitario Tabela]),2)
          VR_COMIS       =VR_COMIS       +NDecimal((([Quantidade]*[Preco Unitario Tabela])*[Comissao do Item])/100,3)
        EndScan
        Moveto "NotaC"

        DIFER=TOT_MERC_VENDAS-TOT_MERC_TABELA
        If DIFER<0
           Then DIFER=DIFER*-1
                Tx_Descto=NDecimal(((DIFER*100)/TOT_MERC_TABELA),2)
           Else Tx_Descto=0
        EndIf
   Else VR_COMIS       =0

        Moveto "NotaI"
        Scan
          TOT_MERC_TABELA=TOT_MERC_TABELA+NDecimal(([Quantidade]*[Preco Unitario]),2)
          VR_COMIS       =VR_COMIS       +NDecimal((([Quantidade]*[Preco Unitario])*[Comissao do Item])/100,3)
        EndScan
        Moveto "NotaC"

        If [NotaC->Taxa de Desconto]>0
           Then Tx_Descto=[NotaC->Taxa de Desconto ]
           Else Vr_Descto=[NotaC->Valor do Desconto]
                Tx_Descto=(Vr_Descto/[NotaC->Valor Mercadoria])*100
        EndIf
EndIf

Tx_Ajuste_Comissao  =BlankNum()
Tx_Encontrada=False

Moveto [Lookup_Trdescto]
Ativa_Lookup()
Moveto [Codigo da Empresa]
For wc From 1 To 2
  Locate [NotaC->Codigo da Empresa],CODTAB,CODREP,[NotaC->Composicao de Dias]
  If Retval
     Then Tx_Encontrada=True
          QuitLoop
     Else Switch
            Case wc=1 : CODREP="0000"
          EndSwitch
  EndIf
EndFor

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

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

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

If Not Tx_Encontrada
   Then MSG="% Ajuste na comiss„o n„o encontrada conforme tabela: //"
        MSG=MSG+"Representante/Composi‡„o de Dias/Descontos, // //Verificar Ok !"
        Mensagem(MSG)
        Return False
   Else [Comissao do Representante]=NDecimal((VR_COMIS*100)/TOT_MERC_TABELA,2)
        [Comissao do Representante]=[Comissao do Representante]+Tx_Ajuste_Comissao
        If [Comissao do Representante]<0
           Then [Comissao do Representante]=0
        EndIf
        Return True
EndIf                                      

EndProc

;*******************************************************************************
;* Rotina para Carregar Parametros_                                            *
;*******************************************************************************
Proc Carrega_Parametros()

Switch
  Case [NotaC->Sistema Gerador]="BA" :  Return Carrega_Parametros_Balcao()
  OtherWise                          :  Return Carrega_Parametros_Fatura()
EndSwitch
EndProc

;*******************************************************************************
;* Rotina para Carregar Parametros_Fatura                                      *
;*******************************************************************************
Proc Carrega_Parametros_Fatura()
Private ParamF, ParamE

If IsEmpty("P_Fatura")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o [Saida/Fatura]!")
        Return False
EndIf

If IsEmpty("\\Sistemas\\Estoque\\P_Entra")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o [Entrada/NE]!")
        Return False
EndIf

UnLockRecord
KeyPress "F7"
IsLockRecord()

ParamF=False
Moveto "P_Fatura"
Moveto [Codigo_Empresa]
Locate [NotaC->Codigo da Empresa]
If RetVal
   Then ParamF=True

        PARAM_EMPRESA       =[Codigo_Empresa           ]
        PARAM_DESTINACAO    =[Codigo_Destinacao        ]
        PARAM_CONTA_CAIXA   =[Codigo_Conta_Caixa       ]
        PARAM_DATAS_VENCTOS =[Datas_Vencimentos        ]
        PARAM_COR_TECIDO    =[Cor_Tecido               ]
        PARAM_TAMANHO       =[Tamanho                  ]
        PARAM_DESCUNIT      =[Desconto Unitario        ]
        PARAM_VOLUMES       =[Volumes                  ]
        PARAM_SUBSTICMS     =[Substituicao ICMS        ]
        PARAM_PEDIDO        =[Utiliza_Pedido           ]
        PARAM_ORCAMENTO     =[Utiliza_Orcamento        ]
        PARAM_ORDEM_SERVICO =[Utiliza_OS               ]
        PARAM_BLOQUEIA_NEG  =[Bloqueia_Estoque_Negativo]
        PARAM_MULT_BCICMS   =[Multiplas_BC_ICMS        ]
        PARAM_NLCHQ_IGUAL_NF=[NLCheque_Igual_NF        ]
        PARAM_IMPOSTOS      =[Impostos                 ]
        PARAM_TABELA_PRECO  =[Tabela_Preco             ]
        PARAM_TRANSPORTADORA=[Codigo_Transportadora    ]
        PARAM_TRANSFERENCIA =[Utiliza_Transferencia    ]
        PARAM_CONSIGNACAO   ="N"
        PARAM_CHEQUES       =[Utiliza_Controle_Cheques ]
        PARAM_AVISTAAUTOMAT =[Gera_VendasVista_Automat ]
        PARAM_APRAZOAUTOMAT =[Gera_VendasPrazo_Automat ]
        PARAM_AVISTADUPLIC  =[Gera_Duplicatas_AVista   ]
        PARAM_TXJUROS       =[Duplicata_TxJuros        ]
        PARAM_FORMA_TXJUROS =[Duplicata_Forma_TxJuros  ]
        PARAM_DUPLIC_NUMERO =[Gera_Duplicatas_Numero   ]
        PARAM_COMIS_ITEM    =[Comissao_Item            ]
        PARAM_COMIS_MARCA   =[Utiliza_Comissao_Marca   ]
        PARAM_CPGTO_ITEM    =[Utiliza_Cond_Pagto_Item  ]
        PARAM_TABPR_ITEM    =[Utiliza_Tabela_Preco_Item]
        PARAM_COMIS_VENCTO  =[Calcula_Comissao_Vencto  ]
        PARAM_EXIBECUSTO    =[Exibe_Custo_Item_Consulta]
        
        PARAM_UTILIZA_COMISSAO_VENDEDOR=[Utiliza_Comissao_Vendedor]
        PARAM_RATEIO_COMISSAO          =[Utiliza_Rateio_Comissao  ]
        PARAM_UTILIZA_COMISSAO_VENDREAL=[Utiliza_Comissao_VendReal]
        PARAM_UTILIZA_TABPR_CLIENTE    =[Utiliza_TabPreco_Cliente ]
        PARAM_UTILIZA_TABPR_REPRES     =[Utiliza_TabPreco_Repres  ]
        PARAM_PEGAPRECO_CPAGTO         =[Pega_Preco_Tabela_CPagto ]
        
        If SYS_CODIGO_CLIENTE="0102" Or
           SYS_CODIGO_CLIENTE="0114"
           Then PARAM_CALC_COMIS_ITEM="S"
           Else PARAM_CALC_COMIS_ITEM="N"
        EndIf
        
        PARAM_DOC_ROM = [Rom_Codigo do Documento  ]  
        PARAM_TIP_ROM = [Rom_Tipo do Documento    ]  
        PARAM_SER_ROM = [Rom_Serie do Documento   ]  
               
        PARAM_DOC_NF  = [Not_Codigo do Documento  ]  
        PARAM_TIP_NF  = [Not_Tipo do Documento    ]  
        PARAM_SER_NF  = [Not_Serie do Documento   ]  
               
        PARAM_DOC_DUP = [Dup_Codigo do Documento  ]  
        PARAM_TIP_DUP = [Dup_Tipo do Documento    ]  
        PARAM_SER_DUP = [Dup_Serie do Documento   ]  
        
        PARAM_UTILIZACDBARRA           =[Utiliza_Codigo_Barras    ]

        PARAM_DOC_NFEN                 =[NFEN_Codigo do Docto     ]  
        PARAM_TIP_NFEN                 =[NFEN_Tipo do Docto       ]  
        PARAM_SER_NFEN                 =[NFEN_Serie do Docto      ]  
               
        PARAM_DOC_DUPNFEN              =[NFEN Dup_Codigo do Docto ]  
        PARAM_TIP_DUPNFEN              =[NFEN Dup_Tipo do Docto   ]  
        PARAM_SER_DUPNFEN              =[NFEN Dup_Serie do Docto  ]  
        
        PARAM_DOC_NFES                 =[NFES_Codigo do Docto     ]  
        PARAM_TIP_NFES                 =[NFES_Tipo do Docto       ]  
        PARAM_SER_NFES                 =[NFES_Serie do Docto      ]  
               
        PARAM_DOC_DUPNFES              =[NFES Dup_Codigo do Docto ]  
        PARAM_TIP_DUPNFES              =[NFES Dup_Tipo do Docto   ]  
        PARAM_SER_DUPNFES              =[NFES Dup_Serie do Docto  ]  
        
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Saida/Fatura] !")
EndIf


ParamE=False
Moveto "\\Sistemas\\Estoque\\P_Entra"
Moveto [Codigo_Empresa]
Locate [NotaC->Codigo da Empresa]
If RetVal
   Then ParamE=True 
        PARAM_PECAS_ITEM      = [Controla_Pecas_Item      ]
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Entrada/NE] !")
EndIf

Moveto "NotaC"
KeyPress "F7"

If ParamF And ParamE
   Then Return True
   Else Return False
EndIf   
EndProc ; (Carrega_Parametros)


;*******************************************************************************
;* Rotina para Carregar Parametros Balcao                                      *
;*******************************************************************************
Proc Carrega_Parametros_Balcao()
Private ParamF, ParamE

If IsEmpty("P_Balcao")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o [Saida/Balc„o]!")
        Return False
EndIf

If IsEmpty("\\Sistemas\\Estoque\\P_Entra")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o [Entrada/NE]!")
        Return False
EndIf

UnLockRecord
KeyPress "F7"
IsLockRecord()

ParamF=False
Moveto "P_Balcao"
Moveto [Codigo_Empresa]
Locate [NotaC->Codigo da Empresa]
If RetVal
   Then ParamF=True

        PARAM_EMPRESA                  =[Codigo_Empresa           ]
        PARAM_DESTINACAO               =[Codigo_Destinacao        ]
        PARAM_CONTA_CAIXA              =[Codigo_Conta_Caixa       ]
        PARAM_DATAS_VENCTOS            =[Datas_Vencimentos        ]
        PARAM_COR_TECIDO               =[Cor_Tecido               ]
        PARAM_TAMANHO                  =[Tamanho                  ]
        PARAM_DESCUNIT                 =[Desconto Unitario        ]
        PARAM_VOLUMES                  =[Volumes                  ]
        PARAM_SUBSTICMS                =[Substituicao ICMS        ]
        PARAM_PEDIDO                   ="N"
        PARAM_ORCAMENTO                =[Utiliza_Orcamento        ]
        PARAM_ORDEM_SERVICO            =[Utiliza_OS               ]
        PARAM_BLOQUEIA_NEG             =[Bloqueia_Estoque_Negativo]
        PARAM_MULT_BCICMS              =[Multiplas_BC_ICMS        ]
        PARAM_NLCHQ_IGUAL_NF           =[NLCheque_Igual_NF        ]
        PARAM_IMPOSTOS                 =[Impostos                 ]
        PARAM_TABELA_PRECO             =[Tabela_Preco             ]
        PARAM_TRANSPORTADORA           =[Codigo_Transportadora    ]
        PARAM_TRANSFERENCIA            ="N"
        PARAM_CONSIGNACAO              ="N"
        PARAM_CHEQUES                  =[Utiliza_Controle_Cheques ]
        PARAM_RELAT_NF                 =[Script_Impressao_NF      ]
        PARAM_RELAT_ROMA               =[Script_Impressao_Romaneio]
        PARAM_RELAT_NP                 =[Script_Impressao_NP      ]
        PARAM_RELAT_CARNE              =[Script_Impressao_Carne   ]
        PARAM_CONTROLA_NITENS          =[Controla_Numero_Itens    ]
        PARAM_NITENS                   =[Numero_Itens             ] 
        PARAM_TAMANHO_DESCR            =[Tamanho_Descricao_Item   ]
        PARAM_NLINHAS_OBS              =[NLinhas_Obs_Campo_Itens  ]
        PARAM_NLCHQ_IGUAL_NF           =[NLCheque_Igual_NF        ]
        PARAM_NVIAS_ROMANEIO           =[NVias_Romaneio           ]
        PARAM_ENTREGA                  =[Entrega_Mercadoria       ]
        PARAM_RELAT_ENTREGA            =[Script_Impressao_Entrega ]
        PARAM_PORTA_ENTREGA            =[Porta_Impressao_Entrega  ]
        PARAM_LIMITE_CREDITO           =[Utiliza_Limite_Credito   ]
        PARAM_ALTERA_PRECO             =[Utiliza_Alteracao_Preco  ]
        PARAM_DIAS_ATRASO              =[Utiliza_Dias_Atraso      ]
        PARAM_CUPOM_FISCAL             =[Utiliza_Cupom_Fiscal     ]
        PARAM_CLIENTE                  =[Codigo_Cliente           ]
        PARAM_VENDEDOR                 =[Codigo_Vendedor          ]
        PARAM_COND_PAGTO               =[Codigo_Cond_Pagto        ]
        PARAM_FORMA_PAGTO              =[Codigo_Forma_Pagto       ]
        PARAM_UTILIZAVENDEDOR          =[Utiliza_Vendedor         ]
        PARAM_UTILIZACDBARRA           =[Utiliza_Codigo_Barras    ]
        PARAM_BLOQUEIA_REEMISSAO       =[Bloqueia_Reemissao_NF    ]
        PARAM_AVISTAAUTOMAT            =[Gera_VendasVista_Automat ]
        PARAM_APRAZOAUTOMAT            =[Gera_VendasPrazo_Automat ]
        PARAM_AVISTADUPLIC             =[Gera_Duplicatas_AVista   ]
        PARAM_TXJUROS                  =[Duplicata_TxJuros        ]
        PARAM_FORMA_TXJUROS            =[Duplicata_Forma_TxJuros  ]
        PARAM_DUPLIC_NUMERO            =[Gera_Duplicatas_Numero   ]
        
        PARAM_COMIS_ITEM               =[Comissao_Item            ]
        PARAM_COMIS_MARCA              =[Utiliza_Comissao_Marca   ]
        PARAM_CPGTO_ITEM               =[Utiliza_Cond_Pagto_Item  ]
        PARAM_TABPR_ITEM               =[Utiliza_Tabela_Preco_Item]
        PARAM_COMIS_VENCTO             =[Calcula_Comissao_Vencto  ]
        PARAM_VISITA                   =[Utiliza_Visita           ]
        PARAM_BLOQUEIA_AUTORI          =[Bloqueia_Autorizados     ]
        PARAM_FATURA_IGUAL_OF          =[Gera_Fatura_Igual_OF     ]
        
        If SYS_CODIGO_CLIENTE="0102" Or
           SYS_CODIGO_CLIENTE="0114"
           Then PARAM_CALC_COMIS_ITEM="S"
           Else PARAM_CALC_COMIS_ITEM="N"
        EndIf
        
        PARAM_UTILIZA_COMISSAO_VENDEDOR=[Utiliza_Comissao_Vendedor]
        PARAM_RATEIO_COMISSAO          =[Utiliza_Rateio_Comissao  ]
        PARAM_TRANSF_ULTCT             =[Utiliza_UltCust_Transfer ]
        PARAM_UTILIZA_COMISSAO_VENDREAL=[Utiliza_Comissao_VendReal]
        PARAM_UTILIZA_TABPR_CLIENTE    =[Utiliza_TabPreco_Cliente ]
        PARAM_UTILIZA_TABPR_REPRES     =[Utiliza_TabPreco_Repres  ]
        PARAM_PEGAPRECO_CPAGTO         =[Pega_Preco_Tabela_Cpagto ]
        
        PARAM_BLOQ_DESCTO              =[Utiliza_Bloqueio_Descto  ]
        PARAM_BLOQ_TPDESCTO            =[Tipo_Bloqueio_Descto     ]
        PARAM_BLOQ_TXDESCTO            =[Taxa_Bloqueio_Descto     ]
        PARAM_EXIBECUSTO               =[Exibe_Custo_Item_Consulta]
        
        PARAM_BLOQ_DESCTOUNIT          =[Utiliza_Bloqueio_DesctoUn]
        PARAM_BLOQ_TPDESCTOUNIT        =[Tipo_Bloqueio_DesctoUn   ]
        PARAM_BLOQ_TXDESCTOUNIT        =[Taxa_Bloqueio_DesctoUn   ]
        
        PARAM_DOC_ROM                  =[Rom_Codigo do Documento  ]  
        PARAM_TIP_ROM                  =[Rom_Tipo do Documento    ]  
        PARAM_SER_ROM                  =[Rom_Serie do Documento   ]  
               
        PARAM_DOC_NF                   =[Not_Codigo do Documento  ]  
        PARAM_TIP_NF                   =[Not_Tipo do Documento    ]  
        PARAM_SER_NF                   =[Not_Serie do Documento   ]  
               
        PARAM_DOC_DUP                  =[Dup_Codigo do Documento  ]  
        PARAM_TIP_DUP                  =[Dup_Tipo do Documento    ]  
        PARAM_SER_DUP                  =[Dup_Serie do Documento   ]  
        
        PARAM_BLOQUEIA_CANCEL          =[Bloqueia Cancelamento    ]
        PARAM_BLOQUEIA_ALTERA          =[Bloqueia_Alteracao_NF    ]        
        
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Saida/Balc„o] !")
EndIf


ParamE=False
Moveto "\\Sistemas\\Estoque\\P_Entra"
Moveto [Codigo_Empresa]
Locate [NotaC->Codigo da Empresa]
If RetVal
   Then ParamE=True 
        PARAM_PECAS_ITEM      = [Controla_Pecas_Item      ]
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Entrada/NE] !")
EndIf

Moveto "NotaC"
KeyPress "F7"

If ParamF And ParamE
   Then Return True
   Else Return False
EndIf   
EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Closed Carrega_Tabelas()
UseVars AutoLib, ErrorProc, PARAM_CONSIGNACAO, PARAM_RELAT_NF

View NOWINDOW "P_Fatura"
View NOWINDOW "P_Balcao"
View NOWINDOW "P_Cartao"
View NOWINDOW "NotaI"
View NOWINDOW "NotaIC"
View NOWINDOW "NotaIDD"
View NOWINDOW "NotaIAD"
View NOWINDOW "NotaOCP"
View NOWINDOW "NotaIDV"
View NOWINDOW "NotaV"
View NOWINDOW "NotaCF"
View NOWINDOW "NotaR"
View NOWINDOW "DupC"
View NOWINDOW "DupI"
View NOWINDOW "DupNF"
View NOWINDOW "NumeroDP"
View NOWINDOW "TbPrIte"

View NOWINDOW "\\Sistemas\\Estoque\\Itens"
View NOWINDOW "\\Sistemas\\Estoque\\P_Entra"
View NOWINDOW "\\Sistemas\\Estoque\\NotaEC"
View NOWINDOW "\\Sistemas\\Estoque\\NotaEI"
View NOWINDOW "\\Sistemas\\Estoque\\EstqPrm"
View NOWINDOW "\\Sistemas\\Estoque\\SdEstq"
View NOWINDOW "\\Sistemas\\Estoque\\PecasSD"
View NOWINDOW "\\Sistemas\\Estoque\\PecasMov"

;If PARAM_CONSIGNACAO="S"
;   Then View NOWINDOW  "\\Sistemas\\Consigna\\CabMovim"
;        View NOWINDOW  "\\Sistemas\\Consigna\\IteMovim"
;        View NOWINDOW  "\\Sistemas\\Consigna\\CabSaldo"
;        View NOWINDOW  "\\Sistemas\\Consigna\\IteSaldo"
;EndIf

View NOWINDOW "\\Sistemas\\Cadastro\\FichaCli"
View NOWINDOW "\\Sistemas\\Cadastro\\Feriados"

View NOWINDOW "\\Sistemas\\CheqRec\\ChequeC"
View NOWINDOW "\\Sistemas\\CheqRec\\ChequeI"

View NOWINDOW  "\\Sistemas\\CtaCor\\SaldCont"
View NOWINDOW  "\\Sistemas\\CtaCor\\MovCont"

View NOWINDOW  "\\Sistemas\\CtaRec\\Duplic"
View NOWINDOW  "\\Sistemas\\CtaRec\\P_Duplic"

EndProc  ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
DIGITAI()
If CHAVEI<>9
   Then If CHAVEI<>8
           Then ESTOQUE()
                ATUA_PEDIDO_ORCAMENTO()
                If PARAM_RATEIO_COMISSAO="I" And VSD_I_Tipo_Item="C"
                   Then APLIC_ORIGEM="NOTA"
                        Play "Ft_Comis"
                EndIf
        EndIf
EndIf
Moveto "NotaI"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoV()
DIGITAV()
Moveto "NotaV"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

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

While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1 Then Controle_Dia() EndIf

  ANT_DEST   =[Codigo da Destinacao]
  ANT_NCARREG=[Numero_Carregamento ]
  ANT_NFORIG =[Numero Nota Original]
  ANT_DTEMI  =[Data de Emissao     ]
  ANT_DTSAI  =[Data de Saida       ]
  ANT_DTACE  =[Data de Acerto      ]
  ANT_CDTAB  =[Codigo da Tabela    ]

  If Not IsAssigned(OPCHAVEI)
     Then If PARAM_UTILIZACDBARRA="S"
             Then OPCHAVEI="CDB"
             Else OPCHAVEI="CDC"
          EndIf
  EndIf
  
  If CHAVEC=1 And CALCULO_NF_AUTOMATICO
     Then Switch
            Case Search("COMPLEMENTO",[NotaC->Descricao da Destinacao])>0: CALCULO_NF_AUTOMATICO=False
            Case Search("AJUSTE"     ,[NotaC->Descricao da Destinacao])>0: CALCULO_NF_AUTOMATICO=False
            OtherWise                                                    : CALCULO_NF_AUTOMATICO=True
          EndSwitch
  EndIf   
    
  While FACA_CHAVEI
    While True
      If OPCHAVEI="CDB"
         Then CHAVECDBAR()
              If CHAVEI=9 Then Quitloop EndIf
              If CHAVEI=7 Then     Loop EndIf
         Else CHAVEI()
              If CHAVEI=9 Then QuitLoop EndIf
              If CHAVEI=7 Then     Loop EndIf
              Controla_EdicaoI()
      EndIf
    EndWhile

    While FACA_DIGITAF
      DIGITAF()
      If CHAVEF=0
         Then FACA_DIGITAC=False
              FACA_CHAVEI =False
              Rateio_BC_Itens("NotaC")

              If PARAM_RATEIO_COMISSAO="T"
                 Then Moveto "NotaC"
                      Moveto [Codigo do Representante]
                      Echo Normal
                      Echo Off
                      APLIC_ORIGEM="NOTA"
                      SEQIT=0
                      Play "Ft_Comis"
              EndIf
      EndIf
      QuitLoop
    EndWhile
  EndWhile
EndWhile
Moveto "NotaC"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

SaveTables
EndProc

;*******************************************************************************
;* Rotina Principal Nota Fiscal                                                *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""    EndIf

PARAM_EMPRESA=SYS_EMPRESA_DEFAULT
PARAM_CONSIGNACAO="N"
PARAM_RATEIO_COMISSAO=""
Carrega_Tabelas()

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

Array AICMS[10]
Array AIPI[10]
Array AISSQN[10]
Array AINSS[10]
Array AIR[10]
Array APIS[10]
Array ACOFINS[10]

Array VIICMS[10]
Array VIINSS[10]
Array VIIPI[10]
Array VIISSQN[10]
Array VIIR[10]
Array VIPIS[10]
Array VICOFINS[10]

Array BCICMS[10]
Array BCIPI[10]
Array BCISSQN[10]
Array BCINSS[10]
Array BCIR[10]
Array BCPIS[10]
Array BCCOFINS[10]

Array RICMS[10]
Array RIPI[10]


Array AMVA[10]
Array BCMVA[10]
Array VRIPIMVA[10]

Array Dt_Vencto[12]
Array Vr_Vencto[12]
Array ND_Vencto[12]
Array VC_Vencto[12]

CoEdit NoWindow "NotaC"
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf

PickForm "1"
Moveto "PedidoC" SetHighLight Current Record 51 Field 51
Moveto "PedidoI" SetHighLight Current Record 51 Field 51
Moveto "OrcaC"   SetHighLight Current Record 51 Field 51
Moveto "OrcaI"   SetHighLight Current Record 51 Field 51
Moveto "\\Sistemas\\Estoque\\SdEstq"  SetHighLight Current Record 51  Field 51
Moveto "NotaC"
PickForm "F"
OPCAO_FORM="F"

ANT_EMPRESA=""
ANT_CDDOCTO=""
ANT_DEST   =""
ANT_NCARREG=""
ANT_NFORIG =""
ANT_CDTAB  =""
ANT_DTEMI  =BlankDate()
ANT_DTSAI  =BlankDate()
ANT_DTACE  =BlankDate()

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
