;** Orca ***********************************************************************
;*  Digitacao do Orcamento                                                     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 18/09/1997 por Anivel Augusto Rodrigues
;Ultima Alteracao: 07/12/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Organiza_Itens
;Ultima Alteracao: 19/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA/CFO                                   
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                             
;Ultima Alteracao: 08/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Desconto Unitario Entretex
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 06/02/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Imprimir no Final
;Ultima Alteracao: 11/02/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Qtd/PrUnit/PrTotal
;Ultima Alteracao: 27/08/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cond,Pagto=Opcao Selecionada
;Ultima Alteracao: 22/12/2009 por Cleber Alves
;Motivo Alteracao: Ajuste Linha 2140
;Ultima Alteracao: 02/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste aceitar qtd/vr item em branco
;Ultima Alteracao: 15/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F1 Cidades
;Ultima Alteracao: 16/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes iMPRIME()            
;Ultima Alteracao: 29/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carrega_Tabelas() SdEstq/EstqPrm
;Ultima Alteracao: 14/07/2010 por Bruno Carvalho  
;Motivo Alteracao: Ajustes no Campo Pre‡o Unit rio
;Ultima Alteracao: 13/08/2010 por Bruno Carvalho  
;Motivo Alteracao: Ajustes para Cliente 0270 
;Ultima Alteracao: 10/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN                               
;Ultima Alteracao: 07/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ReducÆo BCICMS apenas se houver desconto na NF
;Ultima Alteracao: 10/11/2010 por Bruno Carvalho  
;Motivo Alteracao: Ajustes para Cliente 0247 e Altera‡Æo VSD_I_CF_Item
;Ultima Alteracao: 30/11/2010 por Bruno Carvalho  
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 23/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Frete por Conta"
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 04/02/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes para Edi‡Æo "0102" 
;Ultima Alteracao: 11/02/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes para Edi‡Æo "0102" (¤ altera pre‡o) 
;Ultima Alteracao: 23/02/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡äes para "0102" (Informar Telefone)
;Ultima Alteracao: 14/03/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Tributacao de ISSQN  
;Ultima Alteracao: 28/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete                
;Ultima Alteracao: 26/04/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Layout e Procedimentos "Digita‡Æo dos Itens"                                   
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 08/11/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes CST do Item
;Ultima Alteracao: 28/03/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CFOP_Empresa para identifica‡Æo             
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP                            
;Ultima Alteracao: 24/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Item servi‡o pede ISSQN senÆo =N                        
;Ultima Alteracao: 22/06/2012 por Bruno Carvalho
;Motivo Alteracao: Removido CALCULA_ST 
;Ultima Alteracao: 25/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nova logica para calculo da nota e Add Rateio_BC_Itens()
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo da nota= automatico, nÆo calcula, livre    
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Message ShowDialog    
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pegar novo MVA e %ST ao trocar CST/CSON    
;Ultima Alteracao: 27/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes p/ Confec‡äes CSON=400 opera‡Æo diferente de venda
;Ultima Alteracao: 30/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Variavel nÆo estava sendo setada "UF_ALIQUOTA_ICMS_INTERNA"
;Ultima Alteracao: 08/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes na rotina de impressÆo "pickform"
;Ultima Alteracao: 17/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP servico d lmeida                         
;Ultima Alteracao: 21/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustado rotina para campo "Edita Descricao do Item"
;Ultima Alteracao: 20/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao regime tributario DEBITO E CREDITO
;Ultima Alteracao: 24/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item()
;Ultima Alteracao: 26/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        
;Ultima Alteracao: 19/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Vervencimentois e obs nas coindicoes de pagto
;Ultima Alteracao: 08/01/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina p/ formas de localizar o item e inserido CDBarras()  
;Ultima Alteracao: 23/01/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Pega_Preco() 
;Ultima Alteracao: 18/02/2013 por Bruno Carvalho
;Motivo Alteracao: Add tabelas que fazem parte dos ajustes realizados no "Sw_Cons"
;Ultima Alteracao: 19/02/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes SetaCorRegistro() 
;Ultima Alteracao: 13/03/2013 por Kamila Gomes
;Motivo Alteracao: Adicionado PARAM_ALTERA_PRECO e parametros de desconto
;Ultima Alteracao: 25/03/2013 por Kamila Gomes
;Motivo Alteracao: Ajuste PARAM_ALTERA_PRECO 
;Ultima Alteracao: 28/03/2013 por Kamila Gomes
;Motivo Alteracao: Ajuste Desconto Unitario
;Ultima Alteracao: 02/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SaveTables
;Ultima Alteracao: 05/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo deduzir descto ICMS_ST_BC                            
;Ultima Alteracao: 30/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Revisado table buffer ocorrido pelo sw_Cons                    
;Ultima Alteracao: 09/09/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Revisado table buffer ocorrido pelo sw_Cons                    
;Ultima Alteracao: 10/09/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuset CHAVE(), inclusao ProximaOrdem  
;Ultima Alteracao: 14/10/2013 por Kamila Gomes e Andrey Fillipe
;Motivo Alteracao: InclusÆo op‡Æo F4 Mudar Tabela de Pre‡os Itens                      
;Ultima Alteracao: 14/01/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo ICMS_ST_BC                            
;Ultima Alteracao: 12/02/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Simples Nacional c/ calculo de ICMS, ST com redu‡Æo BC 

;*******************************************************************************
;* Rotina para Controlar Chave do Orcamento                                    *
;*******************************************************************************
Proc CHAVEC()
INICIO_PAGINA=True
FACA_DIGITAC=True
VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

While True
  Moveto "Orcac"
  End
  Moveto [Numero do Orcamento]
  ORCA=[Numero do Orcamento]

  If OPCAO_FORM=OPCAO_FORM_REL
     Then Down
     Else PgDn PgDn PgDn
  EndIf
  Moveto [Numero do Orcamento]

	SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()
  
  Switch
    Case RetVal=-33 : SemFuncoes()
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM=OPCAO_FORM_REL
            Then OPCAO_FORM=OPCAO_FORM_MAN
            Else OPCAO_FORM=OPCAO_FORM_REL
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
					 INICIO_PAGINA=True
					 FACA_DIGITAC=True
					 VCITENS =BlankNum()
					 VSQTDE  =BlankNum()
					 VSVRMERC=BlankNum()

           If OPCAO_FORM=OPCAO_FORM_REL
              Then PAGINA("OrcaC","MR")
              Else PAGINA("OrcaC","MT")
           EndIf
           
           ORCA=[Numero do Orcamento]
           Switch
             Case EDITAR="S":
                  PickForm OPCAO_FORM_MAN
                  Echo Normal
                  Echo Off
                  If Sys_Codigo_Cliente="0102" And [Situacao do Orcamento]="ABERTO" 
                     Then CHAVEC=0
                          Controla_EdicaoC()
                     Else If Checa_Controle([Numero_Controle_Dia])
                             Then CHAVEC=0
                                  Controla_EdicaoC()
                             Else UnLockRecord
                          EndIf   
                  EndIf
                  Case EXCLUIR="S":
                  PickForm OPCAO_FORM_MAN
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia]) And
                     (IsBlank([Codigo da Empresa]) Or Carrega_Parametros())
                     Then If QuerExcluir("")
                             Then EXCLUSAO_C()
                             Else UnLockRecord
                          EndIf
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM=OPCAO_FORM_MAN
              Then PickForm OPCAO_FORM_MAN
              Else PickForm OPCAO_FORM_REL
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER":
         If IsBlank([])
            Then Del
                 If OPCAO_FORM=OPCAO_FORM_MAN
                    Then PickForm OPCAO_FORM_REL
                 EndIf
                 CHAVEC=1
                 If ProximaOrdem()
                    Then PickForm OPCAO_FORM_MAN
                         If Checa_Controle(SYS_CONTROLE_DIA)
                            Then Return
                         EndIf
                 EndIf
                 End Down
                 
            Else 
                 []=ALINH()
                 ORCA=[]
                 Del
                 If OPCAO_FORM=OPCAO_FORM_REL
                    Then PickForm OPCAO_FORM_MAN
                 EndIf
                 Moveto [Numero do Orcamento]
                 Locate ORCA
                 If Retval
                    Then CHAVEC=0
                    Else CHAVEC=1
                         End
                         If Not IsBlank([Numero do Orcamento])
                            Then PgDn PgDn PgDn
                         EndIf
                         Moveto [Numero do Orcamento]
                         [Numero do Orcamento]=ORCA
                 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
         EndIf
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM=OPCAO_FORM_REL
            Then PickForm OPCAO_FORM
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

;*******************************************************************************
;* Rotina para gerar proximo lancamento                                        *
;*******************************************************************************
Proc ProximaOrdem()
Private i

For i From 1 to 10
  Moveto [Numero do Orcamento]
  End
  If IsBlank([])
     Then ORCA="1"
     Else ORCA=StrVal(NumVal([])+1)
  EndIf
  ORCA=AlinhM(ORCA,6)
  Down
  [Numero do Orcamento]=ORCA
  PostRecord KeyViol LeaveLocked
  If RetVal     
     Then Return True
     Else Del
  EndIf    
EndFor

