;** NotaCTR ********************************************************************
;*  Digitacao de Conhecimento de Transporte                                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 02/08/2011 por Karina Andrade
;Ultima Alteracao: 03/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes DigitaR(), adcionado Data_Documento
;Ultima Alteracao: 08/11/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes CST do Item
;Ultima Alteracao: 22/06/2012 por Bruno Carvalho
;Motivo Alteracao: Inclu¡do CALCULO_NF_AUTOMATICO, removido CALCULA_ST e onde 
;                  usava o mesmo ajustado p/ CALCULO_NF_AUTOMATICO
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo da nota= automatico, nÆo calcula, livre    
;Ultima Alteracao: 28/06/2012 por Bruno Carvalho 
;Motivo Alteracao: Ajustes nova logica para calculo da nota/nota livre    
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() nÆo usar imagecsum()

;*******************************************************************************
;* 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()
VSVRNFR =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="9"
                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()
               VSVRNFR =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 "9"
                      Echo Normal
                      Echo Off
                      If Checa_Controle([Numero_Controle_Dia])
                         Then CHAVEC=0
                              Controla_EdicaoC()
                         Else UnLockRecord
                      EndIf
                 Case EXCLUIR="S":
                      PickForm "9"
                      Echo Normal
                      Echo Off
                      If Checa_Controle([Numero_Controle_Dia])
                         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
                         Else UnLockRecord
                      EndIf
                 OtherWise: QuitLoop
               EndSwitch
               If OPCAO_FORM="9"
                  Then PickForm "9"
                  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])<1 And Search("CA",CODDOC)<1
                        Then MSG="Lan‡amento nÆo ‚ referente //a CONHECIMENTO DE TRANSPORTE, //"
                             MSG=MSG+"utilizar outra rotina !"
                             Mensagem(MSG)
                             Loop
                       EndIf
                             
                       SERIE =[Serie do Documento]
                       CODDOC=[Codigo do Documento]

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

                       Del
                       PickForm "9"
                       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)<1 And Search("CA",CODDOC)<1
  Then MSG="Lan‡amento nÆo ‚ referente //a CONHECIMENTO DE TRANSPORTE, //utilizar outra rotina !"
       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 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.            // //"
                      ConfGeral(MSG+"Deseja CANCELAR este documento ?")
                      If OK<>"S"
                         Then Loop
                      EndIf   
                      If Not CHECA_SUPERVISOR()
                         Then Loop
                      EndIf
                      TIPO="CANCELAR"
                      Play "FT_DESF"
          
                      CHAVEC=9
                      Return      
                   Case Opcaoc="Alterar":
                     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 Moveto [Codigo da Destinacao ]
       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 Nota Original]=ANT_NFORIG
               [Data de Emissao     ]=ANT_DTEMI
               [Data de Saida       ]=ANT_DTSAI
               [Data de Acerto      ]=ANT_DTACE
               [Codigo da Tabela    ]=ANT_CDTAB

               NotaCTR()
          Else Moveto [Codigo da Destinacao]
       EndIf
EndIf
INICIO_PAGINA=False
CAMPO=""