Return False
EndProc

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()
Moveto "OrcaC"
If INICIO_PAGINA
   Then If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf
        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
                If CHAVEC=1
                   Then [Codigo da Destinacao    ]=PARAM_DESTINACAO
                        [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                        [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                EndIf
        EndIf
EndIf

INICIO_PAGINA=False
FACA_CHAVEI=True

If CHAVEC=1
   Then Moveto [Codigo da Empresa]
   Else Moveto [Situacao do Orcamento]
EndIf
While True

  TECLA=" Esc=Retornar  Alt+F=Fun‡äes  PgDn"

  If Field()="Codigo da Empresa"        Or
     Field()="Codigo da Destinacao"     Or
     Field()="Codigo"                   Or
     Field()="Codigo do Representante"  Or
     Field()="Codigo da Tabela"         Or
     Field()="Cidade"                   Or
     Field()="UF"
     Then TECLA=TECLA + "F1=Tabelas  "
  EndIf
  If CHAVEC=0
     Then TECLA=TECLA + "Del=Excluir  "
  EndIf

  If CHAVEC=1 And IsBlank([])
     Then If Field()="Data de Emissao"
             Then []=Today()
          EndIf
  Endif

  Prompt TECLA

  MSGCAMPO=Field()
  If Field()="Situacao do Orcamento"
     Then MSGCAMPO="Aberto, Suspenso, Cancelado, Faturado"
  EndIf
  If Field()="Consumidor Final"
     Then MSGCAMPO="Consumidor Final (Sim/N„o)"
  EndIf
  If Field()="Codigo da Tabela"
     Then MSGCAMPO="C¢digo da Tabela de Pre‡o"
  EndIf
  If Field()="Codigo"
     Then MSGCAMPO="C¢digo do Destinatario"
  EndIf

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

  If RetVal=-33
     Then Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
            "F4  ~M~udar Pre‡o       " : " Alterar Pre‡os                  " : "F4",
            "~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="F1":
       If Field()="Codigo da Empresa"        Or
          Field()="Codigo da Destinacao"     Or
          Field()="Codigo"                   Or
          Field()="CFO"                      Or
          Field()="Codigo do Representante"  Or
          Field()="Codigo da Tabela"         Or
          Field()="Cidade"                   Or
          Field()="UF"
          Then If CONSULTAF1()
                  Then If Field()="Cidade"
                          Then [UF  ]=Reg_ConsultaF1["UF"]
                       EndIf
               EndIf
        EndIf
  
  Case RetVal="F4" And CHAVEC=0:  
           If [Situacao do Orcamento]<>"ABERTO"
              Then Mensagem("Mudan‡a de Pre‡os somente Or‡amento em ABERTO !")
                   Loop
           EndIf
           If Not Checagem_Pagina1() Then Loop EndIf
           TbPreco =[Codigo da Tabela]
           ;
           Play "TbprORCA"                         
           If Not OK
              Then [Codigo da Tabela     ]=TbPreco
                   Moveto [Codigo da Tabela]
                   UnLockRecord
                   Loop
           EndIf
           UnLockRecord

           TrocaTabela=True
           MSG_AGUARDE="Aguarde, Processando Valores"
           Moveto "OrcaI"
           Moveto [Item do Orcamento]
           NR=ImageCMax()
           Scan
             Aguarde(MSG_AGUARDE+Barra(NR,[Item do Orcamento]))
             VSD_I_Codigo_Item=[Codigo do Item]
             If Not Pega_Preco("Altera")
                Then QuitLoop
             EndIf
             UnLockRecord
           EndScan
           Carrega_array_Itens() 
           CALC_ORCA()  
           Moveto "OrcaC"
           Moveto [Codigo da Tabela]
           LimpAguarde()
  
  Case RetVal="PGDN":
       If IsBlank([Codigo da Empresa]) Then Mensagem("Empresa Invalida !")  Loop EndIf
       If IsBlank([Codigo da Destinacao]) Then Mensagem("Destinacao Invalida !") Loop EndIf
       If IsBlank([Codigo do Representante]) Then Mensagem("Representante Invalido !") Loop EndIf
       If IsBlank([Telefone]) Then Mensagem("Informe o Telefone!") Loop EndIf
       If IsBlank([Codigo]) Then Mensagem("Destinatario/Emitente Invalido !") Loop EndIf
       If IsBlank([Data de Emissao]) Then Mensagem("Emissao Invalido !") Loop EndIf
       If IsBlank([UF]) Then Mensagem("Estado Invalido !") Loop EndIf
       If IsBlank([CFO]) Then Mensagem("CFOP Invalido !") Loop EndIf
       If IsBlank([Consumidor Final]) Then Mensagem("Tipo Consumidor Invalido !") Loop EndIf
       If IsBlank([Situacao do Orcamento]) Then Mensagem("Situacao do Orcamento Invalido !") Loop EndIf
       If Not Verifica_Tabela()
          Then Loop
       EndIf
       If Not Checagem_Pagina1()
          Then Loop
          Else If SYS_CODIGO_CLIENTE="0102" 
                  Then Grava_Telefone()
              EndIf
       EndIf      
       QuitLoop
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEC=0
          Then If QuerExcluir("")
                  Then EXCLUSAO_C()
                       CHAVEC=9
                       QuitLoop
               EndIf
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Telefone"                 : 
            If SYS_CODIGO_CLIENTE="0102"
               Then If Not IsBlank([]) 
                       Then Moveto [CEP] 
                       Else Loop
                    EndIf
               Else Moveto [CEP]      
            EndIf
       Case Field()="Codigo da Tabela":
            Moveto [Codigo do Representante]
       Case Field()="Consumidor Final":
            Moveto [Codigo]
       Case Field()="CFO":
            Moveto [Codigo da Destinacao]
       Case Field()="Codigo da Destinacao":
            Moveto [Situacao do Orcamento]
       Case Field()="Situacao do Orcamento":
            If CHAVEC=1
               Then Moveto [Codigo da Empresa]
               Else If QuerDesfazer("")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf
            EndIf
       Case Field()="Codigo da Empresa":
            EXCLUSAO_C()
            CHAVEC=9
            QuitLoop
       OtherWise:
            Left
       EndSwitch
  Case Retval="ENTER":
       If IsBlank([])
          Then If Field()="Codigo da Empresa" Or
                  Field()="Codigo da Destinacao" Or
                  Field()="CFO" Or
                  Field()="Codigo" Or
                  Field()="Codigo do Representante"
                  Then Loop
               EndIf
       EndIf

       Switch
       Case Field()="Codigo da Empresa":
            [Situacao do Orcamento]="ABERTO"
            If Carrega_Parametros()
               Then [Codigo da Destinacao    ]=PARAM_DESTINACAO
                    [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                    [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                    Moveto [Codigo da Destinacao]
            EndIf
       Case Field()="Situacao do Orcamento":
            If IsBlank([])
               Then []="ABERTO"
            EndIf
            Moveto [Codigo da Destinacao]
       Case Field()="Codigo da Destinacao":
            Moveto [Data de Emissao]
       Case Field()="Data de Emissao":
            If IsBlank([])
               Then []=Today()
            EndIf
            Moveto [Data de Validade]
       Case Field()="Data de Validade":
            If IsBlank([])
               Then []=Today()
            EndIf
            Moveto [Codigo]
       Case Field()="Codigo": 
            If [Situacao do Cliente]="PESSIMO"
               Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+[Situacao do Cliente])
                    Loop
            EndIf
            
            Moveto [Consumidor Final]
       Case Field()="Consumidor Final":
            If IsBlank([])
               Then []="N"
            EndIf
            If SYS_CODIGO_CLIENTE="0102" And IsBlank([Telefone])
               Then Moveto [Telefone]
               ELse If SYS_CODIGO_CLIENTE="0102" And Not IsBlank([Telefone])
                       Then TELEFONE=[Telefone]
                            Moveto [Codigo do Representante]
                       Else If [Nome Fantasia EmitDest]="DIVERSOS"
                               Then Moveto [Razao Social]
                               Else Moveto [Codigo do Representante]
                            EndIF
                    EndIF        
            EndIf  
            
       Case Field()="Razao Social":
            If SYS_CODIGO_CLIENTE="0102" And IsBlank([Telefone])
               Then Moveto [Telefone]
               ELse If SYS_CODIGO_CLIENTE="0102" And Not IsBlank([Telefone])
                       Then TELEFONE=[Telefone]
                    EndIF        
            EndIf 
            Moveto [Codigo do Representante]
       Case Field()="Codigo do Representante":
            Moveto [Comissao do Representante]
       Case Field()="UF de Entrega":
            Moveto [Codigo do Representante]
       Case Field()="Telefone":                       
            If SYS_CODIGO_CLIENTE="0102" 
               Then If IsBlank([])
                       Then FastMsg("Campo Obrigatorio! ")
                            Loop
                    EndIf 
            EndIf
            Moveto [Cidade]      
       Case Field()="Codigo da Tabela":
            If Not Verifica_Tabela()
               Then Loop
            EndIf
            If Not Checagem_Pagina1()
               Then Loop
               Else If SYS_CODIGO_CLIENTE="0102" 
                       Then If IsBlank([Telefone]) 
                               Then Mensagem("Informe o Telefone!") 
                                    Loop 
                               Else Grava_Telefone()
                            EndIf         
                   EndIf
            EndIf 
            QuitLoop
       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para gravar telefone no cadastro de clientes                         *
;*******************************************************************************
Proc Grava_Telefone()

UnLockRecord
FormKey

{TableAdd} {\\Sistemas\\Cadastro\\Destinat} 
Moveto [Codigo]
Locate [OrcaC->Codigo]
If RetVal
   Then If IsBlank([Telefone]) Or [Telefone]<>[OrcaC->Telefone]
           Then [Telefone]=[OrcaC->Telefone]
                UnLockRecord
        EndIf
EndIf
Do_It!
ClearImage

Moveto "OrcaC"
FormKey
CoeditKey
IsLockRecord()

Return

EndProc ;Grava_Telefone()

;*******************************************************************************
;* Rotina para Verificar Tabela de Preco                                       *
;*******************************************************************************
Proc Verifica_Tabela()
Private WC
If CHAVEC=0 And IsBlank([Codigo da Tabela])
   Then Return True
EndIf
WC=True
Campo_Old=Field()
Moveto [Codigo da Tabela]
Ativa_Lookup()
Moveto [Codigo da Tabela]
Locate [OrcaC->Codigo da Tabela]
If RetVal
   Then If [Ativa]="N"
           Then Mensagem("Tabela de Pre‡o Inativa !")
                WC=False
        EndIf
EndIf
KeyPress "ESC"
Moveto Field Campo_Old
Return WC
EndProc   ;  (Verifica_Tabela)

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Checagem_Pagina1()
Campos_Ok=True

;*** Tabela de Kilometragem ***
Moveto [Codigo]
If Busca_Lookup("Codigo",[OrcaC->Codigo],"")
   Then If IsBlank(REG_BUSCA_LOOKUP["Km Frete"])
           Then KM_FRETE=0
           Else KM_FRETE=REG_BUSCA_LOOKUP["Km Frete"]
        EndIf
        TX_DESCTO_CLIE=REG_BUSCA_LOOKUP["Taxa_Desconto Permitido"]
   Else KM_Frete=0
EndIf

;*** Pega UF Empresa Controle ***
Moveto [Codigo da Empresa]
If Busca_Lookup("Codigo da Empresa",[OrcaC->Codigo da Empresa],"Empresa: "+[OrcaC->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 [Codigo]<>[Codigo da Empresa]
   Then Moveto [Codigo da Empresa]
        If Busca_Lookup("Codigo da Empresa",[OrcaC->Codigo da Empresa],"")
           Then Switch
                  Case SubStr([OrcaC->CFO],1,1)="1" And [OrcaC->UF]<>UF_Empresa:
                       Mensagem("O estado \""+[OrcaC->UF]+"\" de origem usado p/ o CFOP \""+
                                [OrcaC->CFO]+"\"// ‚ diferente da sua Empresa \""+UF_Empresa+"\" ! ")
                       CAMPOS_Ok=False
                  Case SubStr([OrcaC->CFO],1,1)="5" And [OrcaC->UF]<>UF_Empresa:
                       Mensagem("O estado \""+[OrcaC->UF]+"\" de destino usado p/ o CFOP \""+
                                [OrcaC->CFO]+"\"// ‚ diferente da sua Empresa \""+UF_Empresa+"\" ! ")
                      CAMPOS_Ok=False
                  Case SubStr([OrcaC->CFO],1,1)="2" And [OrcaC->UF]=UF_Empresa:
                       Mensagem("O estado \""+[OrcaC->UF]+"\" de origem usado p/ o CFOP \""+
                                [OrcaC->CFO]+"\"// ‚ igual a sua Empresa \""+UF_Empresa+"\" ! ")
                       CAMPOS_Ok=False
                  Case SubStr([OrcaC->CFO],1,1)="6" And [OrcaC->UF]=UF_Empresa:
                       Mensagem("O estado \""+[OrcaC->UF]+"\" de destino usado p/ o CFOP \""+
                                [OrcaC->CFO]+"\"// ‚ igual a sua Empresa \""+UF_Empresa+"\" ! ")
                       CAMPOS_Ok=False
                EndSwitch
        EndIf
EndIf

;*** Aliquota do Estado ***
Moveto [UF]
If Busca_Lookup("UF",[OrcaC->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

;*** Aliquota/Tributacao/Observacao da Destinacao ***
ALIQUOTA_CREDITO_ICMS_NOSN =BlankNum()
TRIB_ICMS=""
TRIB_IPI =""
DESTIN_ATUALIZA_PEDIDOS=""
OPCAO_RED_BCICMS="1"
TP_MOV_ESTOQUE="S"
CALCULO_NF_AUTOMATICO="A"

Moveto [Codigo da Destinacao]
If Busca_Lookup("Codigo da Destinacao",[OrcaC->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"]
        TP_MOV_ESTOQUE=REG_BUSCA_LOOKUP["Tipo Movimento Estoque"]
        
        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"]
EndIf
If CHAVEC=1 Then OBS=[Observacao do Orcamento] EndIf

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

Return CAMPOS_OK
EndProc   ; (Aliq_Icms)

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEI()
Moveto "Orcai"
FACA_DIGITAF=True
While True
  Moveto [Preco Total      ]   VSVRMERC=ImageCSum()
  Moveto [Quantidade       ]   VSQTDE  =ImageCSum()
  Moveto [Item do Orcamento]   VCITENS =ImageCCount()

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

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

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

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

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F3  ~V~er Ficha              " : " Ver itens modo ficha                             " : "F3",
              "F5  ~C~onsulta               " : " Consultar tabela pre‡o                           " : "F5",
              "F8  ~O~rganiza               " : " Reorganiza por ordem sequencial/descri‡Æo do item" : "F8",
              "F9  ~M~odo                   " : " Ativa/Desativa modo c¢digo 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 Orcamento]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Item do Orcamento]
         Inicia_Registro()
         DigitaI()
         QuitLoop
    Case RetVal="F5":
         VSDGEMPRESA=[OrcaC->Codigo da Empresa]
         If IsBlank([OrcaC->Codigo da Tabela])
            Then VSDGTABELA =PARAM_TABELA_PRECO
            Else VSDGTABELA =[OrcaC->Codigo da Tabela]
         EndIf
         SEQIT=[Item do Orcamento]

         Moveto "OrcaC"
         Resynckey
         KeyPress "F7"
         OP_INSERT_ITEM=True
         If PARAM_EXIBECUSTO="N"
            Then Play "SW_CONSS"
            Else Play "SW_CONS"
         EndIF

         Moveto "OrcaC"
         KeyPress "F7"
         Echo Normal
         
         Moveto "OrcaI"
         Moveto [Item do Orcamento]
         Locate ORCA,SEQIT
         IsLockRecord()
         Echo Off

         If Sw_Item_Pesquisado="" Then Loop EndIf

         CHAVEI=1

         [Codigo do Item  ]=Sw_Item_Pesquisado
         Item_Ins_Consulta=True

         Return
    Case Retval="F9":
         Del
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case Retval="F8":
         Del
         Moveto [Item do Orcamento]
         If RecordStatus("New")=True
            Then MENSAGEM("O Orcamento deve ter pelo menos 1(um) Item !")
                 QuitLoop
         EndIf

         Echo Normal
         Echo Off
         ShowPopup " Op‡”es: Organiza " CENTERED
            "~S~equencial" : " Reorganiza pela ordem sequencial"     :"Sequencial",
            "~D~escric„o"  : " Reorganiza pela descri‡„o do produto" :"Descricao",
            "~C~ancelar"   : " Cancelar"                             :"CANCELAR"
         EndMenu
          To MenuVar

         echo off
         If MenuVar="CANCELAR" or MenuVar="Esc"
             Then QuitLoop
         EndIf

         Organiza_Itens()
         QuitLoop
    Case Retval="PGDN":
         Del
         Moveto [Item do Orcamento]
      ;;;If RecordStatus("New")=True
      ;;;   Then MENSAGEM("O Orcamento 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="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           Moveto [Preco Total      ]   VSVRMERC=ImageCSum()
           Moveto [Quantidade       ]   VSQTDE  =ImageCSum()
           Moveto [Item do Orcamento]   VCITENS =ImageCCount()
           PAGINA("Orcai","MR")
           SEQIT=[Item do Orcamento]
           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 ORCA,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down
                 [Numero do Orcamento]=ORCA
                 [Item do Orcamento  ]=SEQIT
                 UnLockRecord
                 Locate ORCA,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)


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

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

If INICIO_DIALOG
   Then If CHAVEI=0
           Then Campo="I_Quantidade"
           Else Campo="I_Codigo_Item"
        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 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
           "F5 A~l~tera Pre‡o           ": " Altera Pre‡o                       " :"F5",
           "F7 ~A~ltera Localiza‡„o     ": " Altera forma de localizar o item   " :"F7", 
           "~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 Orcamento]
                      Inicia_Registro()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     Case (Evento["KeyCode"] = -63 Or Evento["KeyCode"] = "F5")And Not F5_ATIVADO:
          If PARAM_ALTERA_PRECO<>"P"
             Then FastMsg("Fun‡„o n„o configurada para essa op‡„o")
             Else If PARAM_ALTERA_PRECO="P"
                     Then If Checa_Supervisor()
                             Then F5_ATIVADO=True
                                  Campo="I_Preco_Unitario"
                          EndIf
                  EndIf                
          EndIf
     Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
          ShowPopup " Alterar Forma de Localizar o Item " CENTERED
            "Por Codigo do ~I~tem       " : " Localiza o item pelo seu c¢digo           " : "LOC_CODITE",
            "Por Codigo do ~F~ornecedor " : " Localiza o item pelo codigo do fornecedor " : "LOC_CODFOR",
            "Por ~R~eferencia do Item   " : " Localiza o item pela sua referencia       " : "LOC_CODREF",
            "Por Codigo de ~B~arra      " : " Localiza o item pelo c¢digo de barra      " : "LOC_CODBAR",
            Separator,
            "~C~ancelar               " : " Cancelar a Opera‡„o                       " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off
          
          If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Return
          EndIf                                         
          RetVal=MenuVar
          LOCALIZA_CODIGO = MenuVar
          
          Switch 
            Case LOCALIZA_CODIGO="LOC_CODITE" : LOCALIZAR_POR="CodItem" 
            Case LOCALIZA_CODIGO="LOC_CODFOR" : LOCALIZAR_POR="CodFor" 
            Case LOCALIZA_CODIGO="LOC_CODREF" : LOCALIZAR_POR="Ref."
            Case LOCALIZA_CODIGO="LOC_CODBAR" : LOCALIZAR_POR="CodBar"   
          EndSwitch           
          
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEI=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"        Or
             Campo="I_Local"              Or
             Campo="I_CST_Item"           Or
             Campo="I_CFOP"               Or              
             Campo="I_CST_IPI"            Or
             Campo="I_CSOSN"              Or
             Campo="I_TISSQN"             Or
             Campo="I_CST_PIS"            Or
             Campo="I_CST_COFINS"         Or            
             Campo="I_MUN"           
             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_Local"              Then Moveto [Local]                  EndIf
                  
                  If Campo="I_CFOP"               
                     Then FI_CFOAnt=VSD_I_CFOP
                          FC_CFOAnt=[OrcaC->CFO]
                          Moveto "OrcaC"
                          Moveto [CFO]
                  EndIf

                  If Campo="I_MUNSERV"             
                     Then FI_MUNSERVAnt=VSD_I_MUNSERV
                          FI_UFSERVAnt =VSD_I_UFSERV
                          FC_MUNSERVAnt=[OrcaC->Cidade]
                          FC_UFSERVAnt =[OrcaC->UF]
                          Moveto "OrcaC"
                          Moveto [Cidade]  
                  EndIf
                  Switch
                    Case Campo="I_CST_Item":          
                      CSTNew=VSD_I_CST_Item 
                      VSD_I_CST_Item=Checa_CST("ICMS","S","")
                      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",TP_MOV_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",TP_MOV_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",TP_MOV_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
                    Case Campo="I_TISSQN":          
                      CSTNew=VSD_I_TISSQN 
                      VSD_I_TISSQN=Checa_CST("ISSQN","","")
                      If IsBlank(VSD_I_TISSQN)
                         Then VSD_I_TISSQN         =CSTNew
                         Else [Tributacao de ISSQN]=VSD_I_TISSQN        
                      EndIf
                      Release Vars CSTNew                      
                    OtherWise:         
                      If ConsultaF1()
                         Then Switch
                                Case Campo="I_CFOP":               
                                      FI_CFOAnt     =[OrcaC->CFO] 
                                      [OrcaC->CFO]=FC_CFOAnt
                                      Moveto "OrcaI"
                                      [OrcaI->CFO]=FI_CFOAnt
                                Case Campo="I_MUNSERV":               
                                      [OrcaC->Cidade   ]=FC_MUNSERVAnt
                                      [OrcaC->UF       ]=FC_UFSERVAnt
                                      Moveto "OrcaI"
                                      [OrcaI->ISSQN_Municipio]=Reg_ConsultaF1["Codigo_Cidade"]
                                      [OrcaI->ISSQN_UF       ]=Reg_ConsultaF1["UF"] 
                              EndSwitch
                         Else If Campo="I_CFOP" Or Campo="I_Tabela" Or Campo="I_Condicao_Pagamento"
                                 Then Moveto "OrcaI"
                              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_CST_Item      =[Tipo Tributacao  ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]

                          Campo="I_Codigo_Item"
                  EndIf
                  If Campo="I_Local"
                     Then VSD_I_Local=[Local]
                  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=[OrcaI->ISSQN_Municipio]
                          VSD_I_UFSERV =[OrcaI->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 "OrcaI"
         EndIf
          Temp=False
     Case Evento["KeyCode"] = 27:
          If IsBlank([Codigo do Item])
             Then Switch
                  Case Campo="I_Codigo_Item"   : CancelDialog
                  Case Campo="I_Descricao_Item": Campo="I_Codigo_Item"
                  Case Campo="I_Quantidade"    :
                       If CHAVEI=1
                          Then Campo="I_Tipo_Item"
                          Else CancelDialog
                       EndIf

                  Case Campo="I_Tipo_Item":  Campo="I_Descricao_Item"
                  EndSwitch
             Else Switch
                  Case Campo="I_Codigo_Item":
                       CancelDialog
                  Case Campo="I_Descricao_Item":
                       Campo="I_Codigo_Item"
                  Case Campo="I_Quantidade":
                       If CHAVEI=1
                          Then Campo="I_Codigo_Item"
                          Else CancelDialog
                       EndIf
                  EndSwitch
          EndIf
          Switch
          Case Campo="I_Preco_Unitario": Campo="I_Quantidade" 
          Case Campo="I_Taxa_Desconto_Unitario"  Or
               Campo="I_Valor_Desconto_Unitario" Or
               Campo="I_Preco_Total"  : Campo="I_Quantidade"

          Case Campo="I_CST_Item"       Or
               Campo="I_Local"          Or
               Campo="I_CSOSN"                   : 
               If Sys_Codigo_Cliente<>"0102"
                    Then Campo="I_Preco_Total"
                    Else Campo="I_Quantidade" 
                 EndIF

          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"               : Campo="I_CFOP"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          Switch
            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")
                                 If [Edita Descricao do Item]="S"
                                    Then Campo="I_Descricao_Item"
                                    Else Campo="I_Quantidade"
                                 EndIf
                            Else VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                         EndIf        
                 EndIf      
            Case Campo="I_Descricao_Item":
                 If IsBlank([Codigo do Item])
                    Then VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                         [Descricao do Item]=VSD_I_Descricao_Item
                         Campo="I_Tipo_Item"
                    Else VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                         Switch
                           Case SYS_CODIGO_CLIENTE = "0247" :
                                Moveto [Codigo do Item]                                              
                                Ativa_Lookup()                   
                                Locate [Orcai->Codigo do Item] 
                                If [Codigo da Familia]="005"
                                    Then Play "Calc_Ma" 
                                EndIf   
                                KeyPress "ESC"
                           EndSwitch
                         Campo="I_Quantidade"
                 Endif
            Case Campo="I_Tipo_Item":
                 VSD_I_Tipo_Item=ControlValue("I_Tipo_Item")
                 [Tipo do Item]=VSD_I_Tipo_Item
                 Campo="I_Quantidade"
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 [Quantidade]=VSD_I_Quantidade
                  
                 If VSD_I_Quantidade>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Else If SYS_CODIGO_CLIENTE="0270" And VSD_I_Quantidade=0
                            Then VSD_I_Preco_Total=VSD_I_Quantidade+(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                          EndIf
                 EndIf    
                             
                 If Sys_Codigo_Cliente<>"0102"
                    Then If PARAM_ALTERA_PRECO="S" 
                            Then Campo="I_Preco_Unitario"
                            Else If PARAM_DESCUNIT<>"N" 
                                    Then Campo="I_Taxa_Desconto_Unitario"
                                    Else VSD_I_Taxa_Desconto_Unitario =BlankNum()
                                         VSD_I_Valor_Desconto_Unitario=BlankNum()
                                         Campo="I_Preco_Total"
                                EndIf
                            
                         EndIf
                    Else qtdvrok=True
                         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_Quantidade=0     Or IsBlank(VSD_I_Quantidade)) And 
                                    (VSD_I_Preco_Unitario=0 Or IsBlank(VSD_I_Preco_Unitario))
                                    Then VSD_I_Preco_Total   =BlankNum()
                                         VSD_I_Quantidade    =BlankNum()
                                         VSD_I_Preco_Unitario=BlankNum()
                                    Else Mensagem("Quantidade ou valor unit rio inv lido !")
                                         qtdvrok=False
                                         Campo="I_Quantidade"
                                 EndIF
                         EndIF
                 EndIf
                 
                 IF Sys_Codigo_Cliente="0102"
                    Then If qtdvrok
                            Then Switch
                                   Case PARAM_LOCAL="S"    : Campo="I_LOCAL"
                                   Case PARAM_IMPOSTOS="S" : Campo="I_CST_Item"
                                   OtherWise               : AcceptDialog
                                 EndSwitch
                         EndIF        
                 EndIf
                 
            Case Campo="I_Preco_Unitario" :
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 If VSD_I_Preco_Unitario>0 And SYS_CODIGO_CLIENTE<>"0270"
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Else If SYS_CODIGO_CLIENTE="0270" And VSD_I_Quantidade=0
                            Then VSD_I_Preco_Total=VSD_I_Quantidade+(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                            Else VSD_I_Preco_Total=VSD_I_Quantidade*(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
                 If F5_ATIVADO=True
                    Then F5_ATIVADO=False

                 EndIf
                 
            Case Campo="I_Taxa_Desconto_Unitario" :
                 VSD_I_Taxa_Desconto_Unitario=ControlValue("I_Taxa_Desconto_Unitario")
                 If VSD_I_Taxa_Desconto_Unitario>0
                    Then VSD_I_Valor_Desconto_Unitario=(VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100
                         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 VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                         EndIf
                         If Checa_DescontoUnitario()
                            Then Campo="I_Preco_Total"
                         EndIf

                         VSD_I_Taxa_PrUni_PrTab=LTrim(Format("W8.1,S+",(((VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)/VSD_I_Preco_Tabela)*100)-100))+"%"

                    Else Campo="I_Valor_Desconto_Unitario"
                 EndIf
                 
            Case Campo="I_Valor_Desconto_Unitario":
                 VSD_I_Valor_Desconto_Unitario=ControlValue("I_Valor_Desconto_Unitario")
                 If SYS_CODIGO_CLIENTE="0270" 
                    Then VSD_I_Preco_Total=VSD_I_Quantidade+(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                         Campo="I_Preco_Total"                        
                         VSD_I_Taxa_PrUni_PrTab=LTrim(Format("W8.1,S+",(((VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)/VSD_I_Preco_Tabela)*100)-100))+"%"
                    
                    Else If Checa_DescontoUnitario()
                            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)
                                    Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                                 EndIf
                                 Campo="I_Preco_Total"
        
                                 VSD_I_Taxa_PrUni_PrTab=LTrim(Format("W8.1,S+",(((VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)/VSD_I_Preco_Tabela)*100)-100))+"%"
        
                         EndIf
                  EndIf 
            Case Campo="I_Preco_Total":
                 VSD_I_Preco_Total=ControlValue("I_Preco_Total")
                 qtdvrok=True
                 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_Quantidade=0     Or IsBlank(VSD_I_Quantidade)) And 
                            (VSD_I_Preco_Unitario=0 Or IsBlank(VSD_I_Preco_Unitario))
                            Then VSD_I_Preco_Total   =BlankNum()
                                 VSD_I_Quantidade    =BlankNum()
                                 VSD_I_Preco_Unitario=BlankNum()
                            Else If SYS_CODIGO_CLIENTE="0270" 
                                 Then If VSD_I_Quantidade=0  And VSD_I_Preco_Unitario<>""
                                         Then VSD_I_Preco_Total=VSD_I_Quantidade+(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)  
                                         Else Mensagem("Quantidade ou valor unit rio inv lido !") 
                                              qtdvrok=False
                                              Campo="I_Quantidade"
                                      EndIf
                                 Else Mensagem("Quantidade ou valor unit rio inv lido !")
                                      qtdvrok=False
                                      Campo="I_Quantidade"
                                 EndIf
                         EndIf   
                 EndIf   

                 If qtdvrok
                    Then Switch
                           Case PARAM_LOCAL="S"    : Campo="I_LOCAL"
                           Case PARAM_IMPOSTOS="S" : Campo="I_CST_Item" 
                           OtherWise               : AcceptDialog
                         EndSwitch
                 EndIf
                 
            Case Campo="I_Local":
                 VSD_I_Local=ControlValue("I_Local")
                 If Not IsBlank(VSD_I_Local)
                    Then Moveto [Local]
                         Ativa_Lookup()
                         Moveto [Local]
                         Locate VSD_I_Local
                         If RetVal
                            Then VSD_I_Local=[Local]
                                 KeyPress "ESC"
                                 Moveto "Orcai"
                                 [Local                ]=VSD_I_Local
                                 AcceptDialog
                            Else Mensagem("Local n„o Cadastrado !")
                                 VSD_I_Local=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf         
                 Switch
                   Case PARAM_IMPOSTOS="S" : 
                        If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                           Then Campo="I_CSOSN"
                           Else Campo="I_CST_Item"
                        EndIf
                   OtherWise               : AcceptDialog
                 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
                         
                                 If TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400" Or
                                    (TribCST="500" And Search("DEVOL",[OrcaC->Descricao da Destinacao])=0) 
                                    Then VSD_I_CST_Item   =SubStr(VSD_I_CSOSN,1,1)+"90"
                                         VSD_I_BC_ICMS    =BlankNum()
                                         VSD_I_RBC_ICMS   =BlankNum()
                                         VSD_I_AICMS      =BlankNum()
                                         VSD_I_Valor_ICMS =BlankNum()
                                 EndIf          
                                 If TribCST="101" Or TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"     
                                    Then VSD_I_MVA        =BlankNum()
                                         VSD_I_RBC_ST     =BlankNum()
                                         VSD_I_AST        =BlankNum()
                                         VSD_I_Valor_ST   =BlankNum()
                                         VSD_I_BC_ST      =BlankNum()
                                 EndIf                                     
                                 If TribCST<>"101" And TribCST<>"201" And TribCST<>"900" 
                                    Then VSD_I_ACSOSN     =BlankNum()
                                         VSD_I_Valor_CSOSN=BlankNum()
                                 EndIf 

                                 Switch
                                  Case (TribCST="101" Or TribCST="201" Or TribCST="900"): 
                                       Campo="I_ACSOSN" 
                                  Case (TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"):    
                                       Campo="I_CST_IPI"
                                  OtherWise:
                                       Campo="I_CST_Item"
                                 EndSwitch

                                 If (TribCST="201" Or TribCST="202" Or TribCST="203") And
                                    VSD_I_MVA<=0 And VSD_I_AST<=0 And CHAVEI=1
                                    Then VSD_I_AST=UF_ALIQUOTA_ICMS_INTERNA
                                         Checa_MVA(VSD_I_TICMS,[Codigo MVA])
                                 EndIf                                                 

                                 If (TribCST="101" Or TribCST="201") And VSD_I_ACSOSN<=0 And CHAVEI=1
                                    Then VSD_I_ACSOSN=ALIQUOTA_CREDITO_ICMS_NOSN
                                 EndIf   

                            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="102" Or TribCST="103" Or TribCST="300" Or TribCST="400" Or     
                              (TribCST="500" And Search("DEVOL",[OrcaC->Descricao da Destinacao])=0):
                               Campo="I_CST_IPI"
                          OtherWise:
                               Campo="I_CST_Item"
                         EndSwitch
                    Else Campo="I_Valor_CSOSN"
                 EndIf                 
            Case Campo="I_Valor_CSOSN":
                 VSD_I_Valor_CSOSN=ControlValue("I_Valor_CSOSN")
                 Campo="I_CST_Item"

            Case Campo="I_CST_Item":  
                 VSD_I_CST_Item=ControlValue("I_CST_Item")
                 If Not IsBlank(VSD_I_CST_Item)
                    Then TribCST=Checa_CST("ICMS",TP_MOV_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) 

                                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                    Then
                                         CONTINUA=False
                                         Switch

                                           Case (SubStr(VSD_I_CSOSN,2,3)="101" Or SubStr(VSD_I_CSOSN,2,3)="102") And 
                                                (TribCST="00" Or TribCST="20" Or TribCST="90")                       : CONTINUA=True 

                                           Case SubStr(VSD_I_CSOSN,2,3)="103" And 
                                                (TribCST="40" Or TribCST="41" Or TribCST="50" Or TribCST="51")       : CONTINUA=True 

                                           Case (SubStr(VSD_I_CSOSN,2,3)="201" Or SubStr(VSD_I_CSOSN,2,3)="202" Or 
                                                 SubStr(VSD_I_CSOSN,2,3)="203" Or SubStr(VSD_I_CSOSN,2,3)="500") And 
                                                (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or                  
                                                 TribCST="90")                                                       : CONTINUA=True 

                                           Case SubStr(VSD_I_CSOSN,2,3)="300" And 
                                                TribCST<>"??"                                                        : CONTINUA=True ;?verificar qual

                                           Case SubStr(VSD_I_CSOSN,2,3)="400" And 
                                                (TribCST="40" Or TribCST="41" Or TribCST="50" Or TribCST="51")       : CONTINUA=True 

                                           Case SubStr(VSD_I_CSOSN,2,3)="900" And 
                                                TribCST<>"??"                                                        : CONTINUA=True ;?qualquer

                                         EndSwitch
                                    Else CONTINUA=True
                                         VSD_I_CSOSN      =SubStr(VSD_I_CST_Item,1,1)+"900"
                                         VSD_I_ACSOSN     =BlankNum()
                                         VSD_I_Valor_CSOSN=BlankNum()
                                 EndIf
                                 
                                 If Not CONTINUA 
                                    Then Mensagem("CST ICMS difere da regra para o CSOSN informado.//Verifique !")
                                    Else
                                         If TribCST="00" Or TribCST="20" Or TribCST="40" Or TribCST="41" Or
                                            TribCST="50" Or TribCST="51" Or
                                            (TribCST="60" And Search("DEVOL",[OrcaC->Descricao da Destinacao])=0)
                                            Then VSD_I_MVA        =BlankNum()
                                                 VSD_I_RBC_ST     =BlankNum()
                                                 VSD_I_AST        =BlankNum()
                                                 VSD_I_Valor_ST   =BlankNum()
                                                 VSD_I_BC_ST      =BlankNum()
                                         EndIf        
                                         If TribCST<>"20" And TribCST<>"70" And TribCST<>"90"       
                                            Then VSD_I_RBC_ICMS   =BlankNum()
                                         EndIf 
                                         If TribCST="30" Or TribCST="40" Or TribCST="41" Or 
                                            TribCST="50" Or TribCST="51" Or                    
                                            (TribCST="60" And Search("DEVOL",[OrcaC->Descricao da Destinacao])=0)
                                            Then VSD_I_RBC_ICMS  =BlankNum()
                                                 VSD_I_AICMS     =BlankNum()
                                                 VSD_I_BC_ICMS   =BlankNum()
                                                 VSD_I_Valor_ICMS=BlankNum()
                                         EndIf 
    
                                         Switch
                                          Case TribCST="00" Or TribCST="10"                         : Campo="I_AICMS"         
                                          Case TribCST="20" Or TribCST="70" Or TribCST="90"         : Campo="I_RBC_ICMS"
                                          Case TribCST="60" And 
                                               Search("DEVOL",[OrcaC->Descricao da Destinacao])>0 : Campo="I_MVA"
                                          OtherWise                                                 : Campo="I_CST_IPI"
               												  EndSwitch
                       												  
                                        If (TribCST="10" Or TribCST="30" Or TribCST="70") And
                                           VSD_I_MVA<=0 And VSD_I_AST<=0 And CHAVEI=1
                                           Then VSD_I_AST=UF_ALIQUOTA_ICMS_INTERNA
                                                Checa_MVA(VSD_I_TICMS,[Codigo MVA])
                                        EndIf                                                 
        
                                 EndIf

                           Else Mensagem("CST ICMS inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
                 If IsAssigned(CST_TEMP)
                    Then If (SubStr(CST_TEMP,1,1)="1" And SubStr(VSD_I_CST_Item,1,1)<>"1") Or VSD_I_CST_Item=""
                            Then VERIFICA_IMPORTACAO="SIM"
                                 Echo Normal
                                 Echo Off
                                 APLIC_ORIGEM="FATURA"
                                 Play "FT_IMP"
                                 If VERIFICA_IMPORTACAO
                                    Then VSD_I_CST_Item=CST_TEMP
                                         Mensagem("Imposs¡vel Altera‡„o! // //Exclua as Importa‡”es para alter o CST!")
                                         Campo="I_CST_Item"
                                    Else CST_TEMP=VSD_I_CST_Item
                                 EndIf
                                 VERIFICA_IMPORTACAO="NAO"
                         EndIf
                 EndIf
                 
            Case Campo="I_RBC_ICMS":
                 VSD_I_RBC_ICMS=ControlValue("I_RBC_ICMS")
                 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 Search("DEVOL",[OrcaC->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 Search("DEVOL",[OrcaC->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_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",TP_MOV_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",TP_MOV_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",TP_MOV_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 "OrcaC"
                 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([OrcaC->CFO],1,1):
                                 Mensagem("CFOP "+VSD_I_CFOP+" difere da OF "+[OrcaC->CFO]+" !")
                            OtherWise: 
                                 If VSD_I_Tipo_Item="C"
                                    Then VSD_I_NCM="" 
                                         AcceptDialog
                                    Else Campo="I_NCM"
                                 EndIf
                          EndSwitch
                 EndIf
                 Moveto "OrcaI"
                 Echo Off

            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 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"            Or                 
   Campo="I_Local"                
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

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

Switch
  Case Campo="I_Local"                  : MSGCAMPO="Local"

  Case Campo="I_Seq"                    : MSGCAMPO="Sequencia"
  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_TISSQN"                 : MSGCAMPO="Tributa‡„o ISSQN: Debitado, N„o tributado, Substituta, Retida, Isenta"
  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  "
    Else TECLA=TECLA+"                  "
EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
   Else TECLA=TECLA+"Alt+F=Fun‡”es  Localizar-> "+LOCALIZAR_POR 
EndIf

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
RefreshDialog
Return TEMP
EndProc   ; (Item_Dialog)
 
;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()

Moveto "OrcaI"
FACA_DIGITAF=True

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

While True

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

  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  SEQIT=[]

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

EndProc ;ChaveCdBar()

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

ITOK=True
[Quantidade]=Dados_QTD             
CODIGO_BARRA=Dados_Item                
Prod_Esgt=""

If Not Pega_Dados_Item("Codigo_Barras") 
   Then Del
        Return
EndIf

Registro_Item("Ler")
VSD_I_Quantidade =[Quantidade]
VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)

Registro_Item("Gravar")

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

Moveto "OrcaI"
If RecordStatus("Locked") Then UnLockRecord EndIf

Sound 400 400
EndProc   ;CDBarras()

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

If ticms="S" And
   ((Search("VENDA",[OrcaC->Descricao da Destinacao])>0 And TP_MOV_ESTOQUE="S") Or
    (Search("DEVOL",[OrcaC->Descricao da Destinacao])>0 And TP_MOV_ESTOQUE="E")) 
   Then GetRecord "\\Sistemas\\Estoque\\Tabmva" [Codigo MVA] To REG_BUSCA_LOOKUP
        If Not RetVal 
           Then Return False
        EndIf   
        [MVA         ]=REG_BUSCA_LOOKUP["MVA_1"]
        VSD_I_MVA     =[MVA         ]   
        If UF_EMPRESA=[OrcaC->UF] Or (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
           Then Return True
        EndIf   
        
        If REG_BUSCA_LOOKUP["Estados MVA_Ajustado"]="TODOS" Or
          Search([OrcaC->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)
               VSD_I_MVA=[MVA         ]   
          Else 
               [MVA               ]=BlankNum()
               [ICMS_ST_Aliquota  ]=BlankNum()
               VSD_I_MVA           =[MVA             ]   
               VSD_I_AST           =[ICMS_ST_Aliquota]   

               If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                  Then 
                       VSD_I_TICMS         ="O"
                       VSD_I_CSOSN         =SubStr(VSD_I_CST,1,1)+"900"

                       [CSOSN             ]=SubStr(VSD_I_CSOSN,2,3)
                       [Tributacao de ICMS]=VSD_I_TICMS
                  Else 
                       VSD_I_TICMS         ="O"
                       VSD_I_CST_Item      =SubStr(VSD_I_CST_Item,1,1)+"90"
                       
                       [Tipo Tributacao   ]=VSD_I_CST_Item
                       [Tributacao de ICMS]=VSD_I_TICMS
               EndIf   
        EndIf
   Else [Codigo MVA      ]=""
        [MVA             ]=BlankNum()   
        [ICMS_ST_Aliquota]=BlankNum()

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

;****************************************+**************************************
;* Rotina para Setar Vari veis de Impostos                                     *
;*******************************************************************************
Proc CALCULA_IMPOSTO()

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
VRIR           =0
VRNF           =0

MSG_AUTOMATICA="" 

Moveto TabelaRefC               
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 TP_MOV_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 TP_MOV_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]
                 VL_BC_ICMS_ST=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]
                 VL_BC_ICMS_ST=It_prtotal[wi]
                 
            OtherWise:
                 VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                 VL_BC_ICMS_ST=It_prtotal[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]
                 VL_BC_ICMS_ST=It_prtotal[wi]
                 
            OtherWise:
                 VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                 VL_BC_ICMS_ST=It_prtotal[wi]
                 
          EndSwitch
      EndSwitch
      VL_BC_ICMS   =VL_BC_ICMS   +It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
      VL_BC_ICMS_ST=VL_BC_ICMS_ST+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]
         Else VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_vr_ipi[wi] 
      EndIf   
      VL_RED_BC    =NDecimal((VL_BC_ICMS*It_red_icms[wi])/100,2)
      VL_BC_ICMS   =VL_BC_ICMS-VL_RED_BC                   
    
      ;--- 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
              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_RED_BCST  =NDecimal((VL_BC_ICMS_ST*It_red_st[wi])/100,2)
              ;;VL_BC_ICMS_ST=VL_BC_ICMS_ST-VL_RED_BCST                   
       
              VL_ICMS_ST=Round((VL_BC_ICMS_ST*It_aliq_st[wi])/100,2)

              Switch
                Case It_vr_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_red_st[wi]    =BlankNum() 
              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

EndProc ;(IMPOSTO)

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

TabelaRefC="Orcac"
TabelaRefI="Orcai"
;--- Seta Tabelas de Trabalho --------------------------------------------------
Moveto TabelaRefC

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]          

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

;*******************************************************************************
;*** Calcula Impostos
;*******************************************************************************
Proc Carrega_array_Itens()
Private CAMPOANT, VRBCICMS_CREDSN, nitens

TabelaRefC="Orcac"  
TabelaRefI="Orcai"

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_bc_st, It_vr_st,
             It_cst_ipi, It_trib_ipi, It_aliq_ipi, It_bc_ipi, It_vr_ipi,
             It_trib_issqn, It_aliq_issqn, It_bc_issqn, It_vr_issqn,
             It_cst_pis, It_aliq_pis, It_bc_pis, It_vr_pis,
             It_cst_cofins, It_aliq_cofins, It_bc_cofins, It_vr_cofins 

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

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

Moveto "OrcaC"
CHAVEF=0

;*** Simples Nacional ***
If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
   SubStr(Directory(),1,1)<>"X"         
   Then Moveto [Codigo]
        If Busca_Lookup("Codigo",[OrcaC->Codigo],"")
           Then Switch 
                ;  Case (REG_BUSCA_LOOKUP["Regime_Tributario"] = "SIMPLES NACIONAL" Or
                ;        REG_BUSCA_LOOKUP["Regime_Tributario"] = "SIMPLES NAC. ESRB") And
                ;        ALIQUOTA_CREDITO_ICMS_NOSN>0:
                ;        CHAVEF=9
                ;
                ;        MSG=    Completa([OrcaC->Nome Fantasia Empresa ]+"="+TPEMPR,70," ")+"//" 
                ;        MSG=MSG+Completa([OrcaC->Nome Fantasia EmitDest]+"="+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"// //" 
                ;        MSG=MSG+"Destinat rio sem direito a crˆdito de ICMS !"+"// //"
                ;        MSG=MSG+Completa("Verificar/Corrigir:",70," ")+"// //"
                ;        MSG=MSG+Completa("- Exite(m) iten(s) Isento/Outros de ICMS;",70," ")+"//"
                ;        MSG=MSG+Completa("- Voce esta usando uma destina‡Æo com cr‚dito de icms: "+Format("W6.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN)+"%",70," ")+"//"
                ;        MSG=MSG+Completa("- Se regime tribut rio do destinat rio ‚ realmente "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"//"
                ;        Mensagem(MSG)
                                                  
                  Case SYS_CODIGO_CLIENTE<>"0219" And
                       (REG_BUSCA_LOOKUP["Regime_Tributario"]<>"SIMPLES NACIONAL" And
                        REG_BUSCA_LOOKUP["Regime_Tributario"]<>"SIMPLES NAC. ESRB") And
                        VRBCICMS_CREDSN>0 And   
                        ALIQUOTA_CREDITO_ICMS_NOSN<=0:
                        CHAVEF=9
                        
                        MSG=    Completa([OrcaC->Nome Fantasia Empresa ]+" = "+TPEMPR,70," ")+"//" 
                        MSG=MSG+Completa([OrcaC->Nome Fantasia EmitDest]+" = "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"// //" 
                        MSG=MSG+"Destinat rio com direito a crˆdito de ICMS !"+"// //"
                        MSG=MSG+Completa("Verificar/Corrigir:",70," ")+"// //"
                        MSG=MSG+Completa("- Exite(m) iten(s) Isento/Outros de ICMS;",70," ")+"//"
                        MSG=MSG+Completa("- Voce esta usando uma destina‡Æo sem cr‚dito de icms: "+Format("W6.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN)+"%",70," ")+"//"
                        MSG=MSG+Completa("- Se regime tribut rio do destinat rio ‚ realmente "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"//"
                        Mensagem(MSG)
                                                  
                EndSwitch           
        EndIf   
EndIf

EndProc ;(Carrega_array_Itens)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Tipo do Item              ]=VSD_I_Tipo_Item
       [Codigo do Item            ]=VSD_I_Codigo_Item
       [Descricao do Item         ]=VSD_I_Descricao_Item

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

       [Preco Unitario Tabela     ]=VSD_I_Preco_Tabela
       [Local                     ]=VSD_I_Local
       [CFO                       ]=VSD_I_CFOP                
       [NCM                       ]=VSD_I_NCM                

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

       [MVA                       ]=VSD_I_MVA     
       [CSOSN                     ]=SubStr(VSD_I_CSOSN,2,3)              
       [ICMS_CredSN_Aliquota      ]=VSD_I_ACSOSN    
       [ICMS_CredSN_Valor         ]=VSD_I_Valor_CSOSN
                                
       [ICMS_ST_Aliquota          ]=VSD_I_AST       
       [ICMS_ST_BC                ]=VSD_I_BC_ST
       [ICMS_ST_Valor             ]=VSD_I_Valor_ST

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

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

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

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

  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Item do Orcamento         ]

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

       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_Quantidade_Faturada    =[Quantidade Faturada       ]
       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_Preco_Tabela           =[Preco Unitario Tabela     ]

       VSD_I_Local                  =[Local                     ]
       VSD_I_CFOP                   =[CFO                       ]
       VSD_I_NCM                    =[NCM                       ]

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

       VSD_I_CSOSN                  =SubStr([Tipo Tributacao],1,1)+[CSOSN]
       VSD_I_ACSOSN                 =[ICMS_CredSN_Aliquota      ]    
       VSD_I_Valor_CSOSN            =[ICMS_CredSN_Valor         ]

       VSD_I_MVA                    =[MVA                       ]
       VSD_I_AST                    =[ICMS_ST_Aliquota          ]
       VSD_I_BC_ST                  =[ICMS_ST_BC                ]
       VSD_I_Valor_ST               =[ICMS_ST_Valor             ]
       
       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_BC_IPI                 =[IPI_BC                    ]
       VSD_I_Valor_IPI              =[Valor do IPI              ]

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

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

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

EndSwitch
EndProc  ; (Registro_Item)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Item do Orcamento]
Locate [OrcaC->Numero do Orcamento],SEQIT
CopyToArray RegItem
QUANT   = [Quantidade          ]
Registro_Item("Ler")

EndProc ; (Inicia_Registro)

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

F5_ATIVADO=False

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

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

   Label  @ 00,01 "Codigo Item" For "I_Codigo_Item"
   Accept @ 01,01 Width 16 "A10" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,18 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,18 Width 42 "A45" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,61 "TI" For "I_Tipo_Item"
   Accept @ 01,61 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

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

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

   Label  @ 05,01 "Qtd.Faturada" For "I_Quantidade_Faturada"
   Accept @ 06,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade_Faturada" to VSD_I_Quantidade_Faturada
   Label  @ 05,21 "Pr.Tabela" For "I_Preco_Tabela"
   Accept @ 06,21 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   Label  @ 05,45 "Local" For "I_Local"
   Accept @ 06,45 Width 23 "A20" picture "!*!" Tag "I_Local" to VSD_I_Local

   @ 10,00 ?? "Impostos CST    %Red    Aliq.  BC        Valor"
                                 
   Label  @ 11,00 " CSOSN" For "I_CSOSN"
   Accept @ 11,08 Width 07 "A4" picture "####" Tag "I_CSOSN" to VSD_I_CSOSN
   PaintCanvas Attribute 112 11, 14, 11, 22
   Accept @ 11,23 Width 08 "N" picture "#*#.[##]" Tag "I_ACSOSN" to VSD_I_ACSOSN
   PaintCanvas Attribute 112 11, 29, 11, 40
   Accept @ 11,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_CSOSN" to VSD_I_Valor_CSOSN

   Label  @ 12,00 "  ICMS" For "I_CST_Item"
   Accept @ 12,08 Width 07 "A3" picture "!*!" Tag "I_CST_Item" to VSD_I_CST_Item   
   Accept @ 12,15 Width 10 "N" picture "#*#.[####]" Tag "I_RBC_ICMS" to VSD_I_RBC_ICMS
   Accept @ 12,23 Width 08 "N" picture "#*#.[##]" Tag "I_AICMS" to VSD_I_AICMS
   Accept @ 12,30 Width 11 "$" picture "#*#.[##]" Tag "I_BC_ICMS" to VSD_I_BC_ICMS     
   Accept @ 12,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ICMS" to VSD_I_Valor_ICMS

   Label  @ 13,00 "MVA/ST" For "I_AST"
   Accept @ 13,08 Width 08 "N" picture "#*#.[##]" Tag "I_MVA" to VSD_I_MVA
   Accept @ 13,15 Width 10 "N" picture "#*#.[####]" Tag "I_RBC_ST" to VSD_I_RBC_ST
   Accept @ 13,23 Width 08 "N" picture "#*#.[##]" Tag "I_AST" to VSD_I_AST     
   Accept @ 13,30 Width 11 "$" picture "#*#.[##]" Tag "I_BC_ST" to VSD_I_BC_ST  
   Accept @ 13,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ST" to VSD_I_Valor_ST

   Label  @ 14,00 "   IPI" For "I_CST_IPI"
   Accept @ 14,08 Width 07 "A2" picture "!*!" Tag "I_CST_IPI" to VSD_I_CST_IPI  
   Accept @ 14,15 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_IPI" to VSD_I_RBC_IPI
   Accept @ 14,23 Width 08 "N" picture "#*#.[##]" Tag "I_AIPI" to VSD_I_AIPI
   Accept @ 14,30 Width 11 "$" picture "#*#.[##]" Tag "I_BC_IPI" to VSD_I_BC_IPI  
   Accept @ 14,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_IPI" to VSD_I_Valor_IPI

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

   Label  @ 16,00 "   PIS" For "I_CST_PIS"    
   Accept @ 16,08 Width 07 "A2" picture "!*!" Tag "I_CST_PIS" to VSD_I_CST_PIS  
   Accept @ 16,15 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_PIS" to VSD_I_RBC_PIS
   Accept @ 16,23 Width 08 "N" picture "#*#.[##]" Tag "I_APIS" to VSD_I_APIS
   Accept @ 16,30 Width 11 "$" picture "#*#.[##]" Tag "I_BC_PIS" to VSD_I_BC_PIS  
   Accept @ 16,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_PIS" to VSD_I_Valor_PIS

   Label  @ 17,00 "COFINS" For "I_CST_COFINS"   
   Accept @ 17,08 Width 07 "A2" picture "!*!" Tag "I_CST_COFINS" to VSD_I_CST_COFINS 
   Accept @ 17,15 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_COFINS" to VSD_I_RBC_COFINS
   Accept @ 17,23 Width 08 "N" picture "#*#.[##]" Tag "I_ACOFINS" to VSD_I_ACOFINS
   Accept @ 17,30 Width 11 "$" picture "#*#.[##]" Tag "I_BC_COFINS" to VSD_I_BC_COFINS  
   Accept @ 17,40 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_COFINS" to VSD_I_Valor_COFINS

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

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

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok
If Ok
   Then Registro_Item("Gravar")
   Else If CHAVEI=0 or CHAVEI=8
           Then CopyFromArray RegItem
                UnLockRecord
        EndIf
        If CHAVEI=1 Or CHAVEI=8 Then Exclusao_I() EndIf
EndIf
EndProc   ; (Finaliza_Registro)

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DIGITAF()

Carrega_array_Itens()
CALC_ORCA()

If CHAVEF=9
   Then Return   
EndIf

If PARAM_SUBSTICMS="S"
   Then Moveto [Valor BCSubstituicao ICMS]
   Else Moveto [Valor Despesas Acessorias]
EndIf

While True

      MSGCAMPO=Field()
      If Field()="Valor BCSubstituicao ICMS" Then MSGCAMPO="Valor Base Calculo da Substituicao ICMS" EndIf
      If Field()="Frete por Conta"    
          Then MSGCAMPO="Frete por Conta, Consulte [F1]"
      EndIf 
      If Field()="Codigo da Transportadora"
         Then TECLA=" Esc=Retornar  F1=Tabelas  "
         Else TECLA=" Esc=Retornar  "
      EndIf
      TECLA=TECLA+"F6=Imprimir  F8=Cond.Pgto  PgDn=Finalizar  PgUp  "

      Prompt TECLA

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

    Switch
      Case RetVal="F1":
           If Field()="Codigo da Transportadora"
              Then CONSULTAF1()
           EndIf
           If Field()="Frete por Conta"
              Then FreteporConta()
           EndIf   
      Case Retval="F6":
           NCampo=Field()
           ATUA_DADOS()
           If IMPRIME()
              Then QuitLoop
           EndIf
      Case RetVal="PGUP":
           CHAVEF=9
           QuitLoop
      Case RetVal="PGDN":
           QuitLoop
      Case RetVal="F":
           DIGITA_FRETE()
           CALC_ORCA()
      Case RetVal="D":
           DIGITA_DESCTO()
           CALC_ORCA()
      Case RetVal="ESC":
        Switch
           Case Field()="Valor BCSubstituicao ICMS":
                CHAVEF=9
                QuitLoop
           Case Field()="Valor Substituicao ICMS":
                Moveto [Valor BCSubstituicao ICMS]
           Case Field()="Valor Despesas Acessorias":
                If PARAM_SUBSTICMS="S"
                   Then Moveto [Valor Substituicao ICMS]
                   Else CHAVEF=9
                        QuitLoop
                EndIf
           Case Field()="Valor do Seguro":
                Moveto [Valor Despesas Acessorias]
           Case Field()="Codigo da Transportadora":
                Moveto [Valor do Seguro]
           Case Field()="Placa do Veiculo":
                Moveto [Codigo da Transportadora]
           Case Field()="Frete por Conta":
                Moveto [Placa do Veiculo]
           OtherWise:
                Left
        EndSwitch
      Case RetVal="F8":
          CONDPG_Selecionada=[Condicao de Pagamento]

          Moveto "Orcacpg"
          While True
                CHAVEP()
                If CHAVEP=9
                   Then QuitLoop
                Endif
								Controla_EdicaoP()
          EndWhile
          
          Scan
            If [Condicao Pagto Combinado]="X"
               Then CONDPG_Selecionada=[Condicao de Pagamento]
                    QuitLoop
            EndIf
          EndScan

          Moveto "Orcac"
          [Condicao de Pagamento]=CONDPG_Selecionada
      Case RetVal="ENTER":
        Switch
           Case Field()="Valor BCSubstituicao ICMS" Or
                Field()="Valor Substituicao ICMS" Or
                Field()="Valor Despesas Acessorias" Or
                Field()="Valor do Seguro":
                Switch
                  Case Field()="Valor BCSubstituicao ICMS":
                       Moveto [Valor Substituicao ICMS]
                  Case Field()="Valor Substituicao ICMS":
                       Moveto [Valor Despesas Acessorias]
                  Case Field()="Valor Despesas Acessorias":
                       Moveto [Valor do Seguro]
                  Case Field()="Valor do Seguro":
                       Moveto [Codigo da Transportadora]
                EndSwitch
                CALC_ORCA()
           Case Field()="Codigo da Transportadora":
                Moveto [Placa do Veiculo]
           Case Field()="Placa do Veiculo":
								Moveto [Frete por Conta]
           Case Field()="Frete por Conta":
                If IsFieldNull([]) 
                   Then Loop 
                EndIf
                Right
					 Case Field()="Observacao do Orcamento":
                Moveto [Valor do Seguro]
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina Condicao de Pagamento                                                *
;*******************************************************************************
Proc CHAVEP()
While true
  Moveto [Sequencia]
  End
  NITEM = [Sequencia]
  Down
  Moveto [Sequencia]

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

	SetaCorRegistro("Editar")
  While True

      Prompt" Esc=Retornar  F7=Paginar  "
      MSG_CAMPO=FIELD()

      Wait Field
           MESSAGE MSG_CAMPO
           Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN"

      Switch
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           Del
           While True
             PAGINA("Orcacpg","MR")
             If EDITAR="S"
                Then CHAVEP=0
                     SEQIT=[Sequencia]
										 Controla_EdicaoP()
                Else If EXCLUIR="S"
                        Then If QuerExcluir("")
                                Then Del
                                Else UnLockRecord
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf
						 SetaPosForm()
           EndWhile
           QuitLoop
      Case RetvaL="ESC":
           CHAVEP=9
           Del
           Return
      Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate SEQIT
         If Retval
            Then CHAVEP=0
            Else CHAVEP=1
                 End Down
                 [Sequencia]=SEQIT
                 Locate SEQIT
         EndIf
         Return
      EndSwitch
  EndWhile
EndWhile
EndProc

;******************************************************************************
;*Rotina Para Digitacao de Pagamento                                          *
;******************************************************************************
Proc DIGITAP()
Moveto [Condicao Pagto Combinado]
While True

      TECLA=" Esc=Retornar  F3=Ver Venctos  F5=Obs  "

      If Field()="Condicao de Pagamento"
         Then TECLA=TECLA + "F1=Tabelas "
      EndIf
      If CHAVEP=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf

      MSG_CAMPO=FIELD()
      If Field()="Condicao Pagto Combinado"
         Then MSG_CAMPO="X = Condicao Pagto Combinado"
      EndIf
      If Field()="Composicao de Dias"
         Then MSGCAMPO=MSGCAMPO+", Exemplo: 15/30/45/60 "
      EndIf

      Prompt TECLA
      SetaCorRegistro("Editando")
      Wait Field
             MESSAGE MSG_CAMPO
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","F3","F5","PGDN"

      Switch
      Case RetVal="F1":
           If Field()="Condicao de Pagamento"
              Then CONSULTAF1()
           EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEP=0
              Then If QuerExcluir("")
                      Then Del
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="ESC":
           Switch
           Case Field()="Condicao Pagto Combinado":
                If QuerDesfazer("")
                   Then If CHAVEP=1
                           Then Del
                           Else Undo
                                UnLockRecord
                        Endif
                        QuitLoop
                Endif
           Case Field()="Taxa Financeira":
                Moveto [Condicao Pagto Combinado]
           Otherwise:
                Left
           EndSwitch
      Case Retval="F5":

           CampoAnt=Field()
           Digita_Obs()
           Moveto Field CampoAnt

      Case Retval="F3":
           CALC_VENCTOS()
      Case Retval="PGDN":
           UnLockRecord
           QuitLoop
      Case Retval="ENTER":
           Switch
           Case Field()="Condicao Pagto Combinado":
                If []="X" Or IsBlank([])
                   Then Moveto [Condicao de Pagamento]
                EndIf
           Case Field()="Condicao de Pagamento":
                If IsBlank([])
                    Then Loop
                Endif
                Moveto [Taxa Financeira]
           Case Field()="Taxa Financeira":
                [Valor Nota Fiscal]=[OrcaC->Valor Nota Fiscal]+
                                    NDecimal(([OrcaC->Valor Nota Fiscal]*[Taxa Financeira])/100,2)
                Right
           Case Field()="Composicao de Dias":
                Moveto [Condicao Pagto Combinado]
                QuitLoop
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc

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

VSD_OBS       =[Observacao          ]

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

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

Enddialog
Mouse Show
EndProc

;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS()
Private Contador_Repeticao
Contador_Repeticao=0
For ncc From 1 To Len([Composicao de Dias])
    If Asc(SubStr([Composicao de Dias],ncc,1))<47 Or
       Asc(SubStr([Composicao de Dias],ncc,1))>57
       Then Mensagem("Formato da Composicao de Dias Invalido !,//Exemplo= 30/60/90")
            Return
       Else If SubStr([Composicao de Dias],ncc,1)="/"
               Then Contador_Repeticao=Contador_Repeticao+1
               Else Contador_Repeticao=0
            EndIf
            If Contador_Repeticao>1 Or
               SubStr([Composicao de Dias],1,1)="/" Or
               SubStr([Composicao de Dias],Len([Composicao de Dias]),1)="/"
               Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
                    Return
            EndIf
    EndIf
EndFor

If IsAssigned(Array_Vencimentos)  Then Release Vars Array_Vencimentos EndIf
DynArray Array_Vencimentos[]

NPC=1
i=1
If Not IsBlank([Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[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=[Numero de Parcelas]
   Else If NPC=1 And [Numero de Parcelas]>1
           Then NP=[Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

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

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

  If pos_s=0 And NPC=1 And NP>1
     Then V_Data=[OrcaC->Data de Emissao]+(NDIAS*i)
     Else V_Data=[OrcaC->Data de Emissao]+NDIAS
  EndIf
  If i<>NP
     Then V_Valor=VRVENCTO
     Else V_Valor=VRVENCTO+VRDIFERE
  EndIf

  Array_Vencimentos[i]=Alinhm(StrVal(i),2)+" "+Format("D13",V_Data)+Format("W13.2,EIC",V_Valor)
  i=i+1
EndWhile

ShowDialog "Vencimentos" Proc "Geral_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "ENTER","ESC"
   @ 04,01 Height 12 Width 33

    PickDynArray @1,01 Height 08 width 29
     Columns 1
      Array_Vencimentos
       Tag "TG_VENCIMENTOS"
        To ArrayElement
    Label @ 00,01 "    Data             Valor"  For "TG_VENCIMENTOS"

  EndDialog

EndProc

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc CALC_ORCA()
Aguarde("Calculando valores do pedido")

Switch
  Case Table()="Pedidoc": TabelaRefC="PedidoC"  TabelaRefI="PedidoI"
EndSwitch
 
Moveto TabelaRefC
CampoTab=Field()

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

Moveto TabelaRefC
Moveto Field CampoTab

[Valor BCICMS ]=VRBCICMS
[Valor ICMS   ]=VRICMS
[Valor IPI    ]=VRIPI
[Valor BCISSQN]=VRBCISSQN
[Valor ISSQN  ]=VRISSQN
[Valor PIS    ]=VRPIS
[Valor COFINS ]=VRCOFINS

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

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 And ALIQUOTA_CREDITO_ICMS_NOSN>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

Moveto "OrcaCpg"
Home
While RecordStatus("New")=False
  [Valor Nota Fiscal]=[OrcaC->Valor Nota Fiscal]+
                      NDecimal(([OrcaC->Valor Nota Fiscal]*[Taxa Financeira])/100,2)
  Down
EndWhile

Moveto TabelaRefC
Moveto Field CampoTab

LimpAguarde()
EndProc

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Geral_Dialog(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento,temp

Temp=True
INICIO_DIALOG=True
OP_SHOWD="DTBASE"

If INICIO_DIALOG
   Then INICIO_DIALOG=False
EndIf          

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = 27:
      ;;;***** 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="I_Flag"        : Campo="Valor_Frete"
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto"      : CancelDialog
             Case Campo="Descto"        : Campo="A_Descto"
           EndSwitch

      ;;;***** VENCIMENTOS   ****
           Switch
             case Campo="TG_VENCIMENTOS": CancelDialog
           EndSwitch

      ;;;***** OBS ****
           Switch
             case Campo="OBS"           : CancelDialog
           EndSwitch

           Temp=False
      Case Evento["KeyCode"] = 13:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso":
                  VSD_Frete_Incluso=ControlValue("Frete_Incluso")
                  If IsBlank(VSD_Frete_Incluso) Or
                     VSD_Frete_Incluso<>"S"
                     Then VSD_Frete_Incluso="N"
                          VSD_ABC_Frete    =BlankNum()
                          VSD_Frete        =BlankNum()
                          VSD_AICMS_Frete  =BlankNum()
                          VSD_ABCICMS_Frete=BlankNum()
                          VSD_CFO_Frete    =""
                          
                          [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 Campo="ABC_Frete"
                  Endif
             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 Or VSD_Frete_Incluso<>"S"
                     Then 
                          VSD_Frete_Incluso="N"
                          VSD_ABC_Frete    =BlankNum()
                          VSD_Frete        =BlankNum()
                          VSD_AICMS_Frete  =BlankNum()
                          VSD_ABCICMS_Frete=BlankNum()
                          VSD_CFO_Frete    =""
                          
                          [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 
                                  VSD_AICMS_Frete  =BlankNum()
                                  VSD_ABCICMS_Frete=BlankNum()
                                  VSD_CFO_Frete    =""
                                  
                                  [Frete Incluso na Nota ]="+"
                                  [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                                  [Valor do Frete        ]=VSD_Frete
                                  [Aliquota BCICMS Frete ]=BlankNum()
                                  [Aliquota de ICMS Frete]=BlankNum()
                                  [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()
                          AcceptDialog
                     Else VSD_A_Descto=BlankNum()
                          Campo="Descto"
                  EndIf
             Case Campo="Descto":
                  VSD_Descto=ControlValue("Descto")
                  AcceptDialog
           EndSwitch
      ;;;***** OBS ****
           Switch
             case Campo="OBS"           :
               VSD_OBS=ControlValue("OBS")
               [Observacao]=VSD_OBS
               AcceptDialog
           EndSwitch

           RefreshDialog
           Temp=False
   EndSwitch
EndIf
SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="CBanco"      Or
   Campo="TipoEmit"    Or
   Campo="NomeCartao"
   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()
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

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

Enddialog
Mouse Show
EndProc

;*******************************************************************************
;* Digitacao dos Dados do Desconto                                             *
;*******************************************************************************
Proc Digita_Descto()
Private DesctoOk

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
If Not RetVal
   Then Return
EndIf

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

If DesctoOk
   Then [Taxa de Desconto ]=VSD_A_Descto
        [Valor do Desconto]=VSD_Descto
EndIf

EndProc

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

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

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




;*******************************************************************************
;* Atualiza Demais Dados                                                       *
;*******************************************************************************
Proc ATUA_DADOS()
Moveto "OrcaI"
Scan
  [Taxa Desconto Total ]=TXDESCTO_TOTAL
  [Valor Desconto Total]=Round(([Preco Total]*TXDESCTO_TOTAL)/100,2)
  VBC= [Preco Total]-[Valor Desconto Total]
  VBC= VBC-Round((VBC*[Aliquota Reduzida BCIPI])/100,2)
  [Valor do IPI            ]= Round((VBC*[Aliquota de IPI])/100,2)
  VBC= [Preco Total]-[Valor Desconto Total]
  VBC= VBC-Round((VBC*[Aliquota Reduzida BCICMS])/100,2)
  [Valor do ICMS           ]= Round((VBC*[Aliquota de ICMS])/100,2)
  VBC= [Preco Total]-[Valor Desconto Total]
  [Valor do ISSQN          ]= Round((VBC*[Aliquota de ISSQN])/100,2)
EndScan
UnLockRecord
SaveTables

Moveto "OrcaC"
EndProc 

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO_C()
Moveto "OrcaI"
While RecordStatus("New")=False
  EXCLUSAO_I()
EndWhile
Moveto "OrcaCPG"
While RecordStatus("New")=False
  Del
EndWhile
Moveto "OrcaC"
Del
EndProc

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc EXCLUSAO_I()
Moveto "OrcaI"
Del
EndProc

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC,OPCAON,TAB_ANT,CAMPO_ANT

SaveTables

TAB_ANT   = Table()
CAMPO_ANT = Field()

If IsBlank(PARAM_FAX)
   Then Opcaoc="Imprimir"
   Else Echo Normal
        Echo Off
        ShowPopup " Op‡”es " CENTERED
           "~C~ancela"     : " N„o Imprime no Momento"                 :"Cancela",
           "~I~mprimir"    : " Imprime Orcamento N§ "+ORCA             :"Imprimir",
           "~G~ravar"      : " Gravar p/ Enviar FAX Orcamento N§ "+ORCA:"Gravar"
        EndMenu
        To Opcaoc

        Echo off

        If Not Retval or Opcaoc="Esc"
           Then Opcaoc="Cancela"
        EndIf
Endif

If Opcaoc="Cancela"
   Then Moveto Field NCampo
	      Return False
EndIf

Do_It!
If Opcaoc="Imprimir"
   Then Dispositivo()
        If OK=""
           Then CoEditKey
                Moveto Field NCampo
                Return False
        EndIf

        For i From 1 To NUMCOPIA
           Play PARAM_RELATORIO
        EndFor
   Else Play PARAM_FAX
        Mensagem("Grava‡„o Concluida !")
EndIf

ClearAll
Carrega_Tabelas()

Coedit "OrcaC"
Moveto [Numero do Orcamento]
Locate ORCA

PickForm OPCAO_FORM_MAN

Moveto TAB_ANT
Moveto Field CAMPO_ANT

Return True
EndProc       

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Pega_Dados_Item(Origem) 
Private Item_ok, Origem

Item_ok=False

Moveto [Codigo do Item]
Ativa_Lookup()
Switch
  Case Origem="Codigo_Barras":
      Switch
        Case SYS_CODIGO_CLIENTE="0304":
              Moveto [Codigo de Barras]
              Locate IndexOrder by "cod_barras" CODIGO_BARRA
        OtherWise:        
              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        
      EndSwitch      
  OtherWise : Localizar_Item_Por()     
EndSwitch
                                                                             
If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       KeyPress "ESC"

       While True
         VSD_I_Referencia=REG_BUSCA_LOOKUP["Referencia"]
                  
         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    

         If REG_BUSCA_LOOKUP["Producao Esgotada"] ="S"
            Then Mensagem("Este item: //"+REG_BUSCA_LOOKUP["Codigo do Item"]+"//"+REG_BUSCA_LOOKUP["Descricao do Item"]+"// // esta com produ‡„o esgotada !")
         EndIf

         FAMILIA=REG_BUSCA_LOOKUP["Codigo da Familia"] 

        ;-----------------------------------------------------------------------------------------       
         
         CODIGO_BARRA=REG_BUSCA_LOOKUP["Codigo do Item"]
         VSD_I_Codigo_Item =CODIGO_BARRA
         Pega_Preco("Novo")
         [Codigo do Item]  =CODIGO_BARRA

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

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

                         [COFINS_CST     ]="99"
                         [COFINS_Aliquota]=BlankNum()
                 EndIf        
                         
            Else

                 ;;alterado 12/02/2014 
                 ;;pega dados primeiro como "DEBITO/CREDITO"
                 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
                 VSD_I_CST_Item=[Tipo Tributacao]

                 [Tributacao de ISSQN     ]="N"
                 [Aliquota de ISSQN       ]=BlankNum()

                 ;;alterado 12/02/2014 
                 ;;e se for "SIMPLES.." pega novos dados 
                 Switch
                   Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
        
                         Switch
                           Case (Search("MOSTR",[OrcaC->Descricao da Destinacao])>0  Or
                                 Search("DEVOL",[OrcaC->Descricao da Destinacao])>0  Or
                                 Search("BRIND",[OrcaC->Descricao da Destinacao])>0) And
                                SYS_CLIENTE_CONFEC<>"":
                                [CSOSN]="400"

                           Case ( TP_MOV_ESTOQUE="S" And
                                  (Search("VEND",[OrcaC->Descricao da Destinacao])>0 And
                                   [OrcaC->Tipo Pessoa]="FISICA") )
                                  Or 
                                ( TP_MOV_ESTOQUE="E" Or
                                  Search("VEND",[OrcaC->Descricao da Destinacao])=0 Or
                                  [OrcaC->Tipo Pessoa]="FISICA" ):  
                                 Switch
                                   Case [CSOSN]="101": [CSOSN]="102" 
                                   Case [CSOSN]="201": [CSOSN]="202" 
                                 EndSwitch

                         EndSwitch
                         VSD_I_CSOSN=SubStr([Tipo Tributacao],1,1)+[CSOSN]
        
                         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                                 
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA([Tributacao de ICMS],[Codigo MVA])
        
                           Case [CSOSN]="202" Or [CSOSN]="203" Or [CSOSN]="500":
                                ;[ICMS_CREDSN_Aliquota]=BlankNum()
                                If OPCAO_RED_BCICMS="1"
                                   Then [Aliquota Reduzida BCICMS]=BlankNum()
                                EndIf
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA([Tributacao de ICMS],[Codigo MVA])
        
                           OtherWise:
                                [ICMS_CREDSN_Aliquota]=BlankNum()
                                [MVA                 ]=BlankNum()
                                [ICMS_ST_Aliquota    ]=BlankNum()                  
                         EndSwitch

                         [Tributacao de Icms      ]=Pega_TipoTributacao("CSOSN",[CSOSN])
                         [Aliquota Reduzida BCICMS]=BlankNum()
                         [Aliquota de ICMS        ]=BlankNum()                         
                         
                   OtherWise: ;-- DEBITRO/CREDITO -----

                         Switch
                           Case (TribCST="10" Or TribCST="30" Or TribCST="70"):
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA([Tributacao de ICMS],[Codigo MVA])
                           Case TribCST="60" And Search("DEVOL",[OrcaC->Descricao da Destinacao])>0 And TP_MOV_ESTOQUE="E":
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA([Tributacao de ICMS],[Codigo MVA])
                           OtherWise:     
                                [MVA             ]=BlankNum()
                                [ICMS_ST_Aliquota]=BlankNum()
                         EndSwitch

                         [CSOSN               ]="900"
                         [ICMS_CREDSN_Aliquota]=BlankNum()
                         [ICMS_CredSN_Valor   ]=BlankNum()

                 EndSwitch
                 
         EndIf   

         ;* Seta Variaveis PegaCFOP
         Checa_CFOP      =TP_MOV_ESTOQUE
         CFO_C           =[OrcaC->CFO      ]
         CFOP_TPITEM     =[Tipo do Item      ]
         CFOP_TRIBICMS   =[Tributacao de ICMS]
         CFOP_TPTRIB     =[Tipo Tributacao   ]
         CFOP_EMPRESA    =[OrcaC->Codigo da Empresa ]
         CFOP_ATIVEMPRESA=ATIVEMPR
         Play "\\Sistemas\\Exporta\\PegaCFOP"        
         [CFO            ]=CFO_C
         [Tipo Tributacao]=CFOP_TPTRIB

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

         If Search("VENDA",[OrcaC->Descricao da Destinacao])=0 And TP_MOV_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 Localizar_Item_Por()

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

EndProc ;Localizar_Item_Por() 

;*******************************************************************************
;* Rotina para Tabela de Preco                                                 *
;*******************************************************************************
Proc Pega_Preco(OpcaoP)
Private OpcaoP, TABPR, CPGTO, Registro_Tab_Preco,
        Registro_TabPreco_CondPagto, PesqOk


CodItem=VSD_I_Codigo_Item

PARAM_PEGAPRECO_CPAGTO = "N"

TABPR=[OrcaC->Codigo da Tabela]
CPGTO=[OrcaC->Condicao de Pagamento]

ITEM_PROMOCIONAL="N"
PesqOk     =False

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
EndIf
             
If PARAM_UTILIZA_TABPR_CLIENTE="S"
   Then Moveto [Lookup_TabPreco_Cliente]
        Ativa_Lookup()
        Moveto [Codigo da Tabela]
        Locate TABPR,[OrcaC->Codigo],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 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)
                   Else If OpcaoP="Altera"
                           Then MSG="Na Tabela de Pre‡o ["+TABPR+"] n„o consta a condi‡„o de pagamento ["+CPGTO+"]!// //"
                                MSG=MSG+"Valor do Item n„o foi alterado, Anote e Verifique !// //"
                                MSG=MSG+"Continuar a altera‡„o nos outros Itens ?"
                                ConfGeral(MSG)
                                If OK<>"S"
                                   Then Return False
                                EndIf
                           Else [Preco Unitario       ]=BlankNum()
                                [Preco Unitario Tabela]=BlankNum()
                        EndIf
                EndIf
           Else [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
                [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]
        EndIf
   Else KeyPress "ESC"
        If OpcaoP="Altera"
           Then MSG="Item ["+CodItem+"] n„o consta na Tabela de Pre‡o ["+TABPR+"]!// //"
                MSG=MSG+"Valor do Item n„o foi alterado, Anote e Verifique !// //"
                MSG=MSG+"Continuar a altera‡„o nos outros Itens ?"
                ConfGeral(MSG)
                If OK<>"S"
                   Then Return False
                EndIf
           Else [Preco Unitario       ]=BlankNum()
                [Preco Unitario Tabela]=BlankNum()
        EndIf
EndIf

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

Moveto "OrcaI"
Switch
  Case OpcaoP="Novo":
       [Preco Unitario       ]=VSD_I_Preco_Unitario
       [Preco Unitario Tabela]=VSD_I_Preco_Tabela
       UnLockRecord
  Case OpcaoP="Altera":
       If [Preco Unitario]<=0
          Then Undo
               MSG="O Item ["+CodItem+"] esta sem valor na Tabela de Pre‡o ["+TABPR+"]!// //"
               MSG=MSG+"Valor do Item n„o foi alterado, Anote e Verifique !"
               Mensagem(MSG)
          Else [Preco Unitario       ]=VSD_I_Preco_Unitario
               [Preco Unitario Tabela]=VSD_I_Preco_Tabela
               UnLockRecord
               If [Taxa Desconto Unitario]>0
                  Then [Valor Desconto Unitario]=NDecimal(([Preco Unitario]*[Taxa Desconto Unitario])/100,2)
               EndIf
               If [Quantidade]>0
                  Then [Preco Total]=[Quantidade]*([Preco Unitario]-[Valor Desconto Unitario])
                  Else If [Preco Unitario]>0
                          Then [Preco Total]=[Preco Unitario]-[Valor Desconto Unitario]
                       EndIf
               EndIf
               If [Aliquota Reduzida BCICMS]>0 And
                  [Aliquota de ICMS        ]>0
                  Then [Valor do ICMS]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
                  Else [Valor do ICMS]=Round(([Preco Total]*[Aliquota de ICMS])/100,2)
               EndIf
               If [Tributacao de IPI]<>"D"
                  Then If Not IsBlank([Tributacao de IPI])
                          Then [Aliquota de IPI]=BlankNum()
                               [Valor do IPI   ]=BlankNum()
                       EndIf
               EndIf
               If [Aliquota de IPI        ]>0
                  Then [Valor do IPI]=Round(([Preco Total]*[Aliquota de IPI])/100,2)
               EndIf
               UnLockRecord
       EndIf
EndSwitch

Echo Normal
Echo Off

Return True
EndProc ;(Pega_Preco)

;*******************************************************************************
;* Rotina para Organizar Itens pela Descricao                                  *
;*******************************************************************************
Proc Organiza_Itens()
Private Cont, Nr

If [OrcaC->Situacao do Orcamento]="FATURADO"
   Then Mensagem("Orcamento ["+[OrcaC->Situacao do Orcamento]+"] ! // //Organiza‡„o n„o disponivel !")
        Return
EndIf

Cont=0
Scan
  If [Quantidade Faturada]>0
     Then Cont=Cont+1
  EndIf
EndScan

If Cont>0
   Then Mensagem("Orcamento com "+StrVal(Cont)+" itens J  FATURADOS ! // //Organiza‡„o n„o disponivel !")
        Return
EndIf

Aguarde("Organizando")

Moveto "OrcaC"
Do_It!
ClearAll

{Ask} {OrcaI} Check
Moveto [Numero do Orcamento] TypeIn "~ORCA"
Do_It!
ClearAll

If Not IsBlank("Answer")
   Then
        Switch
          Case MenuVar="Descricao"  : Sort "Answer" On "Numero do Orcamento","Descricao do Item","Item do Orcamento"
          Case MenuVar="Sequencial" : Sort "Answer" On "Numero do Orcamento","Item do Orcamento"
        EndSwitch
        ClearAll

        If Not IsBlank("Answer")
           Then
                View "Answer"
                CoEdit "OrcaI"
                Moveto [Numero do Orcamento]
                Locate ORCA
                If RetVal
                   Then While [Numero do Orcamento]=ORCA
                          Del
                          If EOT() Then QuitLoop EndIf
                        EndWhile

                        NR = NRecords("Answer")
                        Moveto "Answer"
                        Scan

                          Barra(NR, RecNo())
                          Aguarde("Aguarde, Organizando "+BARRA_STRING)

                          [Item do Orcamento]=RecNo()
                          CopyToArray REGORC

                          Moveto "OrcaI"
                          End
                          Down
                          CopyFromArray REGORC
                          UnLockRecord

                          Moveto "Answer"
                        EndScan
                        Do_It!
                        ClearAll

                        Delete "Answer"

                        Mensagem("Fim organiza‡„o !")
                   Else Mensagem("Erro durante a organiza‡„o, tente novamente !")
                EndIf
        EndIf
   Else Mensagem("Erro durante a organiza‡„o, tente novamente !")
EndIf
LimpAguarde()

Carrega_Tabelas()
Coedit "OrcaC"
PickForm OPCAO_FORM_MAN

Moveto [Numero do Orcamento]
Locate ORCA

Moveto "OrcaI"

EndProc

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

;;;View NoWindow "\\Sistemas\\Cadastro\\Destinat"

View NOWINDOW "P_Orca"
View NOWINDOW "OrcaI"

;;;View NOWINDOW "TbPrIte"
;;;View NOWINDOW "TbPrCpg"
;;;View NOWINDOW "TbprCli"
;;;View NOWINDOW "TbprCit"

;;;View NOWINDOW  "\\Sistemas\\Estoque\\Itens"
;;;View NOWINDOW  "\\Sistemas\\Estoque\\SdEstq"
;;;View NOWINDOW  "\\Sistemas\\Estoque\\EstqPrm"

EndProc   ; (Carrega_Tabelas)

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

If IsEmpty("P_Orca")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Result=False
   Else 
        UnLockRecord
        KeyPress "F7"
        While True
          If Not IsLockRecord()
             Then QuitLoop
          EndIf
        EndWhile
        
        Moveto "P_Orca"
        Moveto [Codigo_Empresa]
        Locate [OrcaC->Codigo da Empresa]
        If Not RetVal
           Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Result=False
           Else     
                PARAM_RELATORIO            =[Script_Impressao         ]
                PARAM_FAX                  =[Script_Gravacao          ]
                PARAM_DESTINACAO           =[Codigo_Destinacao        ]
                PARAM_SUBSTICMS            =[Substituicao ICMS        ]
                PARAM_LOCAL                =[Utiliza_local            ]
                PARAM_ALTERA_PRECO         =[Utiliza_Alteracao_Preco  ]
                PARAM_IMPOSTOS             =[Impostos                 ]
                PARAM_TABELA_PRECO         =[Tabela_Preco             ]
                PARAM_TRANSPORTADORA       =[Codigo_Transportadora    ]
                PARAM_PEGAPRECO_CPAGTO     =[Pega_Preco_Tabela_CPagto ]
                PARAM_UTILIZA_TABPR_CLIENTE=[Utiliza_TabPreco_Cliente ]
                PARAM_EXIBECUSTO           =[Exibe_Custo_Item_Consulta]
                
                PARAM_BLOQ_DESCTO          =[Utiliza_Bloqueio_Descto  ]
                PARAM_BLOQ_TPDESCTO        =[Tipo_Bloqueio_Descto     ]
                PARAM_BLOQ_TXDESCTO        =[Taxa_Bloqueio_Descto     ]
                
                PARAM_DESCUNIT             =[Desconto Unitario        ]
                PARAM_BLOQ_DESCTOUNIT      =[Utiliza_Bloqueio_DesctoUn]
                PARAM_BLOQ_TPDESCTOUNIT    =[Tipo_Bloqueio_DesctoUn   ]
                PARAM_BLOQ_TXDESCTOUNIT    =[Taxa_Bloqueio_DesctoUn   ]
                
                Result=True
        EndIf
EndIf

Moveto "OrcaC"
KeyPress "F7"

Return Result
EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
DIGITAI()
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoP()
DIGITAP()
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
OPCHAVEI=""
While FACA_DIGITAC
  Moveto "OrcaC"
  Moveto [Data de Emissao]
  Resynckey
  Sleep 300

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

	While FACA_CHAVEI
    Moveto "OrcaI"
    Moveto "OrcaC"
    Moveto [Tipo Pessoa]
    Resynckey
    Sleep 300
    
		While True
      If OPCHAVEI="CDB"
         Then CHAVECDBAR()
              If CHAVEI=9 Then Quitloop EndIf
              If CHAVEI=7 Then     Loop EndIf
         Else CHAVEI()
              If CHAVEI=9 Then QuitLoop EndIf
              If CHAVEI=7 Then     Loop EndIf
              Controla_EdicaoI()
      EndIf
		EndWhile
		While FACA_DIGITAF
      Moveto "OrcaCPG"
      Moveto "OrcaC"
      Moveto [Codigo da Transportadora]
      Resynckey
      Sleep 300

			DIGITAF()
			Rateio_BC_Itens("OrcaC")
      If CHAVEF=0
				 Then FACA_DIGITAC=False
							FACA_CHAVEI =False
			EndIf
			QuitLoop
		EndWhile
	EndWhile
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM=OPCAO_FORM_REL
	 Then PickForm OPCAO_FORM_REL
EndIf
EndProc

;***************************+***************************************************
;* Rotina Principal Orcamento                                                  *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""    EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"  EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""  EndIf

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

Array AICMS[10]
Array AIPI[10]
Array AISSQN[10]

Array VIICMS[10]
Array VIIPI[10]
Array VIISSQN[10]

Array BCICMS[10]
Array BCIPI[10]
Array BCISSQN[10]

Array RICMS[10]
Array RIPI[10]

OPCAO_FORM_REL="F"
OPCAO_FORM_MAN="1"
OPCAO_FORM    =OPCAO_FORM_REL

Carrega_Tabelas()
CoEdit "OrcaC"
PickForm OPCAO_FORM_REL

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