While True
  
  TECLA=" Esc=Retornar  "
  
  If CHAVEC=0
     Then TECLA=TECLA + "Del=Excluir  F5=Observa‡äes  PgDn=Finalizar  " 
     Else TECLA=TECLA + "F5=Observa‡äes  PgDn=Finalizar  "
  EndIf


  If Field()="Codigo da Empresa"        Or
     Field()="Codigo da Destinacao"     Or
     Field()="CFO"                      Or
     Field()="Codigo do Representante"  Or
     Field()="Codigo da Tabela"         Or
     Field()="Condicao de Pagamento"    
     Then TECLA=TECLA + "F1=Tabelas  "
  EndIf

  Prompt TECLA
  MSGCAMPO=Field()

  Switch
    Case Field()="Exportado_Caixa"       : MSGCAMPO="Nota Exportada p/ o Caixa (Sim/N„o) ? "
    Case Field()="Frete por Conta"       : MSGCAMPO="1=REMETENTE/CIF  2=DESTINATARIO/FOB"
    Case Field()="Codigo da Tabela"      : MSGCAMPO="C¢digo da Tabela de Pre‡o"
  EndSwitch

  Wait Field
       Message MSGCAMPO
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F5"  

  Switch
  Case RetVal=-33 : SemFuncoes()  
  Case RetVal="F1":
       If Field()="Codigo da Empresa"        Or
          Field()="Codigo da Destinacao"     Or
          Field()="CFO"                      Or
          Field()="Codigo do Representante"  Or
          Field()="Codigo da Tabela"         Or
          Field()="Condicao de Pagamento"    
          Then If CONSULTAF1()
                  Then If Field()="Cidade"
                          Then [UF  ]=Reg_ConsultaF1["UF"]
                       EndIf
               EndIf        
        EndIf
  Case RetVal="PGDN":
       If Checagem_CTR() 
        Then If Checagem_Pagina1() Then QuitLoop EndIf
       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="ESC":
       Switch
       Case Field()="Codigo do Representante"  : 
            NotaCTR()
            If CHAVET=9 Then Moveto [Hora de Saida] EndIf
            If CHAVET=8 Then QuitLoop EndIf
       Case Field()="Condicao de Pagamento"    : Moveto [Codigo do Representante]
       Case Field()="Codigo da Tabela"         : Moveto [Condicao de Pagamento]
       Case Field()="Frete por Conta"          : Moveto [Codigo da Tabela]
       Case Field()="Placa do Veiculo"         : Moveto [Frete por Conta]
       Case Field()="Numero de Volumes"        : Moveto [Placa do Veiculo]
       Case Field()="Comissao do Representante": Moveto [Codigo do Representante]
       Case Field()="Data de Emissao"          : Moveto [Codigo da Destinacao]
       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()="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 do Representante" Or
                  Field()="Condicao de Pagamento" Or
                  Field()="Frete por Conta" 
                  Then Loop
               EndIf
       EndIf
       Switch
       Case Field()="Exportado_Caixa" : Moveto [Codigo da Destinacao ]
       Case Field()="Codigo da Destinacao":
            If Search("SERV",[Descricao da Destinacao])>0  And
               [Tipo Movimento Estoque]="S"
               Then Moveto [CFO]
               Else Mensagem("Destina‡Æo nÆo ‚ referente a Presta‡Æo de Servi‡o !")
            EndIf
       Case Field()="CFO" : Moveto [Data de Emissao]
       Case (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":
            If IsBlank([])
              Then []=Time()
            EndIf  
            NotaCTR()
            If CHAVET=9 Then Moveto [Hora de Saida] EndIf
            If CHAVET=8 Then QuitLoop EndIf
            Moveto [Codigo do Representante]
       Case Field()="Codigo do Representante": Moveto [Condicao de Pagamento]
       Case Field()="Condicao de Pagamento"  : Moveto [Codigo da Tabela     ]    
       Case Field()="Frete por Conta":
            If IsFieldNull([]) Or []<>"1" And []<>"2"
               Then Loop
            EndIf
            CODREP=[Codigo do Representante]
            If []="1"
              Then [Codigo]=[Notactr->Codigo Remetente   ]
              Else [Codigo]=[Notactr->Codigo Destinatario] 
            EndIf 
            If [Codigo]<>""
              Then [Codigo do Representante]=CODREP
                   Moveto [Placa do Veiculo]
            EndIf   
       Case Field()="Peso Liquido": 
            If [Codigo do Documento]="CT-E" 
               Then Moveto [Chave_Acesso_NFe]
             Else If Checagem_CTR()
                    Then If Checagem_Pagina1() Then QuitLoop EndIf
                  EndIf  
            EndIf   
       Case Field()="Chave_Acesso_NFe":
            If Checagem_CTR()
              Then If Checagem_Pagina1() Then QuitLoop EndIf
            EndIf
       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ;(DigitaC)

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

SetaCorRegistro("Padrao")
Moveto "NotaCTR"
SetaCorRegistro("Editar")

CHAVET=CHAVEC

Moveto [Codigo Remetente] 
If Retval="ESC"
  Then Moveto [Nome Fantasia_Destinat] 
EndIf 

While True

  TECLA=" Esc=Retornar  "
  If CHAVET=0
     Then TECLA=TECLA + "Del=Excluir  PgDn=Finalizar  " 
     Else TECLA=TECLA + "PgDn=Finalizar  "
  EndIf
     
  If Field()="Codigo Remetente"    Or
     Field()="Cidade-Remetente"    Or
     Field()="Codigo Destinatario" Or
     Field()="Cidade-Destinatario"
     Then TECLA=TECLA + "F1=Tabelas  "
  EndIf
  
  Prompt TECLA
  MSGCAMPO=Field()

  Switch
   Case Field()="Codigo Remetente"         : MSGCAMPO="Codigo Remetente" 
   Case Field()="Nome Fantasia-Remet"      : MSGCAMPO="Nome Fantasia Remetente"  
   Case Field()="Razao Social-Remetente"   : MSGCAMPO="Razao Social Remetente"  
   Case Field()="Endereco-Remetente"       : MSGCAMPO="Endereco Remetente"  
   Case Field()="Bairro-Remetente"         : MSGCAMPO="Bairro Remetente"  
   Case Field()="Cidade-Remetente"         : MSGCAMPO="Cidade Remetente"  
   Case Field()="CEP-Remetente"            : MSGCAMPO="CEP Remetente"  
   Case Field()="Estado-Remetente"         : MSGCAMPO="Estado Remetente"  
   Case Field()="Tipo Pessoa_Remet"        : MSGCAMPO="FISICA/JURIDICA"  
   Case Field()="Inscricao Estadual-Remet" : MSGCAMPO="IE Remetente"  
   Case Field()="CNPJ_CPF-Remetente"       : MSGCAMPO="CNPJ/CPF Remetente"  
   Case Field()="Codigo Destinatario"      : MSGCAMPO="Codigo Destinatario"  
   Case Field()="Nome Fantasia_Destinat"   : MSGCAMPO="Nome Fantasia Destinatario"  
   Case Field()="Razao Social-Destinatario": MSGCAMPO="Razao Social Destinatario"  
   Case Field()="Endereco-Destinatario"    : MSGCAMPO="Endereco Destinatario"  
   Case Field()="Bairro-Destinatario"      : MSGCAMPO="Bairro Destinatario"  
   Case Field()="Cidade-Destinatario"      : MSGCAMPO="Cidade Destinatario"  
   Case Field()="CEP-Destinatario"         : MSGCAMPO="CEP Destinatario"  
   Case Field()="Estado-Destinatario"      : MSGCAMPO="Estado Destinatario"  
   Case Field()="Tipo Pessoa_Destin"       : MSGCAMPO="FISICA/JURIDICA"  
   Case Field()="Inscricao Estadual-Destin": MSGCAMPO="IE Destinatario"  
   Case Field()="CNPJ_CPF-Destinatario"    : MSGCAMPO="CNPJ/CPF Destinatario"      
EndSwitch
  
  Wait Field
     Message MSGCAMPO
     Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN" 
     
  Switch
     Case RetVal="F1":
          If Field()="Codigo Remetente" Or Field()="Codigo Destinatario" 
            Then If ConsultaF1()
                  Then Busca_Destinat()
                 EndIf 
          EndIf
          If Field()="Cidade-Destinatario" or Field()="Cidade-Remetente"
            Then If ConsultaF1()
                  Then Busca_Lookup("Cidade",[],"SM")                     
                       Switch
                        Case Field()="Cidade-Remetente":
                             [Cidade-Remetente ]=REG_BUSCA_LOOKUP["Cidade"]  
                             [Estado-Remetente ]=REG_BUSCA_LOOKUP["UF"    ]
                        Case Field()="Cidade-Destinatario":
                             [Cidade-Destinatario ]=REG_BUSCA_LOOKUP["Cidade"]  
                             [Estado-Destinatario ]=REG_BUSCA_LOOKUP["UF"    ]
                       EndSwitch
                 EndIf            
          EndIf
  Case RetVal="PGDN":
       campo=Field()
       If Checagem_CTR()
          Then Moveto "NotaC" 
               If Checagem_Pagina1() 
                  Then CHAVET=8
                       QuitLoop 
               EndIf
       EndIf
       Moveto "NotaCTR"
       Moveto campo        
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVET=0
          Then If Checa_Supervisor()
                 Then If EXCLUSAO_C()
                        Then CHAVEC=9
                             CHAVET=8
                             QuitLoop
                      EndIf
               EndIf
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Codigo Remetente":
            CAMPO="Hora de Saida"
            CHAVET=9
            QuitLoop
       Case Field()="Codigo Destinatario":
            Moveto [Nome Fantasia-Remet]     
       OtherWise:
            Left
       EndSwitch
  Case Retval="ENTER":
       If IsBlank([]) 
          Then If Field()="Codigo Remetente" Or
                  Field()="Codigo Destinatario"
                  Then Loop
               EndIf
       EndIf
       Switch
         Case Field()="Codigo Remetente"   : 
               If Busca_Destinat()
                  Then Moveto [Codigo Destinatario]
              EndIf
         Case Field()="Cidade-Destinatario" or Field()="Cidade-Remetente":
              If Busca_Lookup("Cidade",[],"SM")
                Then 
                   Switch
                    Case Field()="Cidade-Remetente":
                         [Cidade-Remetente ]=REG_BUSCA_LOOKUP["Cidade"]  
                         [Estado-Remetente ]=REG_BUSCA_LOOKUP["UF"    ]
                         Moveto [Estado-Remetente]
                    Case Field()="Cidade-Destinatario":
                         [Cidade-Destinatario ]=REG_BUSCA_LOOKUP["Cidade"]  
                         [Estado-Destinatario ]=REG_BUSCA_LOOKUP["UF"    ]
                         Moveto [Estado-Destinatario]
                   EndSwitch
                         
              EndIf
         Case Field()="CNPJ_CPF-Destinatario" or Field()="CNPJ_CPF-Remetente":
              VSDGCNPJ=[]
              If VSDGCNPJ="00.000.000/0000-00" Or
                 VSDGCNPJ="000.000.000-00" Or
                 Not Checa_CGC_CPF_Formatado(VSDGCNPJ) 
                 Then ;Mensagem("CNPJ/CPF inv lido !")
                      Loop
                 Else Right
              EndIf
         Case Field()="Inscricao Estadual-Remet" or Field()="Inscricao Estadual-Destin":   
              VSDGIE  =[]
              If Field()="Inscricao Estadual-Remet"
                Then VSDGCNPJ=[CNPJ_CPF-Remetente   ]
                     VSDGUF  =[Estado-Remetente     ]
                Else VSDGCNPJ=[CNPJ_CPF-Destinatario]
                     VSDGUF  =[Estado-Destinatario  ]
              EndIf            
                     
              Right
         Case Field()="Estado-Destinatario":
              QuitLoop 
         Case Field()="Codigo Destinatario":
              If Busca_Destinat()
                Then QuitLoop
              EndIf   
         OtherWise:
              Right
       EndSwitch
  EndSwitch
EndWhile
SetaCorRegistro("Padrao")
UnLockRecord

Moveto "Notac"
SetaCorRegistro("Editar")

EndProc ;NotaCTR()

;*******************************************************************************
;* Rotina para Checa Campos NotaCTR                                            *
;*******************************************************************************
Proc Checagem_CTR()

tabela=Table()
Moveto "NotaCTR"

MSG=""
Switch
  Case IsBlank([Codigo Remetente         ]):MSG=MSG+"Codigo Remetente Invalido !//"
  Case IsBlank([Codigo Destinatario      ]):MSG=MSG+"Codigo Destinatario Invalido !//"           
  Case IsBlank([Cidade-Remetente         ]):MSG=MSG+"Cidade Remetente Invalida !//"
  Case IsBlank([Cidade-Destinatario      ]):MSG=MSG+"Cidade Destinatario Invalida !//"
  Case IsBlank([Estado-Remetente         ]):MSG=MSG+"Estado Remetente Invalido !//"
  Case IsBlank([Estado-Destinatario      ]):MSG=MSG+"Estado Destinatario Invalido !//"
EndSwitch  

If Not IsBlank([CNPJ_CPF-Remetente]) Or 
   Not IsBlank([CNPJ_CPF-Destinatario])
   Then 
   For i from 1 to 2
     If i=1
      Then VSDGCNPJ=[CNPJ_CPF-Remetente   ]
           a="Remetente" 
      Else VSDGCNPJ=[CNPJ_CPF-Destinatario]
           a="Destinatario" 
     EndIf 
     If VSDGCNPJ="00.000.000/0000-00" Or
        VSDGCNPJ="000.000.000-00" 
        Then Mensagem("CNPJ/CPF "+a+" inv lido !//"+" Ou (Formato CNPJ=##.###.###/####-##, CPF=###.###.###-##) Incorreto !")
        Else If Not Checa_CGC_CPF_Formatado(VSDGCNPJ) 
              Then ;MSG=MSG+"CNPJ/CPF Remetente/Destinatario Inv lido //!"
             EndIf 
     EndIf
   EndFor  
   Else MSG=MSG+"CNPJ/CPF Remetente/Destinatario Inv lido //!"
EndIf
     
If Not IsBlank([Inscricao Estadual-Remet]) or 
   Not IsBlank([Inscricao Estadual-Destin])
   Then 
   For i from 1 to 2
     If i=1
      Then VSDGIE  =[Inscricao Estadual-Remet ]
           VSDGCNPJ=[CNPJ_CPF-Remetente       ]
           VSDGUF  =[Estado-Remetente         ]
      Else VSDGIE  =[Inscricao Estadual-Destin]
           VSDGCNPJ=[CNPJ_CPF-Destinatario    ]
           VSDGUF  =[Estado-Destinatario      ]
     EndIf            
             
     If Len(VSDGCNPJ)=18
       Then If VSDGIE<>"ISENTO"
              Then Aguarde("Validando IE")
                   If Not Valida_IE(VSDGIE,VSDGUF)
                     Then ;MSG=MSG+"IE Remetente/Destinatario Inv lida !"
                   EndIf
            EndIf  
     EndIf
   EndFor  
   Else MSG=MSG+"IE Remetente/Destinatario Inv lida !"
EndIf    

Moveto tabela
 
If MSG<>""
  Then Mensagem(MSG)
       Return False
  Else Return True
EndIf

EndProc ;Checagem_CTR()

;*******************************************************************************
;* Rotina Busca Registro na Destinat                                           *
;*******************************************************************************
Proc Busca_Destinat()

If Busca_Lookup("Codigo",[],"")
  Then
    Switch 
     Case Field()="Codigo Remetente":
        [Codigo Remetente          ]= REG_BUSCA_LOOKUP["Codigo"                ]  
        [Nome Fantasia-Remet       ]= REG_BUSCA_LOOKUP["Nome Fantasia EmitDest"]  
        [Razao Social-Remetente    ]= REG_BUSCA_LOOKUP["Razao Social"          ] 
        [Endereco-Remetente        ]= REG_BUSCA_LOOKUP["Endereco"              ]  
        [Bairro-Remetente          ]= REG_BUSCA_LOOKUP["Bairro"                ]  
        [Cidade-Remetente          ]= REG_BUSCA_LOOKUP["Cidade"                ]  
        [CEP-Remetente             ]= REG_BUSCA_LOOKUP["CEP"                   ]  
        [Estado-Remetente          ]= REG_BUSCA_LOOKUP["UF"                    ]  
        [Tipo Pessoa_Remet         ]= REG_BUSCA_LOOKUP["Tipo Pessoa"           ]  
        [Inscricao Estadual-Remet  ]= REG_BUSCA_LOOKUP["IE"                    ]  
        [CNPJ_CPF-Remetente        ]= REG_BUSCA_LOOKUP["CGC"                   ]
     Case Field()="Codigo Destinatario":
        [Codigo Destinatario       ]= REG_BUSCA_LOOKUP["Codigo"                ] 
        [Nome Fantasia_Destinat    ]= REG_BUSCA_LOOKUP["Nome Fantasia EmitDest"]
        [Razao Social-Destinatario ]= REG_BUSCA_LOOKUP["Razao Social"          ]
        [Endereco-Destinatario     ]= REG_BUSCA_LOOKUP["Endereco"              ]
        [Bairro-Destinatario       ]= REG_BUSCA_LOOKUP["Bairro"                ]
        [Cidade-Destinatario       ]= REG_BUSCA_LOOKUP["Cidade"                ]
        [CEP-Destinatario          ]= REG_BUSCA_LOOKUP["CEP"                   ]
        [Estado-Destinatario       ]= REG_BUSCA_LOOKUP["UF"                    ]
        [Tipo Pessoa_Destin        ]= REG_BUSCA_LOOKUP["Tipo Pessoa"           ]
        [Inscricao Estadual-Destin ]= REG_BUSCA_LOOKUP["IE"                    ]
        [CNPJ_CPF-Destinatario     ]= REG_BUSCA_LOOKUP["CGC"                   ]       
    EndSwitch
  Else Return False  
EndIf
Return True

EndProc ;Busca_Destinat()

;*******************************************************************************
;* 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, CHAVEC,
        UF_ALIQUOTA_ICMS_INTERNA,
        DESTIN_ATUALIZA_PEDIDOS,
        DP_GERA_DUPLICATA,TPEMPR, ATIVEMPR

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([Data de Emissao])        : Mensagem("Emissao Invalida !")
  Case IsBlank([UF])                     : Mensagem("Estado Invalido !")
  Case IsBlank([CFO])                    : Mensagem("CFOP Invalido !")
  Case IsBlank([Condicao de Pagamento])  : Mensagem("Condicao de Pagamento 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"]
        ATIVEMPR  =REG_BUSCA_LOOKUP["Atividade"]
   Else UF_EMPRESA="??"
        TPEMPR    ="??"
        ATIVEMPR  ="??"
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 [Frete por Conta]<>"1" And [Frete por Conta]<>"2"
   Then Mensagem("Frete por conta: 1-CIF ou 2-FOB !")
        CAMPOS_OK=False
EndIf        
        
If Not CAMPOS_OK
  Then Moveto "NotaC"
       Moveto Field NCAMPO
       Return False
EndIf

;*** Aliquota do Estado ***
If [Frete por Conta]<>""
 Then Moveto "NotaCTR"
      If [Notac->Frete por Conta]="1"
       Then Moveto [Estado-Remetente   ]
       Else Moveto [Estado-Destinatario]
      EndIf  
      If Busca_Lookup("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
      Moveto "NotaC"
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"
CALCULO_NF_AUTOMATICO="A"

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
        CALCULO_NF_AUTOMATICO=REG_BUSCA_LOOKUP["Calcula_Nota"]
        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

;;If CHAVEC=0 And CALCULO_NF_AUTOMATICO="A"
;;   Then CALCULO_NF_AUTOMATICO="L"
;;EndIf   

CALCULO_NF_AUTOMATICO="L"

Moveto "NotaC"

[Consumidor Final]="N"

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 [Numero do Documento]
         Locate NUMDOC
         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 de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Pega_Dados_Item(Origem) 
Private Item_ok, Origem

Item_ok=False

Moveto [Codigo do Item]
Ativa_Lookup()
If E_NUMERICO(VSD_I_CODIGO_ITEM)
   Then If Len(ControlValue("I_Codigo_Item"))<=10
           Then Moveto [Codigo do Item]
                Locate ALINHM(ControlValue("I_Codigo_Item"),10)
           Else Moveto [Codigo de Barras]
                Locate IndexOrder by "cod_barras" ControlValue("I_Codigo_Item")
        EndIf
   Else Moveto [Referencia]
        Locate IndexOrder by "referencia" ControlValue("I_Codigo_Item")
EndIf
If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       KeyPress "ESC"

       While True

         If REG_BUSCA_LOOKUP["Inativo"]="S"
            Then Mensagem("Este item://"+REG_BUSCA_LOOKUP["Codigo do Item"]+" "+
                           REG_BUSCA_LOOKUP["Descricao do Item"]+"//"+"Referˆncia: "+
                           REG_BUSCA_LOOKUP["Referencia"]+"//"+
                          "Fornecedor: "+REG_BUSCA_LOOKUP["Codigo Fornecedor"]+"// // esta inativo !")
                 QuitLoop
         EndIf    

         VSD_I_Codigo_Item =REG_BUSCA_LOOKUP["Codigo do Item"]
         [Codigo do Item]  =VSD_I_Codigo_Item
         Pega_Preco("Novo")
         If Origem="Codigo_Barras"
            Then If [Preco Unitario]<=0
                   Then Mensagem("Item sem tabela de pre‡o !")
                        QuitLoop
                 EndIf
         EndIf               

         If [Tipo do Item]="C" ; Servi‡o
            Then 
                 [Aliquota de ICMS      ]=BlankNum()
                 [Aliquota de IPI       ]=BlankNum()

                 [NCM]=""
                 If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                    Then 
                        [PIS_CST        ]="99"
                        [PIS_Aliquota   ]=BlankNum()

                        [COFINS_CST     ]="99"
                        [COFINS_Aliquota]=BlankNum()
                 EndIf        
                         
                 If SYS_CODIGO_CLIENTE="0296"
                    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

            Else
                 Switch
                   Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
        
                         If Search("VEND",[NotaC->Descricao da Destinacao])=0 Or
                            [NotaC->Tipo Movimento Estoque]="E" Or 
                            [NotaC->TIPO PESSOA]="FISICA"  
                            Then Switch
                                   Case [CSOSN]="101": [CSOSN]="102" 
                                   Case [CSOSN]="201": [CSOSN]="202" 
                                 EndSwitch
                         EndIf
        
                         If (Search("MOSTR",[NotaC->Descricao da Destinacao])>0  Or
                             Search("DEVOL",[NotaC->Descricao da Destinacao])>0  Or          
                             Search("BRIND",[NotaC->Descricao da Destinacao])>0) And
                            SYS_CLIENTE_CONFEC<>""
                            Then [CSOSN]="400"
                         EndIf
        
                         Switch
                           Case [CSOSN]="101" Or [CSOSN]="900":
                                [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                [MVA                 ]=BlankNum()
                                [ICMS_ST_Aliquota    ]=BlankNum()
        
                           Case [CSOSN]="201":
                                [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                 Checa_MVA([Tributacao de ICMS],"")
                                 [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
        
                           Case [CSOSN]="202" Or [CSOSN]="203" Or [CSOSN]="500":
                                [ICMS_CREDSN_Aliquota]=BlankNum()
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                 Checa_MVA([Tributacao de ICMS],"")
                                 [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
        
                           OtherWise:
                                [ICMS_CREDSN_Aliquota]=BlankNum()
                                [MVA                 ]=BlankNum()
                                [ICMS_ST_Aliquota    ]=BlankNum()
                         EndSwitch

                         [Tributacao de Icms]=Pega_TipoTributacao("CSOSN",[CSOSN])
                         
                   OtherWise:
        
                         TribCST=SubStr([Tipo Tributacao],2,2)
                         Switch
                           Case (TribCST="00" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                                (TribCST="10" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                                (TribCST="20" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                                (TribCST="70" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0):
                                [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                
                           Case (TribCST="10" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0) Or
                                (TribCST="70" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0):
                                [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                
                           Case (TribCST="00" Or TribCST="10" Or TribCST="20" Or TribCST="70") And
                                TRIB_ICMS<>"D" And TRIB_ICMS<>"S":
                                [Tributacao de Icms]=TRIB_ICMS
                                [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
                         EndSwitch
        
                         [CSOSN               ]="900"
                         [ICMS_CREDSN_Aliquota]=BlankNum()
        
                         If (TribCST="10" Or TribCST="30" Or TribCST="70")
                            Then Checa_MVA([Tributacao de ICMS],"")
                                 [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                
                            Else [MVA             ]=BlankNum()
                                 [ICMS_ST_Aliquota]=BlankNum()
                         EndIf 
        
                         [Tributacao de ISSQN     ]="N"
                         [Aliquota de ISSQN       ]=BlankNum()
                 EndSwitch
                 
         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   ]
         CFOP_EMPRESA    =[NotaC->Codigo da Empresa ]
         CFOP_ATIVEMPRESA=ATIVEMPR
         Play "\\Sistemas\\Exporta\\PegaCFOP"        
         [CFO            ]=CFO_C
         [Tipo Tributacao]=CFOP_TPTRIB

         If Search("VENDA",[NotaC->Descricao da Destinacao])=0 And [NotaC->Tipo Movimento Estoque]<>"S"
            Then [PIS_CST        ]  ="99"
                 [PIS_ALIQUOTA   ]=BlankNum() 
                 [COFINS_CST     ]  ="99"
                 [COFINS_ALIQUOTA]=BlankNum() 
         EndIf   

         Item_Ok=True
         QuitLoop
       EndWhile
  Else KeyPress "ESC"
       Mensagem("Item n„o Cadastrado !")
EndIf

Echo Off
Return Item_ok
EndProc

;*******************************************************************************
;* Rotina para checagem MVA                                                    *
;*******************************************************************************
Proc Checa_MVA(ticms,cod)
Private a,b,cod

If ticms="S" And
   ((Search("VENDA",[NotaC->Descricao da Destinacao])>0 And [NotaC->Tipo Movimento Estoque]="S") Or
    (Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And [NotaC->Tipo Movimento Estoque]="E")) 
   Then 

        Moveto [Codigo MVA]
        If Not BUSCA_LOOKUP("Codigo MVA",[Codigo MVA],"Item "+[Codigo do Item]+", com c¢digo MVA n„o cadastrado !")
          Then Return False
        EndIf   
        [MVA         ]=REG_BUSCA_LOOKUP["MVA_1"]
        VSD_I_MVA     =[MVA         ]   
        If UF_EMPRESA=[NotaC->UF] Or (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
           Then Return True
        EndIf   
        
        If REG_BUSCA_LOOKUP["Estados MVA_Ajustado"]="TODOS" Or
          Search([NotaC->UF],REG_BUSCA_LOOKUP["Estados MVA_Ajustado"])>0
          Then a=1+([MVA]/100)
               b=(1-(UF_ALIQUOTA_ICMS/100))/(1-(UF_ALIQUOTA_ICMS_INTERNA/100))
               [MVA]=Round(((a*b)-1)*100,2)
          Else [MVA ]=BlankNum()
               [Tributacao de ICMS]="O"
               VSD_I_TICMS=[Tributacao de ICMS]
        EndIf
        VSD_I_MVA     =[MVA         ]   
   Else [Codigo MVA  ]=""
        [MVA         ]=BlankNum()   
        VSD_I_MVA     =[MVA         ]   
EndIf
Return True
EndProc
 
;*******************************************************************************
;* 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)

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

If INICIO_DIALOG
   Then If CHAVEI=0
           ;;If SYS_CODIGO_CLIENTE="0003"
           ;;   Then Campo="I_Modelo_Item"
           ;;   Else Campo="I_Quantidade"
           ;;EndIf
           Then Switch
                  Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"                 
                  Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                  Case PARAM_TAMANHO="S"             : Campo="I_Tamanho"
                  Case SYS_CODIGO_CLIENTE="0003"     : Campo="I_Modelo_Item"
                  Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                  Case PARAM_CPGTO_ITEM="S"          : Campo="I_Condicao_Pagamento"
                  OtherWise                          : Campo="I_Quantidade"
                EndSwitch                
           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 Not Opcao_Ver And (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
   Then

        VSD_I_BC_ICMS     =BlankNum()
        VSD_I_Valor_ICMS  =BlankNum()

        VSD_I_Valor_CSOSN =BlankNum() 

        VSD_I_BC_ST       =BlankNum()
        VSD_I_Valor_ST    =BlankNum()
   
        VSD_I_BC_IPI      =BlankNum()
        VSD_I_Valor_IPI   =BlankNum()
   
        VSD_I_BC_ISSQN    =BlankNum()
        VSD_I_Valor_ISSQN =BlankNum()

        VSD_I_BC_PIS      =BlankNum()                             
        VSD_I_Valor_PIS   =BlankNum()
       
        VSD_I_BC_COFINS   =BlankNum()                             
        VSD_I_Valor_COFINS=BlankNum()
   
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",
           "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"] = -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"] = -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_CSOSN2("","")
                      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"                  Or
                 Campo="I_Preco_Unitario"           Or
                 Campo="I_Taxa_Desconto_Unitario"   Or
                 Campo="I_Valor_Desconto_Unitario"  Or
                 Campo="I_Preco_Total"              Or
                 Campo="I_CST_Item"                 Or 
                 Campo="I_Comissao_Item"     : Campo="I_Quantidade"

            Case Campo="I_CST_Item"     Or                           
                 Campo="I_CSOSN"             : Campo="I_Quantidade"
            Case Campo="I_RBC_ICMS"     Or
                 Campo="I_AICMS"        Or
                 Campo="I_BC_ICMS"      Or
                 Campo="I_Valor_ICMS"        : 
                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                    Then Campo="I_CSOSN"
                    Else Campo="I_CST_Item"
                 EndIf
  
            Case Campo="I_ACSOSN"        Or
                 Campo="I_Valor_CSOSN"       : Campo="I_CSOSN"
  
            Case Campo="I_MVA"          Or
                 Campo="I_AST"          Or
                 Campo="I_BC_ST"        Or
                 Campo="I_Valor_ST"     Or
                 Campo="I_CST_IPI"      Or     
                 Campo="I_CFOP"              : 
                  If VSD_I_Tipo_Item="C"
                    Then Campo="I_TISSQN"
                    Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                            Then Campo="I_CSOSN"
                            Else Campo="I_CST_Item"
                         EndIf
                 EndIf
                  
            Case Campo="I_AIPI"         Or
                 Campo="I_Valor_IPI"    Or  
                 Campo="I_BC_IPI"            : Campo="I_CST_IPI"
            
            Case Campo="I_TISSQN"            :
                 If VSD_I_Tipo_Item="C"
                    Then Campo="I_Quantidade"
                    Else Campo="I_CST_IPI"
                 EndIf
        
            Case Campo="I_AISSQN"       Or
                 Campo="I_BC_ISSQN"     Or
                 Campo="I_Valor_ISSQN"       : Campo="I_TISSQN"

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

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

            Case Campo="I_ACOFINS"      Or
                 Campo="I_BC_COFINS"    Or 
                 Campo="I_Valor_COFINS"      : Campo="I_CST_COFINS"
            
            Case Campo="I_NCM"      Or         
                 Campo="I_CDSERV"   Or
                 Campo="I_MUNSERV"           : Campo="I_CFOP"
                   
            Case Campo="I_Numero_Volumes"    : Campo="I_CFOP"
            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 Mensagem("Item n„o cadastrado !")
                    Else If Pega_Dados_Item("")
                            Then Registro_Item("Ler")
                                 Switch
                                   Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"
                                   Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                                   Case PARAM_TAMANHO="S"             : Campo="I_Tamanho"
                                   Case SYS_CODIGO_CLIENTE="0003"     : Campo="I_Modelo_Item"
                                   Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                                   Case PARAM_CPGTO_ITEM="S"          : Campo="I_Condicao_Pagamento"
                                   OtherWise                          : Campo="I_Quantidade"
                                 EndSwitch
                            Else     
                                 VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                         EndIf        
                 EndIf
            Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")                
                 Switch  
                   Case PARAM_COR_TECIDO="S"        : Campo="I_Codigo_Cor_Tecido"
                   Case PARAM_TAMANHO="S"           : Campo="I_Tamanho"
                   Case SYS_CODIGO_CLIENTE="0003"   : Campo="I_Modelo_Item"
                   Case PARAM_TABPR_ITEM="S"        : Campo="I_Tabela"
                   Case PARAM_CPGTO_ITEM="S"        : Campo="I_Condicao_Pagamento"                      
                   OtherWise                        : Campo="I_Quantidade"
                 EndSwitch                 
            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]
                         If Busca_Lookup("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido,"SM")
                            Then [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=REG_BUSCA_LOOKUP["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=""
                         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]
                         If Busca_Lookup("Codigo da Tabela",VSD_I_Tabela,"SM")
                            Then [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=""
                         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]
                         If Busca_Lookup("Condicao de Pagamento",VSD_I_Condicao_Pagamento,"SM")
                            Then VSD_I_Composicao_Dias=REG_BUSCA_LOOKUP["Composicao de Dias"]
                                 [Condicao de Pagamento]=VSD_I_Condicao_Pagamento
                                 Pega_Preco("Novo")
                                 Campo="I_Composicao_Dias"
                            Else Mensagem("Condicao n„o Cadastrada !")
                                 VSD_I_Condicao_Pagamento=""
                         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_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_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 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  If VSD_I_Tipo_Item="C"
                            Then Campo="I_TISSQN"
                            Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                    Then Campo="I_CSOSN"
                                    Else Campo="I_CST_Item"
                                 EndIf
                         EndIf
                    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 TribCST=SubStr(VSD_I_CST_Item,2,2)
                                 
                                 VSD_I_TICMS=Pega_TipoTributacao("ICMS",VSD_I_CST_Item) 

                                 VSD_I_CSOSN      =SubStr(VSD_I_CST_Item,1,1)+"900"
                                 VSD_I_ACSOSN     =BlankNum()
                                 VSD_I_Valor_CSOSN=BlankNum() 

                                 Switch
                                  Case (TribCST="00" Or TribCST="10"):   
                                       If TribCST="00"
                                          Then VSD_I_MVA        =BlankNum()
                                               VSD_I_AST        =BlankNum()
                                               VSD_I_Valor_ST   =BlankNum()
                                               VSD_I_BC_ST      =BlankNum()
                                       EndIf                                     
                                       VSD_I_RBC_ICMS   =BlankNum()   
                                       Campo="I_AICMS"         
                                  Case (TribCST="20" Or TribCST="51" Or TribCST="60" Or TribCST="70" Or TribCST="90"):    
                                       Switch 
                                         Case (TribCST="20" Or TribCST="51"):
                                                             VSD_I_MVA        =BlankNum()
                                                             VSD_I_AST        =BlankNum()
                                                             VSD_I_Valor_ST   =BlankNum()
                                                             VSD_I_BC_ST      =BlankNum()
                                                             Campo="I_RBC_ICMS"
                                         Case TribCST="60" : VSD_I_MVA        =BlankNum()
                                                             VSD_I_BC_ICMS    =BlankNum()
                                                             VSD_I_RBC_ICMS   =BlankNum()
                                                             VSD_I_AICMS      =BlankNum()
                                                             VSD_I_Valor_ICMS =BlankNum() 
                                                             Switch
                                                               Case Search("DEVOL",[NotaC->Descricao da Destinacao])>0: Campo="I_MVA"
                                                               Case Search("VEND" ,[NotaC->Descricao da Destinacao])>0: Campo="I_CST_IPI"
                                                               OtherWise                                              : Campo="I_MVA"
                                                             EndSwitch
                                         OtherWise         : Campo="I_RBC_ICMS"
                                       EndSwitch  
                                  Case (TribCST="30" Or TribCST="40" Or TribCST="41" Or                                                 
                                        TribCST="50" Or TribCST="51") :                            
                                       If TribCST<>"30"
                                          Then VSD_I_MVA       =BlankNum()
                                               VSD_I_AST       =BlankNum()
                                               VSD_I_BC_ST     =BlankNum()
                                               VSD_I_Valor_ST  =BlankNum()
                                               VSD_I_RBC_ICMS  =BlankNum()
                                               VSD_I_AICMS     =BlankNum()
                                               VSD_I_BC_ICMS   =BlankNum()
                                               VSD_I_Valor_ICMS=BlankNum()
                                               Campo="I_CST_IPI"
                                          Else VSD_I_RBC_ICMS  =BlankNum()
                                               VSD_I_AICMS     =BlankNum()
                                               VSD_I_BC_ICMS   =BlankNum()
                                               VSD_I_Valor_ICMS=BlankNum()
                                               Campo="I_MVA"
                                       EndIf
       												  EndSwitch
               												  
                           Else Mensagem("CST ICMS inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
            Case Campo="I_RBC_ICMS":
                 VSD_I_RBC_ICMS=ControlValue("I_RBC_ICMS")
                 Campo="I_AICMS"
            Case Campo="I_AICMS":
                 VSD_I_AICMS=ControlValue("I_AICMS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Switch
                           Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")                     : Campo="I_ACSOSN"
                           Case Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And TribCST="60"         : Campo="I_MVA"
                           Case (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or TribCST="90"): Campo="I_MVA"
                           OtherWise                                                                          : Campo="I_CST_IPI"
                         EndSwitch  
                    Else Campo="I_BC_ICMS"
                 EndIf                 
            Case Campo="I_BC_ICMS":
                 VSD_I_BC_ICMS=ControlValue("I_BC_ICMS")
                 Campo="I_Valor_ICMS"                 
            Case Campo="I_Valor_ICMS": 
                 VSD_I_Valor_ICMS=ControlValue("I_Valor_ICMS")
                 Switch
                   Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")                     : Campo="I_ACSOSN"
                   Case Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And TribCST="60"         : Campo="I_MVA"
                   Case (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or TribCST="90"): Campo="I_MVA"
                   OtherWise                                                                          : Campo="I_CST_IPI"
                 EndSwitch  

            Case Campo="I_CSOSN":
                 VSD_I_CSOSN=ControlValue("I_CSOSN")
                 If Not IsBlank(VSD_I_CSOSN)
                    Then TribCST=SubStr(Checa_CSOSN2("",VSD_I_CSOSN),2,3)
                         If TribCST<>""
                            Then
                                 Switch
                                  Case TribCST="101"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="102"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="103"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="201"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"10" VSD_I_TICMS="S"
                                  Case TribCST="202"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"10" VSD_I_TICMS="S"
                                  Case TribCST="203"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"30" VSD_I_TICMS="S"
                                  Case TribCST="300"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="400"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="500"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"60" VSD_I_TICMS="S"
                                  Case TribCST="900"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                 EndSwitch

                                 If TribCST<>"900"
                                    Then VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()
                                 EndIf

                                 Switch
                                  Case (TribCST="101" Or TribCST="201"):   
                                       If TribCST="101"
                                          Then VSD_I_MVA        =BlankNum()
                                               VSD_I_AST        =BlankNum()
                                               VSD_I_Valor_ST   =BlankNum()
                                               VSD_I_BC_ST      =BlankNum()
                                       EndIf                                     
                                       Campo="I_ACSOSN"        
                                  Case (TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"):    
                                       VSD_I_ACSOSN     =BlankNum()
                                       VSD_I_Valor_CSOSN=BlankNum()

                                       VSD_I_MVA       =BlankNum()
                                       VSD_I_AST       =BlankNum()
                                       VSD_I_BC_ST     =BlankNum()
                                       VSD_I_Valor_ST  =BlankNum()
                                       VSD_I_RBC_ICMS  =BlankNum()
                                       Campo="I_CST_IPI"               
                                  Case (TribCST="202" Or TribCST="203" Or TribCST="500"):    
                                       VSD_I_ACSOSN     =BlankNum()
                                       VSD_I_Valor_CSOSN=BlankNum()

                                       Switch
                                         Case Search("DEVOL",[NotaC->Descricao da Destinacao])>0 And TribCST="500"          : Campo="I_MVA"
                                         Case (TribCST="202" Or TribCST="203")                                              : Campo="I_MVA"
                                         Case (TribCST="500")                                                               : Campo="I_MVA"
                                               VSD_I_MVA       =BlankNum()
                                               VSD_I_AST       =BlankNum()
                                               VSD_I_BC_ST     =BlankNum()
                                               VSD_I_Valor_ST  =BlankNum()
                                               VSD_I_RBC_ICMS  =BlankNum()
                                               Campo="I_CST_IPI"
                                         OtherWise                                                                          : Campo="I_CST_IPI"
                                       EndSwitch  
                                  Case (TribCST="900") : Campo="I_RBC_ICMS"        
                                 EndSwitch

                            Else Mensagem("CSOSN inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf
            Case Campo="I_ACSOSN":
                 VSD_I_ACSOSN=ControlValue("I_ACSOSN")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Switch
                           Case (TribCST="900")                                                   : Campo="I_MVA"
                           Case (TribCST="201" Or TribCST="202" Or TribCST="203" Or TribCST="500"): Campo="I_MVA"
                           OtherWise                                                              : Campo="I_CST_IPI"
                         EndSwitch  
                    Else Campo="I_Valor_CSOSN"
                 EndIf                 
            Case Campo="I_Valor_CSOSN":
                 VSD_I_Valor_CSOSN=ControlValue("I_Valor_CSOSN")
                 Switch
                   Case (TribCST="900")                                                   : Campo="I_MVA"
                   Case (TribCST="201" Or TribCST="202" Or TribCST="203" Or TribCST="500"): Campo="I_MVA"
                   OtherWise                                                              : Campo="I_CST_IPI"
                 EndSwitch  
            Case Campo="I_MVA":
                 VSD_I_MVA=ControlValue("I_MVA")
                 Campo="I_AST"
            Case Campo="I_AST":
                 VSD_I_AST=ControlValue("I_AST")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_IPI"
                    Else Campo="I_BC_ST"
                 EndIf             
            Case Campo="I_BC_ST":
                 VSD_I_BC_ST=ControlValue("I_BC_ST")
                 Campo="I_Valor_ST"
            Case Campo="I_Valor_ST":
                 VSD_I_Valor_ST=ControlValue("I_Valor_ST")
                 Campo="I_CST_IPI"               
            Case Campo="I_CST_IPI":
                 VSD_I_CST_IPI=ControlValue("I_CST_IPI")
                 If Not IsBlank(VSD_I_CST_IPI)
                    Then TribCST=Checa_CST("IPI",[NotaC->Tipo Movimento Estoque],VSD_I_CST_IPI)
                         If TribCST<>""
                            Then TribCST=VSD_I_CST_IPI
                                 
                                 VSD_I_TIPI=Pega_TipoTributacao("IPI",VSD_I_CST_IPI) 

                                 If VSD_I_TIPI<>"D" And VSD_I_TIPI<>"O"
                                    Then If Not IsBlank(VSD_I_TIPI)
                                            Then VSD_I_BC_IPI   =BlankNum()
                                                 VSD_I_AIPI     =BlankNum()
                                                 VSD_I_Valor_IPI=BlankNum()

                                                 Campo="I_CST_PIS"
                                         EndIf
                                    Else Campo="I_AIPI"
                                EndIf
                            Else Mensagem("CST IPI inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
            Case Campo="I_AIPI":
                 VSD_I_AIPI=ControlValue("I_AIPI")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_PIS"
                    Else Campo="I_BC_IPI"
                 EndIf             
            Case Campo="I_BC_IPI":
                 VSD_I_BC_IPI=ControlValue("I_BC_IPI")
                 Campo="I_Valor_IPI"                 
            Case Campo="I_Valor_IPI":
                 VSD_I_Valor_IPI=ControlValue("I_Valor_IPI")
                 Campo="I_CST_PIS"

            Case Campo="I_TISSQN":
                 VSD_I_TISSQN=ControlValue("I_TISSQN")

                 If Not IsBlank(VSD_I_TISSQN)
                    Then TribCST=Checa_CST("ISSQN","",VSD_I_TISSQN)
                         If TribCST<>""
                            Then If VSD_I_TISSQN="N"
                                    Then VSD_I_BC_ISSQN   =BlankNum()
                                         VSD_I_AISSQN     =BlankNum()
                                         VSD_I_Valor_ISSQN=BlankNum()
        
                                         If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                                            Then Campo="I_CFOP"
                                            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 (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                            Then Campo="I_CFOP"
                            Else Campo="I_CST_PIS"
                         EndIf   
                    Else Campo="I_BC_ISSQN"
                 EndIf             
            Case Campo="I_BC_ISSQN":
                 VSD_I_BC_ISSQN=ControlValue("I_BC_ISSQN")
                 Campo="I_Valor_ISSQN"                 
            Case Campo="I_Valor_ISSQN":
                 VSD_I_Valor_ISSQN=ControlValue("I_Valor_ISSQN")
                 If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                    Then Campo="I_CFOP"
                    Else Campo="I_CST_PIS"
                 EndIf   

            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_BC_PIS   =BlankNum()
                                         VSD_I_APIS     =BlankNum()
                                         VSD_I_Valor_PIS=BlankNum()
                                         Campo="I_CST_COFINS"
                                    Else Campo="I_APIS"
                                EndIf
                            Else Mensagem("CST PIS inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
            Case Campo="I_APIS":
                 VSD_I_APIS=ControlValue("I_APIS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_COFINS"
                    Else Campo="I_BC_PIS"
                 EndIf             
            Case Campo="I_BC_PIS":
                 VSD_I_BC_PIS=ControlValue("I_BC_PIS")
                 Campo="I_Valor_PIS"                 
            Case Campo="I_Valor_PIS":
                 VSD_I_Valor_PIS=ControlValue("I_Valor_PIS")
                 Campo="I_CST_COFINS"

            Case Campo="I_CST_COFINS":
                 VSD_I_CST_COFINS=ControlValue("I_CST_COFINS")
                 If IsBlank(VSD_I_CST_COFINS)
                    Then VSD_I_CST_COFINS="99"
                 EndIf        
                 If Not IsBlank(VSD_I_CST_COFINS)
                    Then TribCST=Checa_CST("COFINS",[NotaC->Tipo Movimento Estoque],VSD_I_CST_COFINS)
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then VSD_I_BC_COFINS   =BlankNum()
                                         VSD_I_ACOFINS     =BlankNum()
                                         VSD_I_Valor_COFINS=BlankNum()
                                         Campo="I_CFOP"
                                    Else Campo="I_ACOFINS"
                                EndIf
                            Else Mensagem("CST COFINS inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf
            Case Campo="I_ACOFINS":
                 VSD_I_ACOFINS=ControlValue("I_ACOFINS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CFOP"
                    Else Campo="I_BC_COFINS"
                 EndIf             
            Case Campo="I_BC_COFINS":
                 VSD_I_BC_COFINS=ControlValue("I_BC_COFINS")
                 Campo="I_Valor_COFINS"                 
            Case Campo="I_Valor_COFINS":
                 VSD_I_Valor_COFINS=ControlValue("I_Valor_COFINS")
                 Campo="I_CFOP"

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

                 Moveto "NotaC"
                 Moveto [CFO]
                 If Busca_Lookup("Codigo Fiscal de Operacao",VSD_I_CFOP,"CFOP "+VSD_I_CFOP+" n„o Cadastrado !")
                    Then Switch
                            Case SubStr(VSD_I_CFOP,1,1)<>SubStr([NotaC->CFO],1,1):
                                 Mensagem("CFOP "+VSD_I_CFOP+" difere da OF "+[NotaC->CFO]+" !")
                            OtherWise: 
                                 If VSD_I_Tipo_Item="C"
                                    Then VSD_I_NCM="" 
                                         Campo="I_CDSERV"
                                    Else VSD_I_CDSERV =BlankNum()
                                         VSD_I_MUNSERV=BlankNum()     
                                         VSD_I_UFSERV =""
                                         Campo="I_NCM"
                                 EndIf
                          EndSwitch
                 EndIf
                 Moveto "NotaI"
                 Echo Off

            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 If PARAM_VOLUMES="S"
                    Then Campo="I_Numero_Volumes"
                    Else AcceptDialog
                 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_Condicao_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  "
   Else TECLA=TECLA+"            "
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_Codigo_Cor_Tecido"      : MSGCAMPO="Codigo da cor/tecido"
  Case Campo="I_Descricao_Cor_Tecido"   : MSGCAMPO="Descri‡Æo da cor/tecido"
  Case Campo="I_Tamanho"                : MSGCAMPO="Tamanho"
  Case Campo="I_Modelo_Item"            : MSGCAMPO="Sigla do modelo"
  Case Campo="I_Tabela"                 : MSGCAMPO="Codigo da tabela de pre‡o"
  Case Campo="I_Condicao_Pagamento"     : MSGCAMPO="Codigo da condi‡Æo de pagamento"
  Case Campo="I_Composicao_Dias"        : MSGCAMPO="Composi‡Æo de dias"

  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_BC_ICMS"                : MSGCAMPO="Base de c lculo do ICMS com seus rateios proporcionais"  
  Case Campo="I_Valor_ICMS"             : MSGCAMPO="Valor do ICMS"

  Case Campo="I_ACSOSN"                 : MSGCAMPO="Aliquota de ICMS/Aproveitamento de credito SIMPLES NACIONAL"
  Case Campo="I_Valor_CSOSN"            : MSGCAMPO="Valor do ICMS/Aproveitamento de credito SIMPLES NACIONAL"

  Case Campo="I_MVA"                    : MSGCAMPO="Margem de valor agregado para base c lculo Subst.Tribut ria"
  Case Campo="I_AST"                    : MSGCAMPO="Aliquota da Subst.Tribut ria"
  Case Campo="I_BC_ST"                  : MSGCAMPO="Base de c lculo da Subst.Tribut ria com seus rateios proporcionais"  
  Case Campo="I_Valor_ST"               : MSGCAMPO="Valor da Subst.Tribut ria"

  Case Campo="I_CST_IPI"                : MSGCAMPO="Codigo situa‡„o tributaria/IPI"
  Case Campo="I_AIPI"                   : MSGCAMPO="Aliquota de IPI"
  Case Campo="I_BC_IPI"                 : MSGCAMPO="Base de c lculo do IPI com seus rateios proporcionais"  
  Case Campo="I_Valor_IPI"              : MSGCAMPO="Valor do IPI"

  Case Campo="I_AISSQN"                 : MSGCAMPO="Aliquota do ISSQN"
  Case Campo="I_BC_ISSQN"               : MSGCAMPO="Base de c lculo do ISSQN com seus rateios proporcionais"  
  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_BC_PIS"                 : MSGCAMPO="Base de c lculo do PIS com seus rateios proporcionais"  
  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_BC_COFINS"              : MSGCAMPO="Base de c lculo do COFINS com seus rateios proporcionais"  
  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_NCM"                    : MSGCAMPO="NCM"
  Case Campo="I_CFOP"                   : MSGCAMPO="CFOP p/ este Item"
  Case Campo="I_CSOSN"                  : MSGCAMPO="ICMS - C¢digo de situa‡Æo da opera‡Æo no Simples Nacional"

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

  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  "
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 Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()

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
    @ 01,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  @ 03,00 "[F8]Inf.Adic->" For "I_InfAdic"
   Accept @ 03,18 Width 59 "A100" picture "!*!" Tag "I_InfAdic" to VSD_I_InfAdic

   Label  @ 04,01 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 05,01 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Accept @ 05,07 Width 20 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   Label  @ 04,28 "TM" For "I_Tamanho"
   Accept @ 05,28 Width 05 "A2" picture "!*!" Tag "I_Tamanho" to VSD_I_Tamanho
   Label  @ 04,33 "Modelo" For "I_Modelo_Item"
   Accept @ 05,34 Width 07 "A4" picture "!*!" Tag "I_Modelo_Item" to VSD_I_Modelo_Item
   Label  @ 04,42 "Tabela" For "I_Tabela"
   Accept @ 05,42 Width 08 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela
   Label  @ 04,50 "CPG" For "I_Condicao_Pagamento"
   Accept @ 05,51 Width 5 "A2" picture "#*#" Tag "I_Condicao_Pagamento" to VSD_I_Condicao_Pagamento
   Label  @ 04,55 "Comp. Dias" For "I_Composicao_Dias"
   Accept @ 05,55 Width 22 "A50" picture "!*!" Tag "I_Composicao_Dias" to VSD_I_Composicao_Dias

   Label  @ 06,01 "Quantidade" For "I_Quantidade"
   Accept @ 07,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 06,15 "UN" For "I_UN_Item"
   Accept @ 07,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 06,21 "Pr.Unitario" For "I_Preco_Unitario"
	 Accept @ 07,21 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 06,33 "%" For "I_Taxa_Desconto_Unitario"
   Accept @ 07,34 Width 10 "N" picture "#*#.[####]" Tag "I_Taxa_Desconto_Unitario" to VSD_I_Taxa_Desconto_Unitario
   Label  @ 06,35 "/Vr.Desconto" For "I_Valor_Desconto_Unitario"
   Accept @ 07,45 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_Desconto_Unitario" to VSD_I_Valor_Desconto_Unitario
   Label  @ 06,57 "Pr.Total" For "I_Preco_Total"
   Accept @ 07,58 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

   Label  @ 08,01 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 09,01 Width 13 "$" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 08,21 "Pr.Tabela" For "I_Preco_Tabela"
   Accept @ 09,21 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   Label  @ 08,33 "% Comiss„o" For "I_Comissao_Item"
   Accept @ 09,34 Width 10 "N" picture "#*#.[##]" Tag "I_Comissao_Item" to VSD_I_Comissao_Item

   @ 10,00 ?? "Impostos CST  %Red     Aliq.  BC        Valor"
   
   Label  @ 11,00 "  ICMS" For "I_CST_Item"
   Accept @ 11,08 Width 06 "A3" picture "!*!" Tag "I_CST_Item" to VSD_I_CST_Item   
   Accept @ 11,13 Width 10 "N" picture "#*#.[####]" Tag "I_RBC_ICMS" to VSD_I_RBC_ICMS
   Accept @ 11,22 Width 08 "N" picture "#*#.[##]" Tag "I_AICMS" to VSD_I_AICMS
   Accept @ 11,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_ICMS" to VSD_I_BC_ICMS     
   Accept @ 11,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ICMS" to VSD_I_Valor_ICMS

   Label  @ 12,00 " CSOSN" For "I_CSOSN"
   Accept @ 12,08 Width 07 "A4" picture "####" Tag "I_CSOSN" to VSD_I_CSOSN
   PaintCanvas Attribute 112 12, 14, 12, 21
   Accept @ 12,22 Width 08 "N" picture "#*#.[##]" Tag "I_ACSOSN" to VSD_I_ACSOSN
   PaintCanvas Attribute 112 12, 29, 12, 40
   Accept @ 12,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_CSOSN" to VSD_I_Valor_CSOSN

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

   Label  @ 14,00 "   IPI" For "I_CST_IPI"
   Accept @ 14,08 Width 06 "A2" picture "!*!" Tag "I_CST_IPI" to VSD_I_CST_IPI  
   Accept @ 14,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_IPI" to VSD_I_RBC_IPI
   Accept @ 14,22 Width 08 "N" picture "#*#.[##]" Tag "I_AIPI" to VSD_I_AIPI
   Accept @ 14,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_IPI" to VSD_I_BC_IPI  
   Accept @ 14,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_IPI" to VSD_I_Valor_IPI

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

   Label  @ 16,00 "   PIS" For "I_CST_PIS"    
   Accept @ 16,08 Width 06 "A2" picture "!*!" Tag "I_CST_PIS" to VSD_I_CST_PIS  
   Accept @ 16,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_PIS" to VSD_I_RBC_PIS
   Accept @ 16,22 Width 08 "N" picture "#*#.[##]" Tag "I_APIS" to VSD_I_APIS
   Accept @ 16,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_PIS" to VSD_I_BC_PIS  
   Accept @ 16,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_PIS" to VSD_I_Valor_PIS

   Label  @ 17,00 "COFINS" For "I_CST_COFINS"   
   Accept @ 17,08 Width 06 "A2" picture "!*!" Tag "I_CST_COFINS" to VSD_I_CST_COFINS 
   Accept @ 17,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_COFINS" to VSD_I_RBC_COFINS
   Accept @ 17,22 Width 08 "N" picture "#*#.[##]" Tag "I_ACOFINS" to VSD_I_ACOFINS
   Accept @ 17,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_COFINS" to VSD_I_BC_COFINS  
   Accept @ 17,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_COFINS" to VSD_I_Valor_COFINS

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

   Label  @ 14,51 "Servi‡o" For "I_CDSERV"
   Accept @ 15,52 Width 10 "N" picture "#*#" Tag "I_CDSERV" to VSD_I_CDSERV
   Label  @ 14,62 "Munic¡po" For "I_MUNSERV"
   Accept @ 15,62 Width 10 "N" picture "#*#" Tag "I_MUNSERV" to VSD_I_MUNSERV
   Label  @ 14,72 "UF" For "I_UFSERV"
   Accept @ 15,72 Width 5  "A2" picture "!!" Tag "I_UFSERV" to VSD_I_UFSERV

   Label  @ 16,51 "Qtde/Volumes" For "I_Numero_Volumes"
   Accept @ 16,65 Width 12 "N" picture "#*#.[###]" Tag "I_Numero_Volumes" to VSD_I_Numero_Volumes
   Label  @ 17,51 "Peso Liquido" For "I_Peso_Liquido"
   Accept @ 17,65 Width 12 "N" picture "#*#.[###]" Tag "I_Peso_Liquido" to VSD_I_Peso_Liquido
   Label  @ 18,51 "Peso Embal.." For "I_Peso_Embalagem"
   Accept @ 18,65 Width 12 "N" picture "#*#.[###]" Tag "I_Peso_Embalagem" to VSD_I_Peso_Embalagem

Enddialog
Mouse Show
If RetVal
   Then Finaliza_Registro(True)
   Else Finaliza_Registro(False)
EndIf
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

       [II_BC                     ]=VSD_II_BC
       [II_Valor DespAduan        ]=VSD_II_Valor_Desp
       [II_Valor IOF              ]=VSD_II_Valor_IOF
       [II_Valor Imposto          ]=VSD_II_Valor_Imp

       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_II_BC                    =[II_BC                     ]
       VSD_II_Valor_Desp            =[II_Valor DespAduan        ]
       VSD_II_Valor_IOF             =[II_Valor IOF              ]
       VSD_II_Valor_Imp             =[II_Valor Imposto          ]

       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")
   Else If CHAVEI=8
           Then CopyFromArray RegItem
                Exclusao_I()
        EndIf
EndIf
EndProc   ; (Finaliza_Registro)

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DIGITAF()
Private VRBCICMS_CREDSN, nitens

TabelaRefC="NotaC"    TabelaRefI="NotaI" 

Aguarde("Somando itens")

;-------- Variaveis para calculo de impostos por item --------------------------
Release Vars It_tpitem, It_prtotal, It_cfop,
             It_txdescto, It_descto, It_frete, It_seguro, It_outdesp,
             It_cst_icms, It_csosn_icms, It_trib_icms, It_red_icms, It_aliq_icms, It_bc_icms, It_vr_icms,
             It_aliq_icmscred, It_vr_icmscred,
             It_mva, It_aliq_st, It_vc_st, It_vr_st,
             It_cst_ipi, It_trib_ipi, It_aliq_ipi, It_bc_ipi, It_vr_ipi,
             It_trib_issqn, It_aliq_issqn, It_bc_issqn, It_vr_issqn,
             It_cst_pis, It_aliq_pis, It_bc_pis, It_vr_pis,
             It_cst_cofins, It_aliq_cofins, It_bc_cofins, It_vr_cofins 

DynArray It_tpitem[]
DynArray It_prtotal[]
DynArray It_cfop[]

DynArray It_txdescto[]
DynArray It_descto[]
DynArray It_frete[]
DynArray It_seguro[]
DynArray It_outdesp[]

DynArray It_cst_icms[]
DynArray It_trib_icms[]
DynArray It_red_icms[]
DynArray It_aliq_icms[]
DynArray It_bc_icms[]
DynArray It_vr_icms[]

DynArray It_csosn_icms[]
DynArray It_aliq_icmscred[]
DynArray It_vr_icmscred[]

DynArray It_mva[]
DynArray It_aliq_st[]
DynArray It_bc_st[]
DynArray It_vr_st[]

DynArray It_cst_ipi[]
DynArray It_trib_ipi[]
DynArray It_aliq_ipi[]
DynArray It_bc_ipi[]
DynArray It_vr_ipi[]

DynArray It_trib_issqn[]
DynArray It_aliq_issqn[]
DynArray It_bc_issqn[]
DynArray It_vr_issqn[]

DynArray It_cst_pis[]
DynArray It_aliq_pis[]
DynArray It_bc_pis[]
DynArray It_vr_pis[]

DynArray It_cst_cofins[]
DynArray It_aliq_cofins[]
DynArray It_bc_cofins[]
DynArray It_vr_cofins[]

;-------- Variaveis para calculo da nota ---------------------------------------

VRMERC          =0
VRSERV          =0
VRII            =0
VRBC_COMIS      =0
VRBCICMS_CREDSN =0

Moveto TabelaRefI
nitens=0
Scan

  If [Tipo do Item]<>"C"
     Then VRMERC=VRMERC+[Preco Total]
     Else VRSERV=VRSERV+[Preco Total]
  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

  If SubStr(PARAM_DOC_NF,1,3)="NFE" And IsBlank([Tipo Tributacao])
     Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // CST/ICMS inv lido, verificar !")
  EndIf

  ;-------- Variaveis para calculo imposto do item -------------------------------
  nitens=nitens+1
  It_tpitem[nitens]        =[Tipo do Item            ] 
  It_prtotal[nitens]       =[Preco Total             ] 
  It_cfop[nitens]          =[CFO                     ] 

  It_txdescto[nitens]      =BlankNum()  
  It_descto[nitens]        =BlankNum()  
  It_frete[nitens]         =BlankNum()
  It_seguro[nitens]        =BlankNum()  
  It_outdesp[nitens]       =BlankNum()  

  It_trib_icms[nitens]     =[Tributacao de ICMS      ]
  It_cst_icms[nitens]      =[Tipo Tributacao         ]
  It_red_icms[nitens]      =[Aliquota Reduzida BCICMS]
  It_aliq_icms[nitens]     =[Aliquota de ICMS        ]
  It_bc_icms[nitens]       =[ICMS_BC                 ]
  It_vr_icms[nitens]       =[Valor do ICMS           ]

  It_csosn_icms[nitens]    =[CSOSN                   ]
  It_aliq_icmscred[nitens] =[ICMS_CredSN_Aliquota    ]
  It_vr_icmscred[nitens]   =[ICMS_CredSN_Valor       ]
          
  It_mva[nitens]           =[MVA                     ]
  It_aliq_st[nitens]       =[ICMS_ST_Aliquota        ]
  It_bc_st[nitens]         =[ICMS_ST_BC              ]
  It_vr_st[nitens]         =[ICMS_ST_Valor           ]

  It_trib_ipi[nitens]      =[Tributacao de IPI       ]
  It_cst_ipi[nitens]       =[IPI_CST                 ]
  It_aliq_ipi[nitens]      =[Aliquota de IPI         ]
  It_bc_ipi[nitens]        =[IPI_BC                  ]
  It_vr_ipi[nitens]        =[Valor do IPI            ]

  It_trib_issqn[nitens]    =[Tributacao de ISSQN     ]
  It_aliq_issqn[nitens]    =[Aliquota de ISSQN       ]
  It_bc_issqn[nitens]      =[ISSQN_BC                ]
  It_vr_issqn[nitens]      =[Valor do ISSQN          ]

  It_cst_pis[nitens]       =[PIS_CST                 ]
  It_aliq_pis[nitens]      =[PIS_Aliquota            ]
  It_bc_pis[nitens]        =[PIS_BC                  ]
  It_vr_pis[nitens]        =[PIS_Valor               ]

  It_cst_cofins[nitens]    =[COFINS_CST              ]
  It_aliq_cofins[nitens]   =[COFINS_Aliquota         ]
  It_bc_cofins[nitens]     =[COFINS_BC               ]
  It_vr_cofins[nitens]     =[COFINS_Valor            ]

  If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
     SubStr(Directory(),1,1)<>"X"                              And
     (It_csosn_icms[nitens]="101" Or It_csosn_icms[nitens]="201")
     Then VRBCICMS_CREDSN  =VRBCICMS_CREDSN+It_prtotal[nitens]
  EndIf   

  If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
     Then
          It_bc_icms[nitens]       =BlankNum()
          It_vr_icms[nitens]       =BlankNum()

          It_bc_st[nitens]         =BlankNum()
          It_vr_st[nitens]         =BlankNum()

          It_vr_icmscred[nitens]   =BlankNum()

          It_bc_ipi[nitens]        =BlankNum()
          It_vr_ipi[nitens]        =BlankNum()

          It_bc_issqn[nitens]      =BlankNum()
          It_vr_issqn[nitens]      =BlankNum()

          It_bc_pis[nitens]        =BlankNum()
          It_vr_pis[nitens]        =BlankNum()

          It_bc_cofins[nitens]     =BlankNum()
          It_vr_cofins[nitens]     =BlankNum()

  EndIf   

EndScan
LimpAguarde()

CHAVEF=0
CHAVEV=1
COPIOU_REGISTRO=False

CHAVER=1
Moveto "NotaR"
Moveto [Valor    ]   VSVRNFR=ImageCSum()
Moveto "NotaC"

Moveto TabelaRefC

CALC_OF()
Moveto [Valor Despesas Acessorias]

While True

      MSGCAMPO=Field()

      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  F7=NF's Referenciadas  F8=Venctos  PgDn=Finalizar  PgUp  "

      Prompt TECLA

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

    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="F7":
           CHAVER()
           CHAVER=1
      Case RetVal="F8":
           CHAVEV()
           CHAVER=1
      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
           
           OK=True
           Moveto "NotaR"
           If RecordStatus("New") 
            Then Mensagem("O CTR deve ter pelo menos 1(um) Documento Referenciado !")  
                 OK=False
           EndIf 
           
           Moveto "Notac"
           If OK
            Then ATUA_DADOS()
                 QuitLoop
           EndIf 
           
      Case RetVal="ESC":
        Switch
           Case Field()="Valor Despesas Acessorias":
                CHAVEF=9
                QuitLoop
           Case Field()="Tipo de Pagamento":
                Moveto [Valor Despesas Acessorias]
           Case Field()="Forma de Pagamento":
                If PARAM_CPGTO_ITEM="S"
                   Then Moveto [Valor Despesas Acessorias]
                   Else Moveto [Tipo de Pagamento        ]
                EndIf
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Valor Despesas Acessorias" :
                If PARAM_CPGTO_ITEM="S"
                  Then Moveto [Forma de Pagamento]
                  Else Moveto [Tipo de Pagamento ]
                EndIf
                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 Digitacao de Doctos Referenciados                               *
;*******************************************************************************
Proc CHAVER()

SetaCorRegistro("Padrao")
Moveto "NotaR"

While True

  If CHAVER=9 Then QuitLoop EndIf
  
  Moveto [Sequencia]
  End
  SEQ = [Sequencia]
  Down
  Moveto [Valor    ]   VSVRNFR=ImageCSum()
  Moveto [Sequencia]
  Seta_Sequencia(SEQ,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  SetaCorRegistro("Editar")

  While True

        TECLA= "Esc=Retornar  Del=Excluir  "

        Prompt TECLA

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

        Switch
        Case RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               Moveto [Valor    ]   VSVRNFR=ImageCSum()
               Moveto [Sequencia]
               PAGINA("NotaR","MR")
               If EDITAR="S"
                  Then CHAVER=0
                       SEQ=[Sequencia]
                       DIGITAR()
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then Del
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             CHAVER=9
             Del
             QuitLoop
        Case Retval="ENTER":
             If Not Seta_Sequencia(SEQ,True)
                Then Del
                     QuitLoop
             EndIf
             SEQ=[]
             Del
             Locate SEQ
             If Retval
                Then CHAVER=0
                Else CHAVER=1
                     End Down
                     [Sequencia]=SEQ
                     UnLockRecord
                     Locate SEQ
             EndIf
             DIGITAR()
             QuitLoop
        EndSwitch     
  EndWhile
EndWhile

SetaCorRegistro("Padrao")

Moveto "NotaC"
Moveto [Valor Despesas Acessorias]
SetaCorRegistro("Editar")

EndProc   ;  (ChaveR)

;*******************************************************************************
;* Rotina para Digitacao dos Documentos Referenciados                          *
;*******************************************************************************
Proc DigitaR()

Moveto [Data_Documento]

While True
  
  TECLA= " Esc=Retornar  Del=Excluir  "
  If Field()="Modelo_Documento"
   Then TECLA=TECLA+"F1=Tabelas  "
  EndIf
  
  Prompt TECLA
  Switch 
    Case Field()="Data_Documento"    :MSGCAMPO="Data do Documento"
    Case Field()="Modelo_Documento"  :MSGCAMPO="Modelo do Documento"
    Case Field()="Numero_Documento"  :MSGCAMPO="Numero do Documento"
    Case Field()="Serie_Documento"   :MSGCAMPO="Serie do Documento"
    Case Field()="SubSerie_Documento":MSGCAMPO="SubSerie do Documento"
    Case Field()="Valor"             :MSGCAMPO="Valor do Documento"
  EndSwitch  

  Wait Field
       Message MSGCAMPO
       Until "ESC","ENTER","DEL","F1"

  Switch
  Case RetVal="F1":
       If Field()="Modelo_Documento"
          Then  
            Echo Normal
            Echo Off
            ShowPopup " Modelo do Documento " CENTERED
             "~1~ - [55] NF-e   , Nota fiscal eletr“nica                ":" Nota fiscal eletr“nica                        ":"55",
             "~2~ - [01] NF     , Nota fiscal                           ":" Nota fiscal modelos 1 e 1-A                   ":"01",
             "~3~ - [04] NFPR   , Nota fiscal produtor rural            ":" Nota fiscal produtor rural                    ":"04",
             "~4~ - [57] CT-e   , Conhecimento de Transporte eletr“nico ":" Conhecimento de Transporte eletr“nico         ":"57",
             "~5~ - [2B] ECF-MR , Cupom Fiscal ECF-MR                   ":" Cupom Fiscal emitido por Maquina registradora ":"2B",
             "~6~ - [2C] ECF-PDV, Cupom Fiscal ECF-PDV                  ":" Cupom Fiscal emitido por PDV                  ":"2C",
             "~7~ - [2D] ECF-IF , Cupom Fiscal ECF-IF                   ":" Cupom Fiscal emitido por impressora fiscal    ":"2D",
             "~C~ancelar                                                ":" Cancelar a Opera‡„o                           ":"CANCELAR"
            EndMenu
            To MenuVar
            Echo Off
            
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf                                         
            [Modelo_Documento]=MenuVar
       EndIf     
  Case RetVal="ESC":
       If Field()="Data_Documento"
          Then If QuerDesfazer("")
                  Then If CHAVER=1
                          Then Del
                          Else Undo
                       EndIf
                       QuitLoop
               Endif
          Else Left
       EndIf
  Case RetVal="DEL":
       Confirma()
       If OK="S"
          Then Del
               QuitLoop
       EndIf
  Case RetVal="ENTER": 
       Switch 
        Case Field()="Data_Documento"  :
             If IsBlank([]) Then Loop EndIf
             Moveto [Modelo_Documento]   
        Case Field()="Modelo_Documento":
             []=Alinh() 
             If []="55" Or []="01" Or []="07" Or []="2B" Or []="2C" Or []="2D"
              Then Right
              Else Mensagem("Modelo do Documento Invalido !")
                   Loop 
             EndIf   
        Case Field()="Numero_Documento":
             If IsBlank([]) Or NumVal([])=0
               Then Mensagem("N£mero documento inv lido !") 
                    Loop
               Else Right     
             EndIf    
        Case Field()="Valor": 
             If IsBlank([]) Or NumVal([])=0
                Then Loop
             EndIf
             QuitLoop 
        OtherWise: Right
       EndSwitch
  EndSwitch
EndWhile
EndProc    ; (DigitaR)

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc CALC_OF()
Private TabelaRefC, TabelaRefI, CampoTab, wi,

        VRBCIPI, VRIPI, VRBCICMS, VRICMS, VRBCST, VRST, VRICMS_CREDSN,
        VRBCISSQN, VRISSQN, VRBCPIS, VRPIS, VRBCCOFINS, VRCOFINS,  VRINSS,

        Frete_Valor, Seguro_Valor, OutDesp_Valor, Descto_Valor,
        DIF_Descto_Valor, DIF_Frete_Valor, DIF_Seguro_Valor, DIF_OutDesp_Valor,
        OutrosRateioOk,
        VL_BC_ICMS, VL_BC_ICMS_ST, VL_ICMS_ST,
        TribCST

Aguarde("Calculando valores da nota")

Switch
  Case Table()="Faturac": TabelaRefC="FaturaC"  TabelaRefI="FaturaI"
  Case Table()="Notac"  : TabelaRefC="NotaC"    TabelaRefI="NotaI" 
EndSwitch

Moveto TabelaRefC
CampoTab=Field()

VRBCIPI        =0
VRIPI          =0
VRBCICMS       =0
VRICMS         =0
VRBCST         =0
VRST           =0
VRICMS_CREDSN  =0
VRBCISSQN      =0
VRISSQN        =0
VRBCPIS        =0
VRPIS          =0
VRBCCOFINS     =0
VRCOFINS       =0
VRBCINSS       =0
VRINSS         =0
VRIR           =0

VRNF           =0

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]-[Valor Desconto]

CopyToArray REG_TABELAREFC ; guarda dados registro mestre

;--- Rateio Frete, Seguro, Desconto, Despesas ----------------------------------
Frete_Valor      =0
Seguro_Valor     =0
OutDesp_Valor    =0
Descto_Valor     =0

For wi From 1 to DynArraySize(It_prtotal)

  If It_tpitem[wi]="C" ;servi‡o
     Then 
          OutrosRateioOk=False    ;nÆo rateia frete e outros
          PORC_IT_MERC=0
     Else 
          OutrosRateioOk=True
          PORC_IT_MERC=(It_prtotal[wi]/REG_TABELAREFC["Valor Mercadoria"])*100 
          If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And It_cfop[wi]="5902" ;saida industrializa‡Æo
             Then OutrosRateioOk=False
          EndIf
  EndIf   

  If OutrosRateioOk
     Then It_txdescto[wi]=TXDESCTO_TOTAL
          It_descto[wi]  =NDecimal((REG_TABELAREFC["Valor Desconto"          ]*PORC_IT_MERC)/100,2)
          If REG_TABELAREFC["Frete Incluso na Nota"]="+"
             Then It_frete[wi]=NDecimal((REG_TABELAREFC["Valor do Frete"     ]*PORC_IT_MERC)/100,2)
             Else It_frete[wi]=0           
          EndIf
          It_seguro[wi] =NDecimal((REG_TABELAREFC["Valor do Seguro"          ]*PORC_IT_MERC)/100,2)
          It_outdesp[wi]=NDecimal((REG_TABELAREFC["Valor Despesas Acessorias"]*PORC_IT_MERC)/100,2)

          Descto_Valor  =Descto_Valor +It_descto[wi]
          Frete_Valor   =Frete_Valor  +It_frete[wi]
          Seguro_Valor  =Seguro_Valor +It_seguro[wi]
          OutDesp_Valor =OutDesp_Valor+It_outdesp[wi]

          If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
          If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
          If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
          If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
          If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf

     Else It_txdescto[wi]=BlankNum()
          It_descto[wi]  =BlankNum()
          It_frete[wi]   =BlankNum()
          It_seguro[wi]  =BlankNum()
          It_outdesp[wi] =BlankNum()
  EndIf

EndFor

;--- Calcular diferen‡a totalizadores ------------------------------------------
DIF_Descto_Valor       =NDecimal(REG_TABELAREFC["Valor Desconto"           ]-Descto_Valor ,2)
If REG_TABELAREFC["Frete Incluso na Nota"]="+"
   Then DIF_Frete_Valor=NDecimal(REG_TABELAREFC["Valor do Frete"           ]-Frete_Valor  ,2)
   Else DIF_Frete_Valor=0
EndIf
DIF_Seguro_Valor       =NDecimal(REG_TABELAREFC["Valor do Seguro"          ]-Seguro_Valor ,2)
DIF_OutDesp_Valor      =NDecimal(REG_TABELAREFC["Valor Despesas Acessorias"]-OutDesp_Valor,2)

If DIF_Descto_Valor <>0 Or
   DIF_Frete_Valor  <>0 Or
   DIF_Seguro_Valor <>0 Or
   DIF_OutDesp_Valor<>0 
   Then 
        For wi From 1 to DynArraySize(It_prtotal) 
              
          Switch
            Case It_tpitem[wi]="C" :  ;Igual a Seri‡o
              OutrosRateioOk=False    ;nÆo rateia frete e outros
            OtherWise              :  ;Diferente de servi‡o
              OutrosRateioOk=True     ;rateia frete e outros 
              If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And It_cfop[wi]="5902" ;saida industrializa‡Æo
                 Then OutrosRateioOk=False
              EndIf
          EndSwitch
          If OutrosRateioOk 
             Then 
                  If DIF_Descto_Valor >=0 Or (DIF_Descto_Valor*-1) >=It_descto[wi]
                     Then It_descto[wi] =It_descto[wi] +DIF_Descto_Valor
                          DIF_Descto_Valor=0 
                  EndIf
                  If DIF_Frete_Valor  >=0 Or (DIF_Frete_Valor*-1)  >=It_frete[wi]
                     Then It_frete[wi]  =It_frete[wi]  +DIF_Frete_Valor
                          DIF_Frete_Valor =0
                  EndIf
                  If DIF_Seguro_Valor >=0 Or (DIF_Seguro_Valor*-1) >=It_seguro[wi]
                     Then It_seguro[wi] =It_seguro[wi] +DIF_Seguro_Valor
                          DIF_Seguro_Valor=0
                  EndIf   
                  If DIF_OutDesp_Valor>=0 Or (DIF_OutDesp_Valor*-1)>=It_outdesp[wi]
                     Then It_outdesp[wi]=It_outdesp[wi]+DIF_OutDesp_Valor
                          DIF_OutDesp_Valor=0
                  EndIf   

                  If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
                  If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
                  If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
                  If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
                  If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf
        
          EndIf
          If DIF_Descto_Valor =0 And
             DIF_Frete_Valor  =0 And
             DIF_Seguro_Valor =0 And
             DIF_OutDesp_Valor=0
             Then QuitLoop
          EndIf
          
        EndFor
EndIf
          
;--- Calculando Impostos -------------------------------------------------------
For wi From 1 to DynArraySize(It_prtotal)

  Switch
    Case CALCULO_NF_AUTOMATICO="A":

      ;--- Calculando IPI ----------------------------------------------------------
      If It_aliq_ipi[wi]>0
         Then It_bc_ipi[wi]=It_prtotal[wi]
              If REG_TABELAREFC["Frete Incluso na Nota"]="+" And
                 SubStr(It_cfop[wi],1,1)    ="3" And ; entrada import‡Æo  
                 SubStr(It_cst_icms[wi],1,1)="1"     ; item importa‡Æo direta
                 Then It_bc_ipi[wi]=It_bc_ipi[wi]+It_frete[wi]
              EndIf
              It_vr_ipi[wi]=Round((It_bc_ipi[wi]*It_aliq_ipi[wi])/100,2) 
         Else It_bc_ipi[wi]=BlankNum()   
              It_vr_ipi[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando Base de Calculo ICMS para todas as situa‡äes -----------------
      Switch
        Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
          Switch
            Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)<>"60": 
                 VL_BC_ICMS=It_prtotal[wi]
            Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)="60" And
                 Search("DEVOL",REG_TABELAREFC["Descricao da Destinacao"])>0:
                 VL_BC_ICMS=It_prtotal[wi]
            OtherWise:
                 VL_BC_ICMS=It_prtotal[wi]-It_descto[wi]
          EndSwitch
        OtherWise:
          Switch
            Case OPCAO_RED_BCICMS=3 And It_red_icms[wi]>0 And It_txdescto[wi]>0:
                 VL_BC_ICMS=It_prtotal[wi]
            OtherWise:
                 VL_BC_ICMS=It_prtotal[wi]-It_descto[wi]
          EndSwitch
      EndSwitch
      VL_RED_BC =NDecimal((VL_BC_ICMS*It_red_icms[wi])/100,2)
      VL_BC_ICMS=VL_BC_ICMS-VL_RED_BC                   
      VL_BC_ICMS=VL_BC_ICMS+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
      If REG_TABELAREFC["Consumidor Final"]="S" 
         Then VL_BC_ICMS=VL_BC_ICMS+it_vr_ipi[wi]
      EndIf   

      ;--- Calculando Credito ICMS Simples Nacional ------------------------
      If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
         SubStr(Directory(),1,1)<>"X"                              And
         (It_csosn_icms[wi]="101" Or It_csosn_icms[wi]="201")
         Then It_vr_icmscred[wi]  =Round((VL_BC_ICMS*It_aliq_icmscred[wi])/100,2)
         Else It_aliq_icmscred[wi]  =BlankNum()
              It_vr_icmscred[wi]    =BlankNum()
      EndIf   

      ;--- Calculando ICMS ---------------------------------------------------------
      If It_aliq_icms[wi]>0 
         Then It_bc_icms[wi]    =VL_BC_ICMS
              It_vr_icms[wi]    =Round((It_bc_icms[wi]*It_aliq_icms[wi])/100,2)
         Else It_aliq_icms[wi]  =BlankNum()
              It_bc_icms[wi]    =BlankNum()
              It_vr_icms[wi]    =BlankNum()
      EndIf
    
      ;--- Calculando Substituicao Tributaria --------------------------------------
      If It_aliq_st[wi]>0
         Then
              VL_BC_ICMS_ST=VL_BC_ICMS
              If REG_TABELAREFC["Consumidor Final"]<>"S" 
                 Then VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_vr_ipi[wi] 
              EndIf   
        
              If SYS_CODIGO_CLIENTE="0167"
                 Then VL_BC_ICMS_ST=VL_BC_ICMS_ST-It_frete[wi]     
              EndIf
        
              VL_BC_ICMS_ST=VL_BC_ICMS_ST+Round((VL_BC_ICMS_ST*It_mva[wi])/100,2)
        
              VL_ICMS_ST=Round((VL_BC_ICMS_ST*It_aliq_st[wi])/100,2)
              Switch
                Case It_aliq_icms[wi]>0:
                     VL_ICMS_ST=VL_ICMS_ST-It_vr_icms[wi]
                OtherWise             :
                     VL_ICMS_ST=VL_ICMS_ST-Round((VL_BC_ICMS*UF_ALIQUOTA_ICMS)/100,2)
              EndSwitch
        
              It_bc_st[wi]=VL_BC_ICMS_ST
              It_vr_st[wi]=VL_ICMS_ST
      
         Else It_aliq_st[wi]  =BlankNum()
              It_bc_st[wi]    =BlankNum()
              It_vr_st[wi]    =BlankNum()
      EndIf
    
      ;--- Calculando ISSQN --------------------------------------------------------
      If It_aliq_issqn[wi]>0
         Then It_bc_issqn[wi]=It_prtotal[wi]
              It_vr_issqn[wi]=Round((It_bc_issqn[wi]*It_aliq_issqn[wi])/100,2) 
         Else It_bc_issqn[wi]=BlankNum()    
              It_vr_issqn[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando PIS ----------------------------------------------------------
      If It_aliq_pis[wi]>0
         Then It_bc_pis[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
              It_vr_pis[wi]=Round((It_bc_pis[wi]*It_aliq_pis[wi])/100,2) 
         Else It_bc_pis[wi]=BlankNum()    
              It_vr_pis[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando COFINS -------------------------------------------------------
      If It_aliq_cofins[wi]>0
         Then It_bc_cofins[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
              It_vr_cofins[wi]=Round((It_bc_cofins[wi]*It_aliq_cofins[wi])/100,2) 
         Else It_bc_cofins[wi]=BlankNum()    
              It_vr_cofins[wi]=BlankNum()    
      EndIf

    OtherWise:

  EndSwitch

  ;--- Somando Impostos --------------------------------------------------------
  VRBCIPI        =VRBCIPI      +It_bc_ipi[wi]
  VRIPI          =VRIPI        +It_vr_ipi[wi]
  VRBCICMS       =VRBCICMS     +It_bc_icms[wi]
  VRICMS         =VRICMS       +It_vr_icms[wi]
  VRICMS_CREDSN  =VRICMS_CREDSN+It_vr_icmscred[wi]
  VRBCST         =VRBCST       +It_bc_st[wi]
  VRST           =VRST         +It_vr_st[wi]
  VRBCISSQN      =VRBCISSQN    +It_bc_issqn[wi]
  VRISSQN        =VRISSQN      +It_vr_issqn[wi]
  VRBCPIS        =VRBCPIS      +It_bc_pis[wi]
  VRPIS          =VRPIS        +It_vr_pis[wi]  
  VRBCCOFINS     =VRBCCOFINS   +It_bc_cofins[wi]
  VRCOFINS       =VRCOFINS     +It_vr_cofins[wi]
                                                                          
EndFor

Moveto "NotaC"
Moveto Field CampoTab


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

[Valor BCSubstituicao ICMS]=VRBCST
[Valor Substituicao ICMS  ]=VRST

[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])

VRNF=[Valor Nota Fiscal]

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

If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
   VRICMS_CREDSN>0
   Then
        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 [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

;*** 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 [Valor INSS               ]=0 Then [Valor INSS               ]=BlankNum() EndIf

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

Moveto TabelaRefC
Moveto Field CampoTab

LimpAguarde()
EndProc     ;  (Calc_OF)

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

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

CopyToArray REG_TABELAREFC ; guarda dados registro mestre

Aguarde("Atualizando rateios nos itens")

Moveto TabelaRefI
nitens=0
Scan
  nitens=nitens+1

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

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

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

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

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

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

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

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

EndScan
If RecordStatus("Locked") Then UnLockRecord EndIf         

Moveto TabelaRefC

LimpAguarde()
EndProc   ; (Rateio_BC_Itens)

;*******************************************************************************
;* Rotina para 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 Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch       
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************     
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)         
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)    
                  EndSwitch
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+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
      ;;;***** 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

      ;;;***** 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()

SetaCorRegistro("Padrao")      
Moveto "NotaV"

While True
  
  If CHAVEV=9 Then QuitLoop EndIf
  
  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
             QuitLoop
        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
             Controla_EdicaoV()
             QuitLoop
        EndSwitch
  EndWhile
EndWhile

SetaCorRegistro("Padrao")

Moveto "NotaC"
Moveto [Tipo de Pagamento]
SetaCorRegistro("Editar")

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

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

Moveto "Notac"
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 "NotaR"
While RecordStatus("New")=False
  Del
EndWhile
Moveto "NotaCTR"
Del

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

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
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 Substituicao ICMS  ]=[NotaC->Valor Substituicao ICMS  ]
[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]
  [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   ]
  [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]
  CFOP_EMPRESA    =[\Sistemas\Estoque\NotaEC->Codigo da Empresa ]
  CFOP_ATIVEMPRESA=ATIVEMPR  
  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
                               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_NITENS                   =[Numero_Itens             ] 
        PARAM_TAMANHO_DESCR            =[Tamanho_Descricao_Item   ]
        PARAM_CONTROLA_NITENS          =[Controla_Numero_Itens    ]
        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_NF              =[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   ]  
        
   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 "NotaIDV"
View NOWINDOW "NotaV" SetaCorRegistro("Padrao")
View NOWINDOW "NotaCF"
View NOWINDOW "NotaR" SetaCorRegistro("Padrao")
View NOWINDOW "NotaCTR" SetaCorRegistro("Padrao")
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"

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 FACA_CHAVEI
     Then 
        COR_MENSAGEM="1"
        Switch 
          Case [Sistema Gerador]="MA":
               MSG=    "Este documento foi lan‡ado manualmente no sistema !// //"
          OtherWise:
               MSG=""
        EndSwitch 
        MSG=MSG+"- Os valores dos impostos nÆo serÆo calculados automaticamente;       // //"
        MSG=MSG+"- Os valores totais deste documento ser  resultante da soma dos itens;// //"
        MSG=MSG+"- Informar a base de calculo com seus rateios proporcionais  e  o seu //"
        MSG=MSG+"  valor do imposto correspondente.                                    //"
        Mensagem(MSG)
        Release Vars COR_MENSAGEM
  EndIf   
  
  While FACA_CHAVEI
    While True
         CHAVEI()
         If CHAVEI=9 Then QuitLoop EndIf
         If CHAVEI=7 Then     Loop EndIf
         Controla_EdicaoI()
    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_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""  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()
VSVRNFR =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 "9"


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 "9"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
