;** Compra *********************************************************************
;** Digitacao de Ordem de Compra                                               *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 26/09/2001 por Anivel Augusto Rodrigues
;Ultima Alteracao: 02/02/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 09/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Round() Calculo Fator de Conversao
;Ultima Alteracao: 23/05/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle Mouse
;Ultima Alteracao: 13/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Substituicao                          
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                             
;Ultima Alteracao: 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: 20/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Copiar Ordem
;Ultima Alteracao: 05/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 15/07/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA, Inclusao UFO
;Ultima Alteracao: 17/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Interno -> MVA_1
;Ultima Alteracao: 22/12/2009 por Cleber Alves
;Motivo Alteracao: Ajustes campo Data Competencia
;Ultima Alteracao: 14/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 23/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Frete por Conta"
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 14/03/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Tributacao de ISSQN     
;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: 08/03/2012 por Karina Andrade
;Motivo Alteracao: Add rotina com formar de Localizar Itens
;Ultima Alteracao: 22/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes op‡Æo sair dos showpoup
;Ultima Alteracao: 02/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ICMS item debitado or CST =?10 inforamr aliquota        
;Ultima Alteracao: 18/04/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado Consulta na Digita‡Æo dos Itens      
;Ultima Alteracao: 16/08/2012 por Bruno Carvalho
;Motivo Alteracao: InclusÆo Digitai() "VSD_I_Referencia"
;Ultima Alteracao: 21/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Ficha do Item" para informar o valor exato VSD_I_Referencia
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 01/10/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao de FILTRO        
;Ultima Alteracao: 02/10/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ao executar a rotina ficha dos itens  
;Ultima Alteracao: 26/10/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes fator ce conversao=1 para GM 0319                        
;Ultima Alteracao: 21/02/2013 por Karina Andrade
;Motivo Alteracao: Ajustes mensagem invalida para origem do CST
;Ultima Alteracao: 15/04/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes dados Showdialog Frete                                         
;Ultima Alteracao: 27/05/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes Calc_Vencto()
;Ultima Alteracao: 19/03/2014 por Kamila Gomes                          
;Motivo Alteracao: Ajustes Unidade Entrada
;Ultima Alteracao: 15/11/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes MODOFILTRAR, MODOFILTRARINCLUI e MODOFILTRARATIVO
;Ultima Alteracao: 26/06/2015 por Kamila Gomes
;Motivo Alteracao: Implementa‡Æo da inclusÆo dos itens
;Ultima Alteracao: 12/08/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado edicao da descricao conforme parametro no cadastro do item
;Ultima Alteracao: 12/04/2016 por Kamila Gomes
;Motivo Alteracao: Adicionado campo Informacoes_Adicionais
;Ultima Alteracao: 12/05/2016 por Bruno Carvalho
;Motivo Alteracao: Inclusao ModoLocalizarItem()
;Ultima Alteracao: 20/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Edita Descricao do Item]
;Ultima Alteracao: 09/06/2016 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes View PedidoI, OCI para consulta                      
;Ultima Alteracao: 15/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajsutes Coedi‡Æo a pressionar F8 p/ incluir item na compra
;Ultima Alteracao: 17/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 28/12/2016 por Rafael Matos 
;Motivo Alteracao: Ajustes ShowDialog TG_DESTINAT
;Ultima Alteracao: 09/02/2017 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes MSGCAMPO, TECLA, Fun‡äes, buscar itens do pedido de venda
;Ultima Alteracao: 03/03/2017 por Kamila Gomes                           
;Motivo Alteracao: Ajustes Desfazer qquando est  no campo Data de Entrega
;Ultima Alteracao: 10/04/2017 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado [Numero do Pedido] no FORM
;Ultima Alteracao: 03/05/2017 por Bruno Carvalho 
;Motivo Alteracao: Ajustes ao informar um pedido no cabe‡alho, se o mesmo j  nÆo foi lan‡ado anteriormente em outra OC
;Ultima Alteracao: 04/05/2017 por Bruno Carvalho 
;Motivo Alteracao: Ajustes DIGITAC() -> [Numero do Pedido], se CHAVEC=0 e caso houver itens j  lan‡ados, nÆo deixar alterar o pedido
;Ultima Alteracao: 19/05/2017 por Rafael Matos
;Motivo Alteracao: Altera‡Æo do layout e incluso PGDN em alguns campos da Digita‡Æo do Item. Ajustes Ajusta_Dados_Item(). 
;Ultima Alteracao: 05/07/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado no "F6","F8" o correspondente a sua tecla -64,-66 
;Ultima Alteracao: 18/08/2017 por Bruno Carvalho
;Motivo Alteracao: Ao pressionar "F6', CHAVEI nÆo estava sendo setado se pressionado ESC -> ChaveI()
;Ultima Alteracao: 12/09/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado fun‡Æo "Ctrl+C" p/ calcular pe‡as #0377#
;Ultima Alteracao: 12/09/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado N§ Carregamento no FORM
;Ultima Alteracao: 12/09/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Peso Liquido" no ShowDialog dos dados do item 
;Ultima Alteracao: 27/09/2017 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes SomatoriaDosItens()
;Ultima Alteracao: 27/09/2017 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Filtro                    
;Ultima Alteracao: 01/11/2017 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes ao informar o item, caso o mesmo tenha quantidade ou preco unitario zerado, o preco total ser  zerado
;Ultima Alteracao: 27/01/2018 por Bruno Carvalho
;Motivo Alteracao: Removido processos que destinavam … variavel de controle EDITA_DESCRICAO_ITEM
;Ultima Alteracao: 05/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes alterar item que estava com codigo em branco
;Ultima Alteracao: 15/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes islockrecord() titulos
;Ultima Alteracao: 09/05/2018 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado processo EDITA_DESCRICAO_ITEM #0232# -> Sol. 35823
;Ultima Alteracao: 16/10/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes locregistro
;Ultima Alteracao: 24/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog filtro
;Ultima Alteracao: 25/01/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao copiar OC, permitindo usu rio escolher em importar todos os itens ou somente itens pendentes -> Copiar()            
;Ultima Alteracao: 19/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Novo campo Tipo da Operacao OC
;Ultima Alteracao: 14/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 26/06/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no plano de contas "SAIDA" ou "ENTRADA" -> Fun‡Æo PlContas() p/ verificar o plano de conta informado
;Ultima Alteracao: 18/09/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes data de entrada titulos
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 06/01/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado Cliente_Inativo() e Transportador_Inativo()
;Ultima Alteracao: 22/01/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pegar valor da ultima compra ou ultima cotacao
;Ultima Alteracao: 22/01/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes na proc Ajusta_Dados_Item(), onde foi atribuido regcotacao ao campo [Data de Compra] e [Data_Ult_Cotacao]
;Ultima Alteracao: 31/01/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado PARAM_ORIGEM_PRECO e PARAM_ALTERA_PRECO

;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Compra                              *
;*******************************************************************************
Proc ChaveC()
private locregistro

INICIO_PAGINA=True
COPIOU_REGISTRO=False
FACA_DIGITAC=True

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

While True
  Moveto TabelaControle ; FILTRO
  End
  Moveto [Numero da OC]
  OC=[Numero da OC]
  If OPCAO_FORM="F"
    Then Down
    Else PgDn PgDn PgDn
  EndIf
  Moveto [Numero da OC]

  SetaCorRegistro("Editar")
  While True
  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadraoCF()

  If RetVal="F5"
     Then If MODOFILTRAR
             Then Array MfOpcao[2]
                  MfOpcao[1] = "\"~O~rdenar por N§ OC\" : \" Ordernar registros filtrados\" : \"15NOC\""
                  MfOpcao[2] = "\"~O~rdenar por Fornecedor\" : \" Ordernar registros filtrados\" : \"15FORN\""
          EndIf
          RetVal = MenuFiltrar()
          Release Vars MfOpcao
  EndIf
  
  Switch
    ; ---- FILTRO --------------------------------------------------------------
    Case RetVal="15NOC"  And MODOFILTRAR And MODOFILTRARATIVO: Del OrdenaCampo("Numero da OC") QuitLoop ; posso utilizar um indice jaïexistente
    Case RetVal="15FORN" And MODOFILTRAR And MODOFILTRARATIVO: Del OrdenaCampo("Razao Social") QuitLoop
    Case RetVal="MENUFILTRAR" :
         CHAVEC=99
         Del
         Return
    Case RetVal="MENUFILTROTODOS" :
         MODOFILTRAR=False
         CHAVEC=98
         Del
         Return
    ;---------------------------------------------------------------------------
    Case RetVal=-33 : SemFuncoes()
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM="F"
            Then OPCAO_FORM="1"
            Else OPCAO_FORM="F"
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         MODOPAGINA = True
         
         Del
         While True
           INICIO_PAGINA=True
           COPIOU_REGISTRO=False
           FACA_DIGITAC=True

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

           If OPCAO_FORM="F"
              Then PAGINA(TabelaControle,"MR") ;FILTRO
              Else PAGINA(TabelaControle,"MT") ;FILTRO
           EndIf
           OC=[Numero da OC]
           locregistro=recno()
           Switch
             Case EDITAR="S":
                  If PegaRegistroControle("Numero da OC",OC) ;FILTRO
                     Then PickForm "1"
                          Echo Normal
                          Echo Off
                          If [Situacao da OC]="CANCELADA" Or
                             [Situacao da OC]="ENTREGUE"
                             Then If Checa_Controle([Numero_Controle_Dia])
                                     Then CHAVEC=0
                                          Controla_EdicaoC()
                                     Else UnLockRecord
                                  EndIf
                             Else CHAVEC=0
                                  Controla_EdicaoC()
                          EndIf
                  EndIf   
             Case EXCLUIR="S":
                  If PegaRegistroControle("Numero da OC",OC) ;FILTRO
                     Then PickForm "1"
                          Echo Normal
                          Echo Off
                          If Checa_Controle([Numero_Controle_Dia]) And Carrega_Parametros()
                             Then If QuerExcluir("desta ordem de compra")
                                     Then EXCLUSAO_C()
                                          AtualizaRegistroControle("Numero da OC",OC,MODOPAGINA)
                                     Else UnLockRecord
                                  EndIf
                             Else UnLockRecord
                          EndIf
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           
           FormKey
           Moveto TabelaControle
                                      
           If OPCAO_FORM="1"
              Then PickForm "1"
                   moveto record locregistro
                   
              Else PickForm "F"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         MODOPAGINA = False
         Switch
            Case TabelaControle=TabelaPrincipal:      
               If IsBlank([])
                  Then If IsBlank(OC)
                          Then OC="1"
                          Else OC=StrVal(NumVal(OC)+1)
                       EndIf
                       []=OC
               EndIf        
            OtherWise:
               If Not VerificaRegistroTemp("Lan‡amento n„o encontrado !") 
                  Then QuitLoop
               EndIf   
               OC=IncluiRegistroControle("Numero da OC")   
               []=OC
         EndSwitch 
    
         []=ALINH()
         OC=[]
         Del
         If OPCAO_FORM="F"
            Then PickForm "1"
         EndIf
         Locate OC
         If Retval
            Then CHAVEC=0
                 STATUSFILTRO = "UPDATE"
            Else CHAVEC=1
                 STATUSFILTRO = "INSERT"
                 End
                 If Not IsBlank([Numero da OC])
                    Then PgDn PgDn PgDn
                 EndIf
                 Moveto [Numero da OC]
                 [Numero da OC]=OC
         EndIf

         If Not IsLockRecord()
            Then Echo Normal
                 Echo Off
                 If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA))
                    Then Return
                 EndIf
                 If CHAVEC=0
                    Then If [Situacao da OC]<>"CANCELADA" And
                            [Situacao da OC]<>"ENTREGUE"
                            Then Return
                            Else If Checa_Controle([Numero_Controle_Dia])
                                    Then Return
                                 EndIf
                         EndIf
                 EndIf
         EndIf
         If CHAVEC=1
            Then Del
         EndIf
         
         If TabelaControle<>TabelaPrincipal
            Then FormKey
                 Moveto TabelaControle
         EndIf
         
         If OPCAO_FORM="F"
            Then PickForm "F"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DigitaC()
Moveto "OCC"

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

V_TRANSP=[Codigo da Transportadora]

If CHAVEC=1
   Then If INICIO_PAGINA
           Then Moveto [Codigo da Empresa]
           Else Moveto [Data de Emissao  ]
        EndIf
        [Data de Emissao]=Today()
   Else CARREGAMENTO_ANT = [Numero_Carregamento_Occ]
        PED_ANT          = [Numero do Pedido       ] 
        Moveto [Data de Emissao]
EndIf

INICIO_PAGINA=False
FACA_CHAVEI=True

While True

  TECLA= " Esc=Retornar  "
  If CHAVEC=0
     Then TECLA=TECLA+"Del=Excluir  "
     Else TECLA=TECLA+"             "
  EndIf
  TECLA=TECLA+"Alt+F=Fun‡”es                        PgDn"
  
  MSGCAMPO=Field()
  Switch
    Case Field()="Situacao da OC"      : MSGCAMPO="Aberto, Suspenso, Cancelado, Entregue"
    Case Field()="Codigo"              : MSGCAMPO="C¢digo do Emitente"
    Case Field()="Frete por Conta"     : MSGCAMPO="Frete por Conta, Consulte [F1]"
    Case Field()="Tipo Pessoa"         : MSGCAMPO="Tipo de Pessoa = Fisica, Juridica"
    Case Field()="CGC"                 : MSGCAMPO="CGC/CPF"
    Case Field()="ICMS sobre Total NF" : MSGCAMPO="Calculo do ICMS sobre quais Valores, Consulte[F1]"
    OtherWise:
      pos_p=SearchFrom("Transp",Field(),1)
      If pos_p>0 And Field()<>"Codigo da Transportadora"
         Then MSGCAMPO=SubStr(Field(),1,pos_p-1)+"da Transportadora"
      EndIf
  EndSwitch

  If Field()="Codigo da Empresa"        Or
     Field()="Codigo"                   Or
     Field()="Codigo do Comprador"      Or
     Field()="Codigo da Transportadora" Or
     Field()="CFO"                      Or
     Field()="ICMS sobre Total NF"      Or
     Field()="Tipo da Operacao OC"
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf


  Prompt TECLA

  Wait Field
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","DOWN","UP", -33,-64,-66,
             "F6","F8","F4","F7"

  If RetVal=-33
     then     
          MSGCAMPO=""

          Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
            "F6  ~I~mprimir          " : " Imprimir OC                     " : "F6",
            "F7  Co~p~iar OC         " : " Copiar Ordem de Compra          " : "F7",
            "F8  ~O~bserva‡äes       " : " Observa‡äes                     " : "F8",
            Separator,
            "~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"                   Or
          Field()="Codigo do Comprador"      Or
          Field()="Codigo da Transportadora" Or
          Field()="Codigo do Requisitante"   Or
          Field()="Numero do Pedido"         Or
          Field()="Numero_Carregamento_Occ"  Or
          Field()="CFO"                      Or
          Field()="Tipo da Operacao OC"
          Then CONSULTAF1()
        EndIf
       If Field()="Frete por Conta"
          Then FreteporConta()
       EndIf   
       If Field()="ICMS sobre Total NF"
           Then vrold=[]
                ShowPopup " ICMS sobre ? " CENTERED
                 "~0~ Prod/Serv"                           : " Produtos/Servi‡os                                             " : "0",
                 "~1~ Prod/Serv+IPI+DespAces+Frete+Seguro" : " Produtos/Servi‡os + IPI + Despesas Acess¢rias + Frete + Seguro" : "1",
                 "~2~ Prod/Serv+DespAces+Frete+Seguro"     : " Produtos/Servi‡os + Despesas Acess¢rias + Frete + Seguro      " : "2",
                 Separator,
                 "~S~air"                                  : " Ignorar op‡äes                                                " : "CANCELAR"
                EndMenu
                 To MenuVar
                echo off

                If MenuVar="CANCELAR" or MenuVar="Esc"
                    Then []=vrold
                         Loop
                EndIf

                []=MenuVar

       EndIf
     
  Case Retval="F8" Or RetVal=-68 :
       Edita_Memo("Observacoes da OC",08,01,15,76,"Observa‡”es")
  Case Retval="F7":
       If Not Copiar()
          Then Loop
       EndIf
       CHAVEC=9
       QuitLoop
  Case RetVal="PGDN":
       If CHECA_DIGITAC()
          Then ALIQ_ICMS()
               QuitLoop
       EndIf
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEC=0
          Then If QuerExcluir("desta ordem de compra")
                  Then EXCLUSAO_C()
                       CHAVEC=9
                       QuitLoop
               EndIf
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Codigo da Empresa":
            If QuerDesfazer("")
               Then EXCLUSAO_C()
                    CHAVEC=9
                    QuitLoop
            Endif
       Case Field()="Data de Emissao"          :
            If CHAVEC=1
              Then Moveto [Codigo da Empresa]
              Else If QuerDesfazer("")
                     Then Undo
                          CHAVEC=9
                          QuitLoop
                   EndIf
            EndIf

       Case Field()="CFO"                      : Moveto [Tipo da Operacao OC]

       Case Field()="Numero_Carregamento_Occ"  : If CHAVEC=0 And PED_ANT<>""  
                                                    Then Moveto [ICMS sobre Total NF]
                                                    Else Moveto [Numero do Pedido]
                                                 EndIf   
       Case Field()="Codigo"                   : Switch
                                                   Case CHAVEC=0 And CARREGAMENTO_ANT<>""                 : Moveto [Numero do Pedido]
                                                   Case CHAVEC=0 And PED_ANT<>""                          : Moveto [Numero_Carregamento_Occ]
                                                   otherwise                                              : Moveto [ICMS sobre Total NF]
                                                 EndSwitch   
       Case Field()="Codigo do Comprador"      : Moveto [Codigo]
       Case Field()="Codigo do Requisitante"   : Moveto [Codigo do Comprador]   
       Case Field()="Codigo da Transportadora" : Moveto [Codigo do Requisitante]   
       Case Field()="Razao Social Transport"   : Moveto [Codigo da Transportadora]
       OtherWise:
            Left
       EndSwitch
  Case Retval="F6" Or Retval=-64 :
       If IMPRIME()
          Then CHAVEC=9
               QuitLoop
       EndIf
  Case Retval="ENTER":
       If IsBlank([])
          Then If Field()="Codigo da Empresa" Or
                  Field()="Codigo" Or
                  Field()="UF" Or
                  Field()="Codigo do Comprador" Or
                  Field()="CFO" Or
                  Field()="Codigo do Transportador" Or
                  Field()="Tipo da Operacao OC"
                  Then fastmsg("Valor inv lido !")
                       Loop
               EndIf
       EndIf
       Switch
       Case Field()="Codigo da Empresa":
            If Carrega_Parametros()
               Then [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                    [Situacao da OC          ]="ABERTO"
                    Moveto [Data de Emissao]
            EndIf
       Case Field()="Data de Emissao":
            If IsBlank([])
               Then []=Today()
            EndIf

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

            Moveto [Data de Entrega]
       Case Field()="Data de Entrega":
            If IsBlank([])
               Then []=[Data de Emissao]
            EndIf
            If [Data de Entrega]<[Data de Emissao]
               Then Mensagem("Data Entrega Invalida !")
                    Loop
            EndIf
            Moveto [Situacao da OC]
       Case Field()="Situacao da OC":
            If IsBlank([])
               Then []="ABERTO"
            EndIf
            moveto [Tipo da Operacao OC]

       Case Field()="Tipo da Operacao OC":
            If IsBlank([])
               Then loop
            EndIf
            Moveto [CFO   ]

       Case Field()="CFO":
            If NumVAl(SubStr([CFO],1,1))>4
               Then fastmsg("Valor inv lido !") 
                    Loop
               Else Moveto [ICMS sobre Total NF]
            EndIf
       Case Field()="ICMS sobre Total NF":
            If IsBlank([])
               Then []="0"
            EndIf
            
            If CHAVEC=0 And [Numero do Pedido]<>""
               Then ITENS_LANCADOS=False
                    If CHAVEC=0
                       Then Moveto "OcI"
                            Moveto [Item da OC]
                            If RecordStatus("New")=False
                               Then ITENS_LANCADOS=True
                            EndIf
                            Moveto "Occ"
                            Switch
                              Case ITENS_LANCADOS And CARREGAMENTO_ANT<>"" : Moveto [Numero do Pedido]
                              Case ITENS_LANCADOS And PED_ANT<>""          : Moveto [Numero_Carregamento_Occ]
                              OtherWise                                    : Moveto [Codigo do Comprador]
                            EndSwitch  
                    EndIf        
               Else Moveto [Numero do Pedido]
            EndIF   
            
       Case Field()="Numero do Pedido":
            If Not IsBlank([])
               Then ;----- Verifica Pedido em outra Ordem de Compra ------------ 
                    ACHOU_OC = ""
                    NPED = [Numero do Pedido]
                    GetRecord "\\Sistemas\\Vendas\\PedidoC" NPED To REG_PEDIDO
                    If RetVal
                       Then If [Numero_Carregamento_Occ]=""
                               Then [Numero_Carregamento_Occ] = REG_PEDIDO["Numero_Carregamento"]
                            EndIf   
                    EndIf
                    Moveto "Occ"
                    UnLockRecord
                    FormKey
                    Moveto [Numero do Pedido]
                    Locate NPED
                    If RetVal
                       Then While True
                              If OC<>[Numero da OC]
                                 Then ACHOU_OC=[Numero da OC]
                                      QuitLoop
                              EndIf
                              Skip
                              If Eot() Then QuitLoop EndIf
                              Locate Next NPED
                              If Not RetVal
                                 Then QuitLoop
                              EndIf   
                            EndWhile
                    EndIf                                       
                    Moveto "Occ"
                    Moveto [Numero da OC]
                    Locate OC
                    FormKey
                    IsLockRecord()
                    Moveto [Numero do Pedido]
                    If ACHOU_OC<>""
                       Then Mensagem("Pedido "+[Numero do Pedido]+" foi localizado na Ordem de Compra "+ACHOU_OC+"!")
                            [Numero do Pedido] = ""
                            If [Numero_Carregamento_Occ] = REG_PEDIDO["Numero_Carregamento"]
                               Then [Numero_Carregamento_Occ] = ""
                            EndIf   
                       Else Moveto [Numero_Carregamento_Occ]     
                    EndIf
               Else Moveto [Numero_Carregamento_Occ]         
            EndIf
       Case Field()="Numero_Carregamento_Occ" :
            If Not IsBlank([])
               Then ACHOU_OC = ""
                    NCARREGAMENTO = [Numero_Carregamento_Occ]
                    Moveto "Occ"
                    UnLockRecord
                    FormKey
                    Moveto [Numero_Carregamento_Occ]
                    Locate NCARREGAMENTO
                    If RetVal
                       Then While True
                              If OC<>[Numero da OC]
                                 Then ACHOU_OC=[Numero da OC]
                                      QuitLoop
                              EndIf
                              Skip
                              If Eot() Then QuitLoop EndIf
                              Locate Next NCARREGAMENTO
                              If Not RetVal
                                 Then QuitLoop
                              EndIf   
                            EndWhile
                    EndIf                                       
                    Moveto "Occ"
                    Moveto [Numero da OC]
                    Locate OC
                    FormKey
                    IsLockRecord()
                    Moveto [Numero_Carregamento_Occ]
                    If ACHOU_OC<>""
                       Then MSG =       "Carregamento "+[Numero_Carregamento_Occ]+" foi localizado na Ordem de Compra "+ACHOU_OC+"!//"
                            MSG = MSG + "Deseja realmente informar este carregamento?"
                            If Not Confgeral(MSG)
                               Then [Numero_Carregamento_Occ] = ""
                               Else Moveto [Codigo]
                            EndIf   
                       Else Moveto [Codigo]     
                    EndIf
               Else Moveto [Codigo]         
            EndIf            
            
            
       Case Field()="Codigo":
            If CHAVEC=1 And [Codigo]<>""
               Then If Cliente_Inativo([Codigo])
                       Then Loop
                    EndIf   
            EndIf
            If IsBlank([Codigo da Transportadora])
               Then [Codigo da Transportadora]=PARAM_TRANSPORTADORA
            EndIf
            Moveto [Codigo do Comprador]

       Case Field()="Codigo do Comprador":
            Moveto [Codigo do Requisitante]

       Case Field()="Codigo do Requisitante":
            Moveto [Codigo da Transportadora]

       Case Field()="Codigo da Transportadora":
            If CHAVEC=1
               Then If Transportador_Inativo([Codigo da Transportadora])
                       Then Loop
                    EndIf   
            EndIf
            If V_TRANSP<>[] And [Nome Fantasia Transport]="O PROPRIO"
               Then [Razao Social Transport ]=[Razao Social  ]
                    [Telefone Transport     ]=[Telefone      ]
                    Moveto [Placa do Veiculo]
               Else If V_TRANSP<>[] And [Nome Fantasia Transport]="DIVERSOS"
                       Then Moveto [Razao Social Transport]
                       Else Moveto [Placa do Veiculo]
                   EndIf
            EndIf
            V_TRANSP=[Codigo da Transportadora]
       Case Field()="Frete por Conta":
            If IsFieldNull([]) 
               Then fastmsg("Valor inv lido !")
                    Loop 
            EndIf
            If CHECA_DIGITAC()
               Then ALIQ_ICMS()
                    QuitLoop
            EndIf
       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para Checagem DigitaC                                                *
;*******************************************************************************
Proc CHECA_DIGITAC()
Private Checa_Validade
Checa_Validade=False
Switch
  Case IsBlank([Codigo da Empresa]): Mensagem("Empresa Invalida !")
  Case IsBlank([Data de Emissao])  : Mensagem("Data de Emissao Invalida !")
  Case IsBlank([Data de Entrega])  : Mensagem("Data de Entrega Invalida !")
  Case IsBlank([Situacao da OC])   : Mensagem("Situa‡„o Invalida !")
  Case IsBlank([Codigo])           : Mensagem("Emitente Invalido !")
  Case IsBlank([CGC])              : Mensagem("CGC/CPF Invalido !")
  Case IsBlank([UF])                      : Mensagem("Estado Invalido !")
  Case IsBlank([Codigo do Comprador])     : Mensagem("Comprador Invalido !")
  Case IsBlank([CFO])                     : Mensagem("CFOP Invalido !")
  Case IsBlank([Codigo da Transportadora]): Mensagem("Transportador Invalido !")
  Case IsBlank([Frete por Conta])         : Mensagem("Frete por Conta Invalido !")
  Case IsBlank([Tipo da OPeracao OC])     : Mensagem("Tipo Opera‡Æo Invalida !")
  OtherWise:
     Checa_Validade=True
     If Not Checa_CGC_CPF_Formatado([CGC])
        Then Checa_Validade=False
     EndIf
     
     CODIGO=[Codigo]
     
     ;*** Checagem da Unidade Federativa c/ CFO ***
     Moveto [Codigo da Empresa]
     Ativa_Lookup()
     Moveto [Codigo da Empresa]
     Locate [OCC->Codigo da Empresa]
     If RetVal
        Then Switch
               Case (SubStr([OCC->CFO],1,1)="1" And [OCC->UF]<>[UF Empresa]):
                    Mensagem("O estado \""+[OCC->UF]+"\" de origem usado p/ o CFOP \""+[OCC->CFO]+"\"// ‚ diferente da sua Empresa \""+[UF Empresa]+"\" ! ")
                    Checa_Validade=False
               Case (SubStr([OCC->CFO],1,1)="2" And [OCC->UF]=[UF Empresa]):
                    Mensagem("O estado \""+[OCC->UF]+"\" de origem usado p/ o CFOP \""+[OCC->CFO]+"\"// ‚ igual a sua Empresa \""+[UF Empresa]+"\" ! ")
                    Checa_Validade=False
             EndSwitch
     EndIf
     KeyPress "ESC"
     
EndSwitch

Return Checa_Validade
EndProc  ; (Checa_DigitaC)

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Aliq_Icms()
UFO=[OCC->UF]

Moveto [UF]
Ativa_Lookup()
Moveto [UF]
Locate [OCC->UF]
If RetVal
   Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
   Else UF_ALIQUOTA_ICMS=BlankNum()
EndIf
KeyPress "ESC"

AICMSUFO          =UF_ALIQUOTA_ICMS
[Aliquota de ICMS]=UF_ALIQUOTA_ICMS
EndProc  ;  (Aliq_ICMS)

;*******************************************************************************
;* Somatoria de valores dos itens para variaveis do FORM Fatura                *
;*******************************************************************************
Proc SomatoriaDosItens()

VSVRMERC = 0
VSQTDE   = 0
VCITENS  = 0

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

endproc 

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc ChaveI()
Moveto "OCI"
FACA_DIGITAF=True
CONSFORN = False
While True

  SomatoriaDosItens()

  Moveto [Item da OC]
  End
  NITEM = [Item da OC]
  Down
  Moveto [Item da OC]

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

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

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

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F3  ~V~er Ficha                        " : " Ver itens modo ficha                " : "F3",
              "F5  C~o~nsulta                         " : " Consultar tabela pre‡o              " : "F5",
              "F6  Itens ~F~ornecedor                 " : " Consultar/Editar Itens do Fornecedor" : "F6",
              "F8  ~P~edido de Vendas                 " : " Carregar itens do Pedido de Venda   " : "F8",
              Separator,
              "~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 da OC]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Item da OC]
         Inicia_Registro()
         DigitaI()
         QuitLoop
    Case RetVal="F6" Or Retval=-64:
         VSDGEMPRESA=[Occ->Codigo da Empresa]
         CODIGO     =[Occ->Codigo]
         CHAVEI     =1
         Del
         Moveto "Occ"
         UnLockRecord
         KeyPress "F7"
         IsLockRecord()
         OP_INSERT_ITEM=True
         
         Do_It!
         Play "SW_CONS2"
         
         CONSFORN = True
         Moveto "Occ"
         Moveto [Numero da OC]
         Locate OC
         KeyPress "F7"
         
         CoeditKey
         IsLockRecord()
         Moveto "Oci"
         AcceptDialog

         ;If Sw_Item_Pesquisado="" Then QuitLoop EndIf
         
         Return
    Case RetVal="F5" Or RetVal=-63 : 
         VSDGEMPRESA=[Occ->Codigo da Empresa]
         CODIGO     =[Occ->Codigo]
         
         Del
         Moveto "Occ"
         UnLockRecord
         KeyPress "F7"
         IsLockRecord()
         OP_INSERT_ITEM=True
         
         Play "SW_CONS"

         Moveto "Occ"
         Moveto [Numero da OC]
         Locate OC
         KeyPress "F7"
         
         IsLockRecord()
         Moveto "Oci"

         If Sw_Item_Pesquisado="" Then QuitLoop EndIf

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

         SEQIT=[Item da OC]
         CHAVEI=1
         [Numero da OC    ]=OC
         [Item da OC      ]=SEQIT
         [Codigo do Item  ]=Sw_Item_Pesquisado
         Item_Ins_Consulta=True

         Return
    Case RetVal="PGDN":
         Del
         Moveto [Item da OC]
         If RecordStatus("New")=True
            Then MENSAGEM("A Ordem de Compra 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
  				 PAGINA("OCI","MR")
					 SEQIT=[Item da OC]
					 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
					 
           SomatoriaDosItens()	
					 
           SetaPosForm()
				 EndWhile
				 QuitLoop
				 
    Case Retval="F8" Or RetVal = -68:
         Del
                                        
         Play("Ft_PEDI")
         QuitLoop
				 
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate OC,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down
                 [Numero da OC]=OC
                 [Item da OC  ]=SEQIT
                 UnLockRecord
                 Locate OC,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

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

  Case Origem="XXXX":

  OtherWise:
       Moveto [Codigo do Item]
       Ativa_Lookup()
       ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item,"")
      
EndSwitch
If RetVal
  Then 
       CopyToArray regItens           
       KeyPress "ESC"

       While True
         VSD_I_Codigo_Item=regItens["Codigo do Item"]

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

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

Echo Off
Return Item_ok
EndProc

;*******************************************************************************
;* Rotina Ajustar Dados do Item                                                *
;*******************************************************************************
Proc Ajusta_Dados_Item()
private regcotacao, regItens 
                    
Moveto "OCI"
[Codigo do Item]=VSD_I_Codigo_Item

GetRecord "\\Sistemas\\Estoque\\Itens"    VSD_I_Codigo_Item To regitens            
If RetVal
   Then 
        [MVA           ]=regItens["MVA_1"            ]
        [Unidade Fiscal]=regItens["Unidade Entrada"  ]
EndIf

getrecord "\\sistemas\\estoque\\cotacao" VSD_I_Codigo_Item, [OCC->Codigo] to regcotacao 
If RetVal
   Then 
        [Unidade Fiscal          ]=regcotacao["Unidade Entrada"         ]
        [Fator de Conversao      ]=regcotacao["Fator de Conversao"      ]
        
        Switch
          Case PARAM_ORIGEM_PRECO="C" : [Preco Unitario]=regcotacao["Vr_Unit_Ult_Cotacao"     ] 

          Case PARAM_ORIGEM_PRECO="D" :
                                        if regcotacao["Data de Compra"]>=regcotacao["Data_Ult_Cotacao"]
                                           then [Preco Unitario]=regcotacao["Valor Unitario"          ] 
                                           else [Preco Unitario]=regcotacao["Vr_Unit_Ult_Cotacao"     ] 
                                        endif

          otherwise                   : [Preco Unitario]=regcotacao["Valor Unitario"]

        EndSwitch                                

        [Tipo Tributacao         ]=regcotacao["Tipo Tributacao"         ]
        [Tributacao de ICMS      ]=regcotacao["Tributacao de ICMS"      ]
        [Aliquota Reduzida BCICMS]=regcotacao["Aliquota Reduzida BCICMS"]
        [Aliquota de ICMS        ]=regcotacao["Aliquota de ICMS"        ]

        [MVA                     ]=regcotacao["MVA"                     ]
        [ICMS UF_ORIGEM          ]=regcotacao["ICMS UF_ORIGEM"          ]

        [IPI_CST                 ]=regcotacao["IPI_CST"                 ]
        [Tributacao de IPI       ]=regcotacao["Tributacao de IPI"       ]
        [Aliquota Reduzida BCIPI ]=regcotacao["Aliquota Reduzida BCIPI" ]
        [Aliquota de IPI         ]=regcotacao["Aliquota de IPI"         ]
        
   else
        switch
          case [IPI_CST ]="50" : [IPI_CST ]="00"
          case [IPI_CST ]="51" : [IPI_CST ]="01"
          case [IPI_CST ]="52" : [IPI_CST ]="02"
          case [IPI_CST ]="53" : [IPI_CST ]="03"
          case [IPI_CST ]="54" : [IPI_CST ]="04"
          case [IPI_CST ]="55" : [IPI_CST ]="05"
        endswitch
EndIf

If [Tributacao de ICMS]="D" Or SubStr([Tipo Tributacao],2,2)="10"
   Then [Aliquota de ICMS]=UF_ALIQUOTA_ICMS
EndIf
                                                                                                
;* Seta Variaveis PegaCFOP
Checa_CFOP   ="E"
CFO_C        =[OCC->CFO          ]
CFOP_TPITEM  =[Tipo do Item      ]
CFOP_TRIBICMS=[Tributacao de ICMS]
Play "\\Sistemas\\Exporta\\PegaCFOP"
[CFO        ]=CFO_C

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

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

Registro_Item("Ler")

endproc

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

TECLA="Esc=Retornar  F7=Altera Localiza‡„o  "
MSG_CAMPO=""
Temp=True

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

If INICIO_DIALOG
   Then If CHAVEI=0
           Then 
                if isblank(VSD_I_Codigo_Item)
                   then Campo="I_Codigo_Item"
                   else Campo="I_Quantidade"
                endif   
           Else Campo="I_Codigo_Item"
        EndIf
        INICIO_DIALOG=False
EndIf
If Opcao_Ver=True Then Campo="I_Seq" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   If Evento["KeyCode"] = -33
      Then Echo Normal
           Echo Off
           ShowPopup " Fun‡”es " CENTERED      
           "[F5] A~l~tera Pre‡o           ": " Altera Pre‡o                       " :"F5",
           Separator,
           "~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
                      If CHAVEI=0
                        Then Moveto [Codigo do Item]
                             Ativa_Lookup()
                             Locate [oci->Codigo do Item]
                             VSD_I_Peso_Liquido = [Peso Liquido]
                             VSD_I_Referencia   = [Referencia  ]
                             KeyPress "ESC"
                     EndIf
                 Case Evento["KeyCode"] = -81: 
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else Down
                      EndIf
                      If CHAVEI=0
                        Then Moveto [Codigo do Item]
                             Ativa_Lookup()
                             Locate [oci->Codigo do Item]
                             VSD_I_Peso_Liquido = [Peso Liquido]
                             VSD_I_Referencia   = [Referencia  ]
                             KeyPress "ESC"
                     EndIf
               EndSwitch
               If Mover_Reg=True
                  Then SEQIT=[Item da OC]
                       Inicia_Registro()
               EndIf
           EndSwitch
       Case Evento["KeyCode"] = 9 Or
            Evento["KeyCode"] = -15:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEI=0
               Then If QuerExcluir("")
                       Then CHAVEI=8
                            CancelDialog
                    EndIf
            EndIf
     Case (Evento["KeyCode"] = -63 Or Evento["KeyCode"] = "F5")And Not F5_ATIVADO:
          If (PARAM_ALTERA_PRECO="P" And Checa_Supervisor()) Or PARAM_ALTERA_PRECO="S" 
             Then F5_ATIVADO=True
                  Campo_Ant=Campo 
                  Campo="I_Preco_Unitario"
          EndIf            
     Case Evento["KeyCode"] = 3 and Campo="I_Quantidade" and sys_Codigo_Cliente="0377"and VSD_I_UN_Item="KG" : 
          Play "\\Sistemas\\Vendas\\CalcPCKG"
          Campo="I_Quantidade"            
       Case Evento["KeyCode"] = -59:   
            If Campo="I_Codigo_Item"       Or
               Campo="I_UN_Item"           Or
               Campo="I_Tipo_Item"         Or
               Campo="I_Codigo_Cor_Tecido" Or
               Campo="I_CCusto"            Or
               Campo="I_CFOP"              Or
               Campo="I_CST_Item"          Or
               Campo="I_CST_IPI"           
               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_UN_Item"           Then Moveto [Unidade Fiscal]       EndIf
                    If Campo="I_Tipo_Item"         Then Moveto [Tipo do Item]         EndIf
                    If Campo="I_Codigo_Cor_Tecido" Then Moveto [Codigo da Cor_Tecido] EndIf
                    If Campo="I_CCusto"            Then Moveto [Codigo CCusto]        EndIf
                    If Campo="I_CFOP"              Then Moveto [CFO                 ] EndIf

                    Switch
                      Case Campo="I_CST_Item":          
                        CSTNew=VSD_I_CST_Item 
                        VSD_I_CST_Item=Checa_CST("ICMS","E","")
                        If IsBlank(VSD_I_CST_Item)
                           Then VSD_I_CST_Item=CSTNew
                           Else [Tipo Tributacao]=VSD_I_CST_Item
                        EndIf
                        Release Vars CSTNew
                      Case Campo="I_CST_IPI":          
                        CSTNew=VSD_I_CST_IPI 
                        VSD_I_CST_IPI=Checa_CST("IPI","E","")
                        If IsBlank(VSD_I_CST_IPI)
                           Then VSD_I_CST_IPI=CSTNew
                           Else [IPI_CST]=VSD_I_CST_IPI
                        EndIf
                        Release Vars CSTNew
                      OtherWise: ConsultaF1()
                    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_Unidade_Interna=[Unidade Interna   ]
                            VSD_I_Tipo_Item      =[Tipo do Item      ]
                            VSD_I_Fator_Conversao=[Fator de Conversao]

                            If Campo="I_Codigo_Item" And SYS_CODIGO_CLIENTE="0319"
                               Then [Fator de Conversao]=1
                            EndIf
                    EndIf
                    If Campo="I_UN_Item"
                       Then VSD_I_UN_Item     =[Unidade Fiscal]
                            Campo="I_UN_Item"
                    EndIf
                    If Campo="I_Tipo_Item"
                       Then VSD_I_Tipo_Item     =[Tipo do Item     ]
                            Campo="I_Tipo_Item"
                    EndIf
                    If Campo="I_Codigo_Cor_Tecido"
                       Then VSD_I_Codigo_Cor_Tecido   =[Codigo da Cor_Tecido   ]
                            VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                            Campo="I_Codigo_Cor_Tecido"
                   EndIf
                   If Campo="I_CCusto"
                       Then VSD_I_CCusto          =[Codigo CCusto   ]
                            VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                            Campo="I_CCusto"
                   EndIf
                   If Campo="I_CFOP"
                      Then VSD_I_CFOP            =[CFO             ]
                           Campo="I_CFOP"
                   EndIf

                   Moveto "OCI"
                   RefreshDialog
           EndIf
           Temp=False
           
      Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
           ModoLocalizarItem("SELECAO","","COMPRA")
           
      Case (Evento["KeyCode"] = -66 Or Evento["KeyCode"] = "F8"):    
          Edita_Memo("Informacoes_Adicionais",15,01,06,78,"Informa‡”es Adicionais do Item")
          VSD_I_InfAdic=[Informacoes_Adicionais]
     
      Case Evento["KeyCode"] = -81 : ; PGDN
      If Campo="I_Taxa_Desconto_Unitario"  Or 
         Campo="I_Valor_Desconto_Unitario" Or
         Campo="I_Fator_Conversao"         Or
         Campo="I_CCusto"
         Then AcceptDialog
              Temp=False
      EndIf     
          
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="I_Codigo_Item":
                  If QuerDesfazer("")
                     Then if CHAVEI=1
                             then CHAVEI = 9
                                  Del
                          endif        
                          CancelDialog
                  Endif
             Case Campo="I_Descricao_Item":
                  If CHAVEI=1
                     Then Campo="I_Codigo_Item"
                     Else If QuerDesfazer("")
                             Then CHAVEI=9
                                  CopyFromArray RegItem
                                  CancelDialog
                          Endif
                  EndIf
             Case Campo="I_Tipo_Item":
                  Campo="I_Descricao_Item"
             Case Campo="I_Quantidade":
                  If CHAVEI=1
                     Then Campo="I_Codigo_Item"
                     Else If IsBlank(VSD_I_Codigo_Item)
                             Then Campo="I_Tipo_Item"
                             Else If QuerDesfazer("")
                                     Then CHAVEI=9
                                          CopyFromArray RegItem
                                          CancelDialog
                                  Endif
                          EndIf
                  EndIf
             Case Campo="I_UN_Item":
                  Campo="I_Quantidade"
             Case Campo="I_Preco_Unitario":
                  If F5_ATIVADO
                     Then Campo=Campo_Ant
                          F5_ATIVADO=False
                  EndIf
                  Campo="I_UN_Item"
             Case Campo="I_Taxa_Desconto_Unitario"  Or
                  Campo="I_Valor_Desconto_Unitario" 
                                              : Campo="I_Preco_Unitario"
                  
             Case Campo="I_Fator_Conversao"   : If PARAM_ALTERA_PRECO="S"
                                                   Then Campo="I_Preco_Unitario"
                                                   Else If F5_ATIVADO
                                                           Then Campo="I_Preco_Unitario"
                                                           Else Campo="I_UN_Item"
                                                        EndIf
                                                EndIf   
                          
             Case Campo="I_CCusto"            : Campo="I_Fator_Conversao"          
                        
             Case Campo="I_CST_Item"          : Campo="I_CCusto"

             Case Campo="I_RBC_ICMS"    Or
                 Campo="I_AICMS"       Or
                 Campo="I_Valor_ICMS"  Or       
                 Campo="I_CST_IPI"            : Campo="I_CST_Item"
                 
             Case Campo="I_AIPI"        Or
                 Campo="I_Valor_IPI"   Or      
                 Campo="I_CFOP"               : Campo="I_CST_IPI"
             
             Case Campo="I_MVA"               : Campo="I_CFOP"
             Case Campo="I_UFO"               : Campo="I_MVA"
             
             Case Campo="I_Flag"              : 
                  If VSD_I_TICMS="S"
                     Then Campo="I_UFO"
                     Else Campo="I_CFOP"
                  EndIf
           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 Campo="I_Descricao_Item"
                     Else If Pega_Dados_Item("")
                             Then         
                                  If EDITA_DESCRICAO_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           
                          Echo Off
                  EndIf                                      
             Case Campo="I_Descricao_Item":
                  VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                  Campo="I_Tipo_Item"
             Case Campo="I_Tipo_Item":
                  VSD_I_Tipo_Item=ControlValue("I_Tipo_Item")
                  If Not IsBlank(VSD_I_Tipo_Item)
                     Then Moveto [Tipo do Item]
                          Ativa_Lookup()
                          Moveto [Tipo do Item]
                          Locate VSD_I_Tipo_Item
                          If RetVal
                             Then VSD_I_Tipo_Item=[Tipo do Item]
                                  KeyPress "ESC"
                                  Moveto "OCI"
                                  [Tipo do Item]=VSD_I_Tipo_Item
                                  Campo="I_Quantidade"
                             Else Mensagem("Tipo do Item n„o Cadastrado !")
                                  VSD_I_Tipo_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_Quantidade":
                  VSD_I_Quantidade=ControlValue("I_Quantidade")
                  [Quantidade]=VSD_I_Quantidade

                  If IsBlank(VSD_I_Fator_Conversao) Or
                     VSD_I_Fator_Conversao=0
                     Then VSD_I_Fator_Conversao=1
                  EndIf

                  If VSD_I_Fator_Conversao<1
                     Then VSD_I_Quantidade_Convertida=Round(VSD_I_Quantidade*VSD_I_Fator_Conversao,0)
                     Else VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao
                  EndIf
                  
                  Switch
                    Case VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0 :
                         VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Case VSD_I_Preco_Unitario=0 Or VSD_I_Quantidade=0 :
                         VSD_I_Preco_Total=0
                    Case VSD_I_Preco_Unitario>0 :
                         VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                  EndSwitch
                  Campo="I_UN_Item"
             Case Campo="I_UN_Item":   
                  VSD_I_UN_Item=ControlValue("I_UN_Item")
                  If Not IsBlank(VSD_I_UN_Item)
                     Then Moveto [Unidade Fiscal]
                          Ativa_Lookup()
                          Moveto [Sigla da Unidade]
                          Locate VSD_I_UN_Item
                          If RetVal
                             Then VSD_I_UN_Item=[Sigla da Unidade]
                                  KeyPress "ESC"
                                  Moveto "OCI"
                                  [Unidade Fiscal]=VSD_I_UN_Item
                                  
                                  If PARAM_ALTERA_PRECO="S" Or F5_ATIVADO=True 
                                     Then Campo="I_Preco_Unitario"
                                     Else Campo="I_Fator_Conversao"
                                  EndIf
                                     
                             Else Mensagem("Unidade n„o Cadastrada !")
                                  VSD_I_UN_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_Preco_Unitario":
                  VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                  Switch
                    Case VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0 :
                         VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Case VSD_I_Preco_Unitario=0 Or VSD_I_Quantidade=0 :
                         VSD_I_Preco_Total=0
                    Case VSD_I_Preco_Unitario>0 :
                         VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario     
                  EndSwitch
                  If F5_ATIVADO=True
                     Then F5_ATIVADO=False
                  EndIf  
                  Campo="I_Taxa_Desconto_Unitario"
             Case Campo="I_Taxa_Desconto_Unitario":
                  VSD_I_Taxa_Desconto_Unitario=ControlValue("I_Taxa_Desconto_Unitario")
                  If VSD_I_Taxa_Desconto_Unitario>0
                     Then VSD_I_Valor_Desconto_Unitario=NDecimal((VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100,6)
                          Campo="I_Fator_Conversao"
                     Else Campo="I_Valor_Desconto_Unitario"
                  EndIf
                  Switch
                    Case VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0 :
                         VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Case VSD_I_Preco_Unitario=0 Or VSD_I_Quantidade=0 :
                         VSD_I_Preco_Total=0
                    Case VSD_I_Preco_Unitario>0 :
                         VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario     
                  EndSwitch
             Case Campo="I_Valor_Desconto_Unitario":
                  VSD_I_Valor_Desconto_Unitario=ControlValue("I_Valor_Desconto_Unitario")
                  Campo="I_Fator_Conversao"
                  Switch
                    Case VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0 :
                         VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Case VSD_I_Preco_Unitario=0 Or VSD_I_Quantidade=0 :
                         VSD_I_Preco_Total=0
                    Case VSD_I_Preco_Unitario>0 :
                         VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario     
                  EndSwitch
             Case Campo="I_Fator_Conversao":
                  VSD_I_Fator_Conversao=ControlValue("I_Fator_Conversao")
                  If IsBlank(VSD_I_Fator_Conversao) Or
                     VSD_I_Fator_Conversao=0
                     Then VSD_I_Fator_Conversao=1
                  EndIf

                  If VSD_I_Fator_Conversao<1
                     Then VSD_I_Quantidade_Convertida=Round(VSD_I_Quantidade*VSD_I_Fator_Conversao,0)
                     Else VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao
                  EndIf
                  Campo="I_CCusto"
             Case Campo="I_CCusto":
                  VSD_I_CCusto=ControlValue("I_CCusto")
                  If Not IsBlank(VSD_I_CCusto)
                     Then Moveto [Codigo CCusto]
                          Ativa_Lookup()
                          Moveto [Codigo CCusto]
                          Locate VSD_I_CCusto
                          If RetVal
                             Then VSD_I_CCusto          =[Codigo CCusto]
                                  VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                                  KeyPress "ESC"
                                  [Codigo CCusto]       =VSD_I_CCusto
                                  Campo="I_CST_Item"
                             Else Mensagem("Centro de Custo n„o Cadastrado !")
                                  VSD_I_CCusto          =""
                                  VSD_I_Descricao_CCusto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_I_Descricao_CCusto=""
                          Campo="I_CST_Item"
                  EndIf      
             Case Campo="I_CST_Item":
                  VSD_I_CST_Item=ControlValue("I_CST_Item")
                  If Not IsBlank(VSD_I_CST_Item)
                     Then TribCST=Checa_CST("ICMS","S",VSD_I_CST_Item)
                          If TribCST<>""
                             Then CSTOk  =False
        												 TribCST=SubStr(VSD_I_CST_Item,2,2)
            										 If TribCST="00" Or 
                                    TribCST="10" Or
                                    TribCST="20" Or
                                    TribCST="30" Or
                                    TribCST="40" Or
                                    TribCST="41" Or
                                    TribCST="50" Or
                                    TribCST="51" Or
                                    TribCST="60" Or
                                    TribCST="70" Or
                                    TribCST="90"
                                    Then CSTOk=True
                                 EndIf
         												 If CSTOk
                                     Then Switch
                                           Case TribCST="00"    : VSD_I_TICMS="D"
                                           Case TribCST="10"    : VSD_I_TICMS="S"
                                           Case TribCST="20"    : VSD_I_TICMS="D"
                                           Case TribCST="30"    : VSD_I_TICMS="S"
                                           Case TribCST="40"    : VSD_I_TICMS="I"
                                           Case TribCST="41"    : VSD_I_TICMS="N"
                                           Case TribCST="50" Or 
                                                TribCST="51"    : VSD_I_TICMS="O"
                                           Case TribCST="60"    : VSD_I_TICMS="S"
                                           Case TribCST="70"    : VSD_I_TICMS="S"
                                           Case TribCST="90"    : VSD_I_TICMS="O"
                                           OtherWise            : VSD_I_TICMS="O"   
                                          EndSwitch
                                         
                                          Switch
                                           Case (TribCST="00" Or TribCST="10")                                :
                                                VSD_I_RBC_ICMS=BlankNum()
                                                Campo="I_AICMS"
                                           Case (TribCST="20" Or TribCST="60" Or TribCST="70" Or TribCST="90"):
                                                Campo="I_RBC_ICMS"
                                           Case (TribCST="30" Or TribCST="40" Or TribCST="41" Or                                                 
                                                 TribCST="50" Or TribCST="51")                                :                               
                                                VSD_I_RBC_ICMS=BlankNum()
                                                VSD_I_AICMS=BlankNum()
                                                VSD_I_Valor_ICMS=BlankNum()
                                                Campo="I_CST_IPI"
                												  EndSwitch
        		 										    Else Mensagem("CST inv lido para tipo de tributa‡„o de ICMS !")
        	 											 EndIF   
                             Else Mensagem("CST ICMS inv lido, use F1 para consultar !")   
                          EndIf
                  EndIf
             Case Campo="I_RBC_ICMS":
                  VSD_I_RBC_ICMS=ControlValue("I_RBC_ICMS")
                  If TribCST="70"
                     Then VSD_I_AICMS=BlankNum()
                          VSD_I_Valor_ICMS=BlankNum()
                          Campo="I_CST_IPI"
                     Else If VSD_I_RBC_ICMS>0 And
                             VSD_I_AICMS>0
                             Then VSD_I_Valor_ICMS=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_ICMS)/100))*VSD_I_AICMS)/100,2)
                             Else VSD_I_Valor_ICMS=Round((VSD_I_Preco_Total*VSD_I_AICMS)/100,2)
                          EndIf
                          Campo="I_AICMS"
                  EndIf
             Case Campo="I_AICMS":
                  VSD_I_AICMS=ControlValue("I_AICMS")
                  If VSD_I_RBC_ICMS>0 And
                     VSD_I_AICMS>0
                     Then VSD_I_Valor_ICMS=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_ICMS)/100))*VSD_I_AICMS)/100,2)
                     Else VSD_I_Valor_ICMS=Round((VSD_I_Preco_Total*VSD_I_AICMS)/100,2)
                  EndIf   
                  Campo="I_Valor_ICMS" 
             Case Campo="I_Valor_ICMS":
                  VSD_I_Valor_ICMS=ControlValue("I_Valor_ICMS")
                  Campo="I_CST_IPI"
             Case Campo="I_CST_IPI":
                  VSD_I_CST_IPI=ControlValue("I_CST_IPI")
                  If Not IsBlank(VSD_I_CST_IPI)
                     Then TribCST=Checa_CST("IPI","E",VSD_I_CST_IPI)
                          If TribCST<>""
                             Then CSTOk  =False
        	 											 TribCST=VSD_I_CST_IPI                                
             										 If TribCST="00" Or 
                                    TribCST="01" Or
                                    TribCST="02" Or
                                    TribCST="03" Or
                                    TribCST="04" Or
                                    TribCST="05" Or
                                    TribCST="49" Or
                                    TribCST="50" Or
                                    TribCST="51" Or
                                    TribCST="52" Or
                                    TribCST="53" Or
                                    TribCST="54" Or
                                    TribCST="55" Or
                                    TribCST="99" 
                                    Then CSTOk=True
                                  EndIf
                                  If CSTOk
          												   Then If Not IsBlank(VSD_I_CST_IPI)
                                             Then Switch
                                                    Case TribCST="00" Or 
                                                         TribCST="01"    : VSD_I_TIPI="D" 
                                                    Case TribCST="02"    : VSD_I_TIPI="I"
                                                    Case TribCST="03"    : VSD_I_TIPI="N"
                                                    Case TribCST="49"    : VSD_I_TIPI="O"  
                                                    Case TribCST="50" Or
                                                         TribCST="51"    : VSD_I_TIPI="D" 
                                                    Case TribCST="52"    : VSD_I_TIPI="I"
                                                    Case TribCST="53"    : VSD_I_TIPI="N"
                                                    Case TribCST="54" Or  
                                                         TribCST="55" Or 
                                                         TribCST="99"    : VSD_I_TIPI="O"
                                                    OtherWise            : VSD_I_TIPI="O"      
                        			 									 EndSwitch	 
                        			 					  EndIf			 
                                          If VSD_I_TIPI<>"D"
                                             Then If Not IsBlank(VSD_I_TIPI)
                                                     Then VSD_I_AIPI=BlankNum()
                                                          VSD_I_Valor_IPI=BlankNum()
                                                          Campo="I_CFOP"
                                                  EndIf
                                             Else Campo="I_AIPI"
                                         EndIf
         												    Else Mensagem("CST inv lido para tipo de tributa‡„o de IPI !")
         												 EndIF
                             Else Mensagem("CST IPI inv lido, use F1 para consultar !")   
                          EndIf
                  EndIf
             Case Campo="I_RBC_IPI":
                  VSD_I_RBC_IPI=ControlValue("I_RBC_IPI")
                  If VSD_I_RBC_IPI>0 And
                     VSD_I_AIPI>0
                     Then VSD_I_Valor_IPI=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_IPI)/100))*VSD_I_AIPI)/100,2)
                     Else VSD_I_Valor_IPI=Round((VSD_I_Preco_Total*VSD_I_AIPI)/100,2)
                  EndIf
                  Campo="I_AIPI"
             Case Campo="I_AIPI":
                  VSD_I_AIPI=ControlValue("I_AIPI")
                  If Not IsBlank(VSD_I_AIPI)
                     Then If VSD_I_RBC_IPI>0 And
                             VSD_I_AIPI>0
                             Then VSD_I_Valor_IPI=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_IPI)/100))*VSD_I_AIPI)/100,2)
                             Else VSD_I_Valor_IPI=Round((VSD_I_Preco_Total*VSD_I_AIPI)/100,2)
                          EndIf
                          Campo="I_Valor_IPI"
                  EndIf
             Case Campo="I_Valor_IPI":
                  VSD_I_Valor_IPI=ControlValue("I_Valor_IPI")
                  Campo="I_CFOP"
             Case Campo="I_CFOP":
                  VSD_I_CFOP=ControlValue("I_CFOP")
                  Moveto [CFO]
                  Ativa_Lookup()
                  Moveto [Codigo Fiscal de Operacao]
                  Locate VSD_I_CFOP
                  If RetVal
                     Then KeyPress "ESC"
                          If SubStr(VSD_I_CFOP,1,1)<>
                             SubStr([OCC->CFO],1,1)
                             Then Mensagem("CFOP "+VSD_I_CFOP+" difere da nota "+[OCC->CFO]+" !")
                             Else If VSD_I_TICMS="S"
                                     Then Campo="I_MVA"
                                     Else Campo="I_Flag"
                                  EndIf
                          EndIf
                     Else Mensagem("CFOP "+VSD_I_CFOP+" n„o Cadastrado !")
                          VSD_I_CFOP=""
                          KeyPress "ESC"
                  EndIf
                  Echo Off
             Case Campo="I_MVA":
                  VSD_I_MVA=ControlValue("I_MVA")
                  Campo="I_UFO"
             Case Campo="I_UFO":
                  VSD_I_AICMSUFO=ControlValue("I_UFO")
                  Campo="I_Flag"
             Case Campo="I_Flag":
                  AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA="Esc=Retornar  "
Switch
  Case Campo="I_Seq"                    : MSGCAMPO="Sequencia"
  Case Campo="I_Codigo_Item"            : MSGCAMPO=LOCALIZAR_POR +", [F1]Consultar tabela  [F7]Alterar modo localizar"
  Case Campo="I_Descricao_Item"         : MSGCAMPO="Descri‡„o do Item"
  Case Campo="I_Tipo_Item"              : MSGCAMPO="Tipo do Item, [F1]Consultar tabela"
  Case Campo="I_Quantidade"             : 
    switch
      case sys_Codigo_Cliente="0377" and
           VSD_I_UN_Item="KG"           : MSGCAMPO="Quantidade, Ctrl+C = Calcular Pe‡as->Kg"
      otherwise                         : MSGCAMPO="Quantidade"
    endswitch  
  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_CST_Item"               : MSGCAMPO="Codigo Situa‡„o Tributaria/ICMS"
  Case Campo="I_RBC_ICMS"               : MSGCAMPO="Aliquota Reduzida da Base de Calculo de ICMS"
  Case Campo="I_AICMS"                  : MSGCAMPO="Aliquota de ICMS"
  Case Campo="I_Valor_ICMS"             : MSGCAMPO="Valor do ICMS"
  Case Campo="I_CST_IPI"                : MSGCAMPO="Codigo Situa‡„o Tributaria/IPI"
  Case Campo="I_RBC_IPI"                : MSGCAMPO="Aliquota Reduzida da Base de Calculo de IPI"
  Case Campo="I_AIPI"                   : MSGCAMPO="Aliquota de IPI"
  Case Campo="I_Valor_IPI"              : MSGCAMPO="Valor do IPI"
  Case Campo="I_Fator_Conversao"        : MSGCAMPO="Fator de Convers„o"
  Case Campo="I_CFOP"                   : MSGCAMPO="CFOP p/ este Item"
  Case Campo="I_CCusto"                 : MSGCAMPO="Centro de Custo, [F1]Consultar tabela"
  Case Campo="I_MVA"                    : MSGCAMPO="Substitui‡Æo, % Margem de Valor Agregado para Base Calculo"
  Case Campo="I_UFO"                    : MSGCAMPO="Substitui‡Æo, %ICMS do estado remetente ou %ICMS p/ simples nacional"
  OtherWise:
       MSGCAMPO=""
EndSwitch

If CHAVEI=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf
If CHAVEI<>9 Then Registro_Item("Gravar") EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
   Else
        If Campo="I_Taxa_Desconto_Unitario"  Or 
           Campo="I_Valor_Desconto_Unitario" Or
           Campo="I_Fator_Conversao"         Or
           Campo="I_CCusto"
           then TECLA=TECLA+"PgDn=Finalizar  "
        endif  
EndIf

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

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Item da OC]
Locate [OCC->Numero da OC],SEQIT
CopyToArray RegItem

FTCONV  =[Fator de Conversao  ]
QUANT   =[Quantidade ]

VSD_I_Flag=""
Registro_Item("Ler")

EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
MSGCAMPO=""
F5_ATIVADO=False

ModoLocalizarItem("","","")
Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP","F7","F8",3,-33,-63,"F5"
     @ 05,2 height 15 width 74

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

   Label  @ 00,43 "Referˆncia" For "I_Referencia"
   Accept @ 01,44 Width 12 "A9" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia
   Label  @ 00,56 "Peso Liquido" For "I_Peso_Liquido"
   Accept @ 01,57 Width 13 "A10" picture "!*!" Tag "I_Peso_Liquido" to VSD_I_Peso_Liquido

   @ 02,03 ?? LOCALIZAR_POR

   Label  @ 02,01 ">" For "I_Codigo_Item"
   Accept @ 03,01 Width 13 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 02,15 "Descricao Item" For "I_Descricao_Item"
   Accept @ 03,15 Width 50 "A30" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 02,65 "TI" For "I_Tipo_Item"
   Accept @ 03,66 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   
   Label  @ 04,00 "[F8]Inf.Adic->" For "I_InfAdic"
   Accept @ 04,15 Width 50 "A100" picture "!*!" Tag "I_InfAdic" to VSD_I_InfAdic
     
   Label  @ 05,01 "Quantidade" For "I_Quantidade"
   Accept @ 06,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 05,15 "UN" For "I_UN_Item"
   Accept @ 06,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 05,21 "Pr.Unitario" For "I_Preco_Unitario"
   Accept @ 06,21 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 05,34 "%/" For "I_Taxa_Desconto_Unitario"
   Accept @ 06,34 Width 10 "N" picture "#*#.[####]" Tag "I_Taxa_Desconto_Unitario" to VSD_I_Taxa_Desconto_Unitario
   Label  @ 05,36 "Vr.Desconto" For "I_Valor_Desconto_Unitario"
   Accept @ 06,45 Width 12 "N" picture "#*#.[#####]" Tag "I_Valor_Desconto_Unitario" to VSD_I_Valor_Desconto_Unitario
   Label  @ 05,58 "Pr.Total" For "I_Preco_Total"
   Accept @ 06,58 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

   Label  @ 07,01 "Qtde Entregue" For "I_Quantidade_Entregue"
   Accept @ 08,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade_Entregue" to VSD_I_Quantidade_Entregue

   @ 09,01 ?? "Impostos CST   %Red.BC    Aliq    Valor"

   Label  @ 10,00 "    ICMS" For "I_CST_Item"
   Accept @ 10,10 Width 06 "A3" picture "!*!" Tag "I_CST_Item" to VSD_I_CST_Item   
   Accept @ 10,15 Width 11 "N" picture "#*#.[####]" Tag "I_RBC_ICMS" to VSD_I_RBC_ICMS
   Accept @ 10,26 Width 08 "N" picture "#*#.[##]" Tag "I_AICMS" to VSD_I_AICMS
   Accept @ 10,34 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_ICMS" to VSD_I_Valor_ICMS

   Label  @ 11,00 "     IPI" For "I_CST_IPI"
   Accept @ 11,10 Width 06 "A2" picture "!*!" Tag "I_CST_IPI" to VSD_I_CST_IPI  
   Accept @ 11,15 Width 11 "A2" picture "#*#.[####]" Tag "I_RBC_IPI" to VSD_I_RBC_IPI
   Accept @ 11,26 Width 08 "N" picture "#*#.[##]" Tag "I_AIPI" to VSD_I_AIPI
   Accept @ 11,34 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_IPI" to VSD_I_Valor_IPI

   Label  @ 09,46 "CFOP" For "I_CFOP"
   Accept @ 10,46 Width 08 "A4" picture "####" Tag "I_CFOP" to VSD_I_CFOP
   Label  @ 09,54 "%MVA" For "I_MVA"
   Accept @ 10,54 Width 09 "N" picture "#*#.[###]" Tag "I_MVA" to VSD_I_MVA
   Label  @ 09,63 "%"+UFO For "I_UFO"
   Accept @ 10,63 Width 05 "N" picture "#*#" Tag "I_UFO" to VSD_I_AICMSUFO
   
   Label  @ 07,15 "Fator Conversao" For "I_Fator_Conversao"
   Accept @ 08,15 Width 11 "N" picture "#*#.[#####]" Tag "I_Fator_Conversao" to VSD_I_Fator_Conversao
   @ 08,26 ?? "-> "+LTrim(Format("W10.2,EIC",VSD_I_Quantidade_Convertida)+" "+VSD_I_Unidade_Interna)

   Label  @ 07,39 "Centro Custo" For "I_CCusto"
   Accept @ 08,39 Width 10 "A7" picture "###.###" Tag "I_CCusto" to VSD_I_CCusto
   Accept @ 08,47 Width 23 "A25" picture "!*!" Tag "I_Descricao_CCusto" to VSD_I_Descricao_CCusto

   Accept @ 10,69 Width 1 "A1" picture "!" Tag "I_Flag" to VSD_I_Flag

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

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

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro, REG_ITEMCOMP, regitens
Switch
  Case Funcao_Registro="Gravar":
       [Codigo da Empresa         ]=[OCC->Codigo da Empresa]
       [Codigo do Item            ]=VSD_I_Codigo_Item
       [Descricao do Item         ]=VSD_I_Descricao_Item
       [Tipo do Item              ]=VSD_I_Tipo_Item

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

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

       [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
       [Valor do IPI              ]=VSD_I_Valor_IPI

       [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
       [Valor do ICMS             ]=VSD_I_Valor_ICMS

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

       [Fator de Conversao        ]=VSD_I_Fator_Conversao
       [MVA                       ]=VSD_I_MVA                
       [ICMS UF_ORIGEM            ]=VSD_I_AICMSUFO
       [CFO                       ]=VSD_I_CFOP 
       [Informacoes_Adicionais    ]=VSD_I_InfAdic
                      
       UnLockRecord
       
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Item da OC                ]

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

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

       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_Quantidade_Entregue    =[Quantidade Entregue       ]
       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_CST_IPI                =[IPI_CST                   ]
       VSD_I_TIPI                   =[Tributacao de IPI         ]
       VSD_I_RBC_IPI                =[Aliquota Reduzida BCIPI   ]
       VSD_I_AIPI                   =[Aliquota de IPI           ]
       VSD_I_Valor_IPI              =[Valor do IPI              ]

       VSD_I_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_Valor_ICMS             =[Valor do ICMS             ]

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

       VSD_I_Fator_Conversao        =[Fator de Conversao        ]

       VSD_I_Unidade_Interna        =[Unidade Interna           ]

       If VSD_I_Fator_Conversao<1
          Then VSD_I_Quantidade_Convertida  =Round(VSD_I_Quantidade*VSD_I_Fator_Conversao,0)
          Else VSD_I_Quantidade_Convertida  =VSD_I_Quantidade*VSD_I_Fator_Conversao
       EndIf
       VSD_I_MVA                    =[MVA                       ]
       VSD_I_AICMSUFO               =[ICMS UF_ORIGEM            ]
       VSD_I_CFOP                   =[CFO                       ]
       VSD_I_InfAdic                =[Informacoes_Adicionais    ]
       EDITA_DESCRICAO_ITEM         ="N"
       
       If SYS_CODIGO_CLIENTE="0232"
          Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOMP        
               If RetVal
                  Then EDITA_DESCRICAO_ITEM=REG_ITEMCOMP["Edita Descricao do Item"]
               EndIf
       EndIf       

       GetRecord "\\Sistemas\\Estoque\\Itens"    VSD_I_Codigo_Item To regitens            
       If RetVal
          Then VSD_I_Referencia   = regItens["Referencia"]
               VSD_I_Peso_Liquido = regItens["Peso Liquido"]
          Else VSD_I_Referencia   = ""
               VSD_I_Peso_Liquido = BlankNum()
       EndIf

EndSwitch
EndProc  ; (Registro_Item)

;*******************************************************************************
;*** Calcula Impostos
;*******************************************************************************
Proc Calc_Imposto()

For I From 1 To 10
    AICMS[I] =BlankNum()
    AIPI[I]  =BlankNum()

    BCICMS[I] =BlankNum()
    BCIPI[I]  =BlankNum()

    VIICMS[I] =BlankNum()
    VIIPI[I]  =BlankNum()

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

VRMERC=0
Moveto "OCI"
Scan

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

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

  If [Tipo do Item]<>"C"
     Then VRMERC=VRMERC+[Preco Total]
  EndIf
EndScan
Moveto "OCC"
CALC_OC()

EndProc ;(Calc_Imposto)

;*******************************************************************************
;* Rotina para Digitacao do OC                                             *
;*******************************************************************************
Proc DigitaF()
CHAVEF=0
Calc_Imposto()

If PARAM_SUBSTICMS="S"
   Then Moveto [Valor Substituicao ICMS]
   Else Moveto [Valor Despesas Acessorias]
EndIf
While True

  MSGCAMPO=Field()
  If Field()="Tipo de Pagamento"         Then MSGCAMPO="Tipo de Pagamento=> V=A Vista  P=A Prazo  O=Outros" EndIf

  If Field()="Condicao de Pagamento" or
     Field()="Forma de Pagamento"
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf

  TECLA="Esc=Retornar  F4=Calc_Venctos  F8=Venctos  F6=Imprimir      PgUp PgDn=Finalizar "

  Prompt TECLA

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

  Switch
    Case RetVal="F1":
         If Field()="Condicao de Pagamento" Or
            Field()="Forma de Pagamento"
            Then CONSULTAF1()
         EndIf
    Case Retval="F6":
         If IsBlank([Condicao de Pagamento])  Then Mensagem("Cond.Pagto Invalido !")   Loop EndIf
         If IsBlank([Tipo de Pagamento])      Then Mensagem("Tipo Pagto Invalido !")   Loop EndIf
         If IsBlank([Forma de Pagamento])     Then Mensagem("Forma Pagto Invalido !")  Loop EndIf
         If IMPRIME()
            Then FACA_DIGITAC=False
                 FACA_CHAVEI=False
                 CHAVEF=9
                 QuitLoop
         EndIf
    Case RetVal="F4":
         NCampo=Field()
         podecalcok=True
         If PARAM_ATUA_CAPG="S"
            Then Moveto "OCV"
                 Moveto [Sequencia do Lancamento]
                 SOMAIT=ImageCSum()
                 Moveto "OCC"
                 If SOMAIT>0
                    Then MSG="Confirma o recalculo dos vencimentos e a//"
                         MSG=MSG+"sua atualiza‡„o no Contas a Pagar ?"
                         ConfGeral(MSG)
                         If OK<>"S"
                            Then podecalcok=false
                         EndIf
                 EndIf
         EndIf
         If podecalcok
            Then CALC_VENCTOS()
         EndIf
         Moveto Field NCampo
    Case RetVal="F8":
         Moveto "OCV"
         While True
           CHAVEAP()
           If CHAVEAP=9 Then QuitLoop EndIf
           Controla_EdicaoAP()
         EndWhile
         Moveto "OCC"
         Moveto [Condicao de Pagamento]
    Case RetVal="PGUP":
         CHAVEF=9
         QuitLoop
    Case RetVal="PGDN":
         If IsBlank([Condicao de Pagamento])  Then Mensagem("Cond.Pagto Invalido !")   Loop EndIf
         If IsBlank([Tipo de Pagamento])      Then Mensagem("Tipo Pagto Invalido !")   Loop EndIf
         If IsBlank([Forma de Pagamento])     Then Mensagem("Forma Pagto Invalido !")  Loop EndIf
         FACA_DIGITAC=False
         FACA_CHAVEI=False
         CHAVEF=9 
         QuitLoop
    Case RetVal="F":
         DIGITA_FRETE()
         CALC_OC()
         Calc_Venctos()
    Case RetVal="D":
         DIGITA_DESCTO()
         CALC_OC()
         Calc_Venctos()
    Case RetVal="ESC":
      Switch
         Case Field()="Valor Substituicao ICMS":
              CHAVEF=9
              QuitLoop
         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()="Condicao de Pagamento":
              Moveto [Valor do Seguro]
         Case Field()="Tipo de Pagamento":
              Moveto [Condicao de Pagamento]
         Case Field()="Forma de Pagamento":
              Moveto [Tipo de Pagamento]
         OtherWise:
              Left
      EndSwitch
    Case RetVal="ENTER":
      Switch
         Case Field()="Valor Substituicao ICMS" Or
              Field()="Valor Despesas Acessorias" Or
              Field()="Valor do Seguro":
              Switch
                Case Field()="Valor Substituicao ICMS"   : Moveto [Valor Despesas Acessorias]
                Case Field()="Valor Despesas Acessorias" : Moveto [Valor do Seguro]
                Case Field()="Valor do Seguro"           : Moveto [Condicao de Pagamento]
              EndSwitch
              CALC_OC()
         Case Field()="Condicao de Pagamento":
              If IsBlank([]) Then Loop EndIf
              Moveto [Tipo de Pagamento]
         Case Field()="Tipo de Pagamento":
              If IsBlank([]) Then Loop EndIf
              If []="O"
                 Then [Numero de Parcelas]=BlankNum()
                      [Composicao de Dias]=""
                      [Forma de Pagamento]=""
                      Moveto [Forma de Pagamento]
                 Else Moveto [Numero de Parcelas]
              EndIf
         Case Field()="Forma de Pagamento":
              If IsBlank([]) Then Loop EndIf
              QuitLoop
         OtherWise:
              Right
      EndSwitch
  EndSwitch
EndWhile
EndProc   ;  (DigitaF)

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

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

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

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

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

  End
  Down
  [Sequencia do Lancamento]=i
  If pos_s=0 And NPC=1 And NP>1
     Then
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day([OCC->Data de Entrega])
                  MES_VECTO=Month([OCC->Data de Entrega])
                  ANO_VECTO=Year([OCC->Data de Entrega])
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12                
                     Then Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch       
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************     
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)         
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)    
                  EndSwitch
                  [Data de Vencimento]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+StrVal(ANO_VECTO))
             Else
                  [Data de Vencimento]=[OCC->Data de Entrega]+(NDIAS*i)
          EndIf
     Else
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day([OCC->Data de Entrega])
                  MES_VECTO=Month([OCC->Data de Entrega])
                  ANO_VECTO=Year([OCC->Data de Entrega])
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12                
                     Then Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch       
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************     
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)         
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)    
                  EndSwitch
                  [Data de Vencimento]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+StrVal(ANO_VECTO))
             Else
                  [Data de Vencimento]=[OCC->Data de Entrega]+NDIAS
          EndIf
  EndIf
  If i<>NP
     Then [Valor do Documento]=VRVENCTO
     Else [Valor do Documento]=VRVENCTO+VRDIFERE
  EndIf
  
  If i=1 And NDIAS=0
     Then [Tipo do Pagamento]="DN" 
     Else [Tipo do Pagamento]=[OCC->Forma de Pagamento]
  EndIf    

  If PARAM_ATUA_CAPG="S"
     Then

          [Data a Pagar]=[Data de Vencimento]
          While True
            NDIAS=0
            If Dow([Data a Pagar])="Sat"
               Then NDIAS=2
               Else If Dow([Data a Pagar])="Sun"
                       Then NDIAS=1
                    EndIf
            EndIf
            DIA = [Data a Pagar]

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

            [Data a Pagar]=[Data a Pagar]+NDIAS
            If NDIAS=0
               Then QuitLoop
            EndIf
          EndWhile

          [Codigo da Conta    ]=PARAM_CONTA_CAIXA
          If [OCC->Tipo de Pagamento]="V" Then [Tipo do Lancamento ]="A" EndIf
          If [OCC->Tipo de Pagamento]="P" Then [Tipo do Lancamento ]="C" EndIf
          [Codigo do Documento]="OC"
          [Numero do Documento]=[OCC->Numero da OC]
          CHAVEAP=1
          TITULOS()
  EndIf

  i=i+1
EndWhile

Moveto "OCC"

EndProc

;****************************************+**************************************
;* Rotina para Calculo de Valores do OC                                    *
;*******************************************************************************
Proc CALC_OC()
[Valor Mercadoria]=VRMERC
If [Taxa de Desconto]>0
   Then VRDESCTO=NDecimal((VRMERC*[Taxa de Desconto])/100,2)
        TXDESCTO_TOTAL=[Taxa de Desconto]
   Else VRDESCTO=[Valor do Desconto]
        TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
EndIf
[Valor Desconto          ]=VRDESCTO
[Valor Mercadoria Liquido]=[Valor Mercadoria]-VRDESCTO

VRBCICMS=0
VRICMS  =0
VRIPI   =0
VRNF    =0

For I From 1 To 10
    If Not IsBlank(AICMS[I])
       Then If BCICMS[I]>0
               Then VBC=BCICMS[I]-NDecimal((BCICMS[I]*TXDESCTO_TOTAL)/100,2)
                    VBC=VBC-NDecimal((VBC*RICMS[I])/100,2)
                    VRBCICMS=VRBCICMS+VBC
                    VRICMS=VRICMS+NDecimal((VBC*AICMS[I])/100,2)
               Else VRICMS=VRICMS+VIICMS[I]
            EndIf
    EndIf
    If Not IsBlank(AIPI[I])
       Then If BCIPI[I]>0
               Then VBC=BCIPI[I]-NDecimal((BCIPI[I]*TXDESCTO_TOTAL)/100,2)
                    VBC=VBC-NDecimal((VBC*RIPI[I])/100,2)
                    VRIPI=VRIPI+NDecimal((VBC*AIPI[I])/100,2)
               Else VRIPI=VRIPI+VIIPI[I]
            EndIf
    EndIf
EndFor

[Valor BCICMS]=VRBCICMS
[Valor ICMS  ]=VRICMS
[Valor IPI   ]=VRIPI
[Valor Nota Fiscal]=[Valor Mercadoria Liquido]+[Valor IPI]+[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]
        If [Aliquota de ICMS Frete]>0
           Then If [Aliquota BCICMS Frete]>0
                   Then [Valor BCICMS]=[Valor BCICMS]+NDecimal(([Valor do Frete]*[Aliquota BCICMS Frete])/100,2)
                        [Valor ICMS  ]=[Valor ICMS]+NDecimal(((([Valor do Frete]*[Aliquota BCICMS Frete])/100)*[Aliquota de ICMS Frete])/100,2)
                   Else [Valor BCICMS]=[Valor BCICMS]+[Valor do Frete]
                        [Valor ICMS  ]=[Valor ICMS]+NDecimal(([Valor do Frete]*[Aliquota de ICMS Frete])/100,2)
                EndIf
        EndIf
EndIf

Switch
  Case [ICMS sobre Total NF]="1":
       [Valor BCICMS]=[Valor Nota Fiscal]
       [Valor ICMS  ]=Round(([Valor BCICMS]*UF_ALIQUOTA_ICMS)/100,2)
       [Aliquota de ICMS]=UF_ALIQUOTA_ICMS
  Case [ICMS sobre Total NF]="2":
       [Valor BCICMS]=[Valor BCICMS]+[Valor Despesas Acessorias]+[Valor do Seguro]
       [Valor ICMS  ]=[Valor ICMS  ]+Round((([Valor Despesas Acessorias]+[Valor do Seguro])*UF_ALIQUOTA_ICMS)/100,2)
       [Aliquota de ICMS]=UF_ALIQUOTA_ICMS
EndSwitch

EndProc

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

If INICIO_DIALOG
   Then INICIO_DIALOG=False
EndIf      

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59:
           Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then Confirma()
                    If OK="S"
                       Then Del
                            CancelDialog
                    EndIf
            EndIf
      Case Evento["KeyCode"] = 27:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso" : CancelDialog
             Case Campo="Valor_Frete"   : Campo="Frete_Incluso"
             Case Campo="AICMS_Frete"   : Campo="Valor_Frete"
             Case Campo="CFO_Frete"     : Campo="AICMS_Frete"
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto"      : CancelDialog
             Case Campo="Descto"        : Campo="A_Descto"
           EndSwitch
      Case Evento["KeyCode"] = 13:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso":
                  VSD_Frete_Incluso=ControlValue("Frete_Incluso")
                  If IsBlank(VSD_Frete_Incluso)
                     Then VSD_Frete_Incluso="N"
                  Endif
                  Campo="Valor_Frete"
             Case Campo="Valor_Frete":
                  VSD_Frete=ControlValue("Valor_Frete")
                  If Not VSD_Frete>0
                     Then [Frete Incluso na Nota ]=":"
                          [Valor do Frete        ]=BlankNum()
                          [Aliquota de ICMS Frete]=BlankNum()
                          [CFO Frete             ]=""

                          CancelDialog
                     Else If VSD_Frete_Incluso="S"
                             Then If VSD_CFO_Frete=""
                                     Then VSD_AICMS_Frete=UF_ALIQUOTA_ICMS
                                          VSD_CFO_Frete  =[OCC->CFO]
                                  EndIf

                                  If VSD_Frete_Incluso="S"
                                     Then [Frete Incluso na Nota ]="+"
                                     Else [Frete Incluso na Nota ]=":"
                                  EndIf
                                  [Valor do Frete        ]=VSD_Frete
                                  [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                                  [CFO Frete             ]=VSD_CFO_Frete

                                  Campo="AICMS_Frete"
                             Else Campo="AICMS_Frete"
                          EndIf
                  EndIf
             Case Campo="AICMS_Frete":
                  VSD_AICMS_Frete=ControlValue("AICMS_Frete")
                  Campo="CFO_Frete"
             Case Campo="CFO_Frete":
                  VSD_CFO_Frete=ControlValue("CFO_Frete")

                  If VSD_Frete_Incluso="S"
                     Then [Frete Incluso na Nota ]="+"
                     Else [Frete Incluso na Nota ]=":"
                  EndIf
                  [Valor do Frete        ]=VSD_Frete
                  [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                  [CFO Frete             ]=VSD_CFO_Frete

                  CancelDialog

           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto":
                  VSD_A_Descto=ControlValue("A_Descto")
                  If VSD_A_Descto>0
                     Then VSD_Descto=BlankNum()
                          [Taxa de Desconto ]=VSD_A_Descto
                          [Valor do Desconto]=VSD_Descto

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

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

                  CancelDialog
           EndSwitch

   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo=""
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf

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

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
MontaRodapeSD(MSGCAMPO, TECLA)
Mouse Hide
RefreshDialog
Return TEMP
EndProc

;*******************************************************************************
;* Digitacao dos Dados do Frete                                                *
;*******************************************************************************
Proc Digita_Frete()
INICIO_DIALOG=True
OP_SHOWD="Frete"

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

VSD_Frete        =[Valor do Frete        ]
VSD_AICMS_Frete  =[Aliquota de ICMS Frete]
VSD_CFO_Frete    =[CFO Frete             ]

Showdialog "Calculo do Frete" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 10,15 height 04 width 50

   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,14 "Vr Frete" For "Valor_Frete"
   Accept @ 1,15 Width 10 "$" picture "#*#.[##]" Tag "Valor_Frete" to VSD_Frete

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

   Label  @ 0,36 "CFOP" for "CFO_Frete"
   Accept @ 1,37 Width 7 "A4" picture "####" Tag "CFO_Frete" to VSD_CFO_Frete

Enddialog
Mouse Show
EndProc

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

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

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


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

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

Enddialog
Mouse Show
EndProc

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

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

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

  Opcao_Ver    =False
  SetaCorRegistro("Editar")
  While True
    MSGCAMPO=""
    TECLA=" Esc=Retornar  F3=Ver Ficha  F7=Paginar  "
    Prompt TECLA

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

    Switch
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           PAGINA("OCV","MR")
           If EDITAR="S"
              Then CHAVEAP=0
                   Controla_EdicaoAP()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then CopyToArray RegItem
                                   Exclusao_Cabeca=False
                                   CHAVEAP=8
                                   TITULOS()
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case RetVal="F3":
         Del
         Moveto [Sequencia do Lancamento]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEAP=0
         Home
         SEQ=[Sequencia do Lancamento]
         Inicia_Registro_Venctos()
         Digita_APrazo()
         QuitLoop
    Case Retval="ESC":
         Moveto [Valor do Documento]
         TOTVENC=ImageCSum()

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

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

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

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

If Opcao_Ver Then Campo="I_Seq" EndIf

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

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

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

                    echo Normal
                    echo off

                    If Campo="V_Conta"
                       Then VSD_V_Conta          =[Codigo da Conta   ]
                            VSD_V_Descricao_Conta=[Descricao da Conta]
                    EndIf
                    If Campo="V_TpLancto"
                       Then VSD_V_TpLancto          =[Tipo do Lancamento     ]
                            VSD_V_Descricao_TpLancto=[Descricao do Lancamento]
                    EndIf
                    If Campo="V_CdDocto"
                       Then VSD_V_CdDocto           =[Codigo do Documento]
                            VSD_V_TpDocto           =[Tipo do Documento  ]
                            VSD_V_SrDocto           =[Serie do Documento ]
                    EndIf
                    If Campo="V_TpPagto"
                       Then VSD_V_TpPagto          =[Tipo do Pagamento       ]
                            VSD_V_Descricao_TpPagto=[Descricao Tipo Pagamento]
                    EndIf
                    If Campo="V_CCusto"
                       Then VSD_V_CCusto          =[Codigo CCusto   ]
                            VSD_V_Descricao_CCusto=[Descricao CCusto]
                   EndIf
                    If Campo="V_PlContas"
                       Then VSD_V_PlContas          =[Codigo Plano_Conta   ]
                            VSD_V_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                   EndIf
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="V_Conta":
                  If QuerDesfazer("")
                     Then If CHAVEAP=1
                             Then Del
                             Else Undo
                          EndIf
                          CHAVEAP=9
                          CancelDialog
                  EndIf
             Case Campo="V_TpLancto"    : Campo="V_Conta"
             Case Campo="V_CdDocto"     : Campo="V_TpLancto"
             Case Campo="V_NoDocto"     : Campo="V_CdDocto"
             Case Campo="V_DtVencto"    : Campo="V_NoDocto"
             Case Campo="V_DtaPagar"    : Campo="V_DtVencto"
             Case Campo="V_Vr_Lancto"   : Campo="V_DtaPagar"
             Case Campo="V_TpPagto"     : Campo="V_Vr_Lancto"
             Case Campo="V_PlContas"    : Campo="V_TpPagto"
             Case Campo="V_CCusto"      : Campo="V_PlContas"
             Case Campo="V_Vr_Descto"   : Campo="V_CCusto"
             Case Campo="V_DtDescto"    : Campo="V_Vr_Descto"
             Case Campo="V_Multa"       : Campo="V_DtDescto"
             Case Campo="V_TxJuros"     : Campo="V_Multa"
             Case Campo="V_TpTxJuros"   : Campo="V_TxJuros"
             Case Campo="V_Observacoes" : Campo="V_TpTxJuros"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="V_Conta":
                  VSD_V_Conta=ControlValue("V_Conta")
                  If Not IsBlank(VSD_V_Conta)
                     Then Moveto [Codigo da Conta]
                          Ativa_Lookup()
                          Moveto [Codigo da Conta]
                          Locate VSD_V_Conta
                          If RetVal
                             Then VSD_V_Conta          =[Codigo da Conta   ]
                                  VSD_V_Descricao_Conta=[Descricao da Conta]
                                  KeyPress "ESC"

                                  [Codigo da Conta]=VSD_V_Conta
                                  Campo="V_TpLancto"
                             Else Mensagem("Conta n„o Cadastrada !")
                                  VSD_V_Conta          =""
                                  VSD_V_Descricao_Conta=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_TpLancto":
                  VSD_V_TpLancto=ControlValue("V_TpLancto")
                  If Not IsBlank(VSD_V_TpLancto)
                     Then Moveto [Tipo do Lancamento]
                          Ativa_Lookup()
                          Moveto [Tipo de Lancamento]
                          Locate VSD_V_TpLancto
                          If RetVal
                             Then VSD_V_TpLancto          =[Tipo de Lancamento     ]
                                  VSD_V_Descricao_TpLancto=[Descricao do Lancamento]
                                  KeyPress "ESC"

                                  [Tipo do Lancamento]=VSD_V_TpLancto
                                  Campo="V_CdDocto"
                             Else Mensagem("Tipo Lan‡amento invalido !")
                                  VSD_V_TpLancto          =""
                                  VSD_V_Descricao_TpLancto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_CdDocto":
                  VSD_V_CdDocto=ControlValue("V_CdDocto")
                  If Not IsBlank(VSD_V_CdDocto)
                     Then Moveto [Codigo do Documento]
                          Ativa_Lookup()
                          Moveto [Codigo do Documento]
                          Locate VSD_V_CdDocto
                          If RetVal
                             Then VSD_V_CdDocto          =[Codigo do Documento]
                                  VSD_V_TpDocto          =[Tipo do Documento  ]
                                  VSD_V_SrDocto          =[Serie do Documento ]
                                  KeyPress "ESC"

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

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

                                    VSD_V_DtaPagar=VSD_V_DtaPagar+NDIAS
                                    If NDIAS=0
                                       Then QuitLoop
                                    EndIf
                                  EndWhile
                                  Campo="V_DtaPagar"
                          EndIf
                  EndIf
             Case Campo="V_DtaPagar":
                  VSD_V_DtaPagar=ControlValue("V_DtaPagar")
                  If Not IsBlank(VSD_V_DtaPagar)
                     Then Campo="V_Vr_Lancto"
                  EndIf
             Case Campo="V_Vr_Lancto":
                  VSD_V_Vr_Lancto=ControlValue("V_Vr_Lancto")
                  If Not IsBlank(VSD_V_Vr_Lancto)
                     Then Campo="V_TpPagto"
                  EndIf
             Case Campo="V_TpPagto":
                  VSD_V_TpPagto=ControlValue("V_TpPagto")
                  If Not IsBlank(VSD_V_TpPagto)
                     Then Moveto [Tipo do Pagamento]
                          Ativa_Lookup()
                          Moveto [Tipo do Pagamento]
                          Locate VSD_V_TpPagto
                          If RetVal
                             Then VSD_V_TpPagto          =[Tipo do Pagamento       ]
                                  VSD_V_Descricao_TpPagto=[Descricao Tipo Pagamento]
                                  KeyPress "ESC"

                                  [Tipo do Pagamento]=VSD_V_TpPagto
                                  Campo="V_PlContas"
                             Else Mensagem("Forma Pagamento invalido !")
                                  VSD_V_TpPagto          =""
                                  VSD_V_Descricao_TpPagto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_PlContas"           :
                  VSD_V_PlContas=ControlValue("V_PlContas")
                  If Not IsBlank(VSD_V_PlContas)
                     Then If PlContas(VSD_V_PlContas,"S")
                             Then VSD_V_PlContas           = REG_PLCONTAS["Codigo Plano_Conta"         ]
                                  VSD_V_Descricao_PlContas = LTrim(REG_PLCONTAS["Descricao Plano_Conta"])
                                  VSD_V_Codigo_Hist        = REG_PLCONTAS["Codigo do Historico"        ]

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

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

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

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

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

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
MontaRodapeSD(MSGCAMPO, TECLA)
Mouse Hide
RefreshDialog
Return TEMP
EndProc  ; (APrazo_Dialog)

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

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

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

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

If CHAVEAP=1
   Then If [Sequencia do Lancamento]=1
           Then [Tipo do Lancamento ]="C"
                [Codigo do Documento]="OC"
                [Numero do Documento]=[OCC->Numero da OC]
                [Observacoes        ]="REF. OC/"+[OCC->Numero da OC]
           Else UnLockRecord

                Moveto "OCC"
                UnLockRecord
                KeyPress "F7"

                Moveto "OCV"
                Moveto [Sequencia do Lancamento]
                Locate OC,SEQ

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

                Moveto "OCC"
                KeyPress "F7"
                Moveto "OCV"
                Moveto [Sequencia do Lancamento]
                Locate OC,SEQ

        EndIf
EndIf

INICIO_DIALOG=True
CopyToArray RegItem

Registro_Item_Venctos("Ler")

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

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

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

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

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

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

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

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

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

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

   Label  @ 06,00 "Plano Contas" For "V_PlContas"
   Accept @ 07,01 Width 16 "A13" picture "!*!" Tag "V_PlContas" to VSD_V_PlContas
   Accept @ 07,17 Width 43 "A40" picture "!*!" Tag "V_Descricao_PlContas" to VSD_V_Descricao_PlContas

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

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

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

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

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

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

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

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

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

EndProc  ; (Digita_APrazo)

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

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

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

Moveto "OCC"
UnLockRecord
KeyPress "F7"

Moveto "\\sistemas\\ctapag\\Titulos"
Moveto [Numero do Lancamento]
If IsBlank([OCV->Numero Lancamento Titulos])
    Then
         While True
           End
           Moveto [Numero do Lancamento]
           If Numero_Lancamento("Interno","Locked_Down")
              Then SEQ = PROXLANCTO_NLANC
                   Release Vars PROXLANCTO_NLANC
                   quitloop
           EndIf    
         EndWhile

        ;While True
        ;  End
        ;  Moveto [Numero do Lancamento]
        ;  If Numero_Lancamento("Interno","")
        ;     Then SEQ = PROXLANCTO_NLANC
        ;          Release Vars PROXLANCTO_NLANC                 
        ;  EndIf   
        ;  Down
        ;  [Numero do Lancamento]=SEQ
        ;  If Not IsLockRecord()
        ;     Then QuitLoop
        ;     Else Del
        ;  EndIf
        ;EndWhile
    Else
         SEQ=[OCV->Numero Lancamento Titulos]
         Locate [OCV->Numero Lancamento Titulos]
         If Not RetVal
            Then MSG="O lan‡amento "+[OCV->Numero Lancamento Titulos]+" no Contas a Pagar,//"
                 MSG=MSG+"Referente ao vencimento ["+StrVal([OCV->Sequencia do Lancamento])+"] n„o foi encontrado !//"
                 MSG=MSG+"Verificar fechamento mensal no Contas a Pagar Ok !//"
                 MSG=MSG+"Neste caso o estorno ou alter‡„o no Contas a Pagar n„o ser  efefuado !"
                 Mensagem(MSG)

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

                 Moveto "OCV"
                 Return
            Else
                 Oktit=True
                 Switch
                   Case [Sistema Gerador       ]<>"OC": oktit=False
                   Case [Lancamento Gerador    ]<>[OCV->Numero da OC   ]: oktit=False
                   Case [Sequencia Gerador     ]<>[OCV->Sequencia do Lancamento]: oktit=False
                   Case [Documento Referente   ]<>RTrim(("OC/"+[OCC->Numero da OC])): oktit=False
                 EndSwitch
                 If Not OkTit
                    Then MSG=    "O lan‡amento no Contas a Pagar n„o corresponde a Sequencia ["+StrVal([OCV->Sequencia do Lancamento])+"] !//"
                         MSG=MSG+"Verificar no Contas a Pagar se o mes n„o foi fechado !//"
                         MSG=MSG+"Neste caso o estorno ou alter‡„o no Contas a Pagar n„o ser  efefuado !//"
                         MSG=MSG+"Talvez algum outro erro gerou este problema !"
                         If CHAVEAP=0
                            Then MSG=MSG+"//Se necess rio exclua esta Sequencia e fa‡a-a novamente !"
                                 Mensagem(MSG)

                                 Moveto "OCC"
                                 KeyPress "F7"

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

                                         Moveto "OCC"
                                         KeyPress "F7"

                                         Moveto "OCV"
                                         Return
                                 EndIf
                         EndIf
                 EndIf
         EndIf
EndIf

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

If (CHAVEAP=1) Or
   (CHAVEAP=0 and Oktit)
   Then
        if CHAVEAP=0
           then while true
                  If Not IsLockRecord()
                     then quitloop
                  endif   
                endwhile
        endif
        [Codigo do Documento ]=[OCV->Codigo do Documento ]
        [Numero do Documento ]=[OCV->Numero do Documento ]
        [Codigo do Emitente  ]=[OCC->Codigo              ]
        [Tipo do Lancamento  ]=[OCV->Tipo do Lancamento  ]
        [Data de Entrada     ]=[OCC->Data de Entrega     ]
        [Data Competencia    ]=[OCC->Data de Entrega     ]
        [Data de Emissao     ]=[OCC->Data de Emissao     ]
        [Data de Vencimento  ]=[OCV->Data de Vencimento  ]
        [Data a Pagar        ]=[OCV->Data a Pagar        ]
        [Valor do Documento  ]=[OCV->Valor do Documento  ]
        [Saldo do Documento  ]=[OCV->Valor do Documento  ]
        [Valor do Desconto   ]=[OCV->Valor do Desconto   ]
        [Data Limite Desconto]=[OCV->Data Limite Desconto]
        [Multa               ]=[OCV->Multa               ]
        [Taxa de Juros       ]=[OCV->Taxa de Juros       ]
        [Tipo Taxa de Juros  ]=[OCV->Tipo Taxa de Juros  ]
        [NDias Taxa de Juros ]=[OCV->NDias Taxa de Juros ]
        [Tipo do Pagamento   ]=[OCV->Tipo do Pagamento   ]
        [Codigo da Conta     ]=[OCV->Codigo da Conta     ]
        [Codigo da Empresa   ]=[OCC->Codigo da Empresa   ]
        [Observacoes         ]=[OCV->Observacoes         ]
        [Codigo CCusto       ]=[OCV->Codigo CCusto       ]
        [Codigo Plano_Conta  ]=[OCV->Codigo Plano_Conta  ]
        If (CHAVEAP=1) Or (IsBlank([Sistema Gerador]))
           Then Controle_Dia()
                [Sistema Gerador   ]="OC"
                [Lancamento Gerador]=[OCV->Numero da OC   ]
                [Sequencia Gerador ]=[OCV->Sequencia do Lancamento]
        EndIf
        [Documento Referente ]=RTrim("OC/"+[OCC->Numero da OC])
        UnLockRecord

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

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

Moveto "OCC"
KeyPress "F7"

Moveto "OCV"

EndProc  ; (Titulos)

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc Exclusao_C()
Moveto "OCI"
CHAVEI=8
While RecordStatus("New")=False
  EXCLUSAO_I()
EndWhile
Exclusao_Cabeca=True
Moveto "OCV"
While RecordStatus("New")=False
  CHAVEAP=8
  CopyToArray RegItem
  TITULOS()
EndWhile
Moveto "OCC"
Del

STATUSFILTRO="DEL"
EndProc ;(EXCLUSAO_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc Exclusao_I()
;; ESTOQUE()
Del
EndProc ;(EXCLUSAO_I)

;********************************************************************************
;* Rotina para a escolha do Numero da Ordem de Compra                                                          *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)

Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_NOC"   : CancelDialog
            Case Campo="TG_OPDTV" : Campo="TG_NOC"  
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          Switch
            Case Campo="TG_NOC"  :
                 VSDGNOC=AlinhM(ControlValue("TG_NOC"),6)
                 COD1=VSDGNOC
                 If COD1=[Numero da OC]
                    Then Mensagem("N§ de Ordem de Compra ja' existe !")
                    Else CODIGOANT =[Numero da OC]
                         Moveto [Numero da OC]
                         Locate COD1
                         If RetVal
                            Then Mensagem("N§ de Ordem de Compra ja' existe !")
                                 Locate CODIGOANT
                            Else Locate CODIGOANT
                                 Campo="TG_OPDTV"
                          EndIf
                  EndIf
             Case Campo="TG_OPDTV" :
                  VSDGOPDTV = ControlValue("TG_OPDTV")
                  AcceptDialog
          EndSwitch
   EndSwitch
EndIf
Switch
  Case Campo="TG_NOC":
     MSG_CAMPO="Informe o novo n£mero da Ordem de Compra"
  Case Campo="TG_OPDTV":
       MensagemRadioButtons()   
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Nova Referencia                                                             *
;*******************************************************************************
Proc NOVAREF()
Do_It!

Aguarde("Copiando Ordem de Compra")

{Ask} {OCC} Check
Moveto [Numero da OC] TypeIn "~CODIGOANT"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then {Ask} {Answer} TypeIn "Fast"
        Moveto [Numero da OC       ] TypeIn "Changeto ~COD1"
        Moveto [Data de Emissao    ] TypeIn "Changeto Today"
        Moveto [Data de Entrega    ] TypeIn "Changeto Today"
        Moveto [Situacao da OC     ] TypeIn "Changeto ABERTO"
        Do_It!

        {Tools} {More} {Add} {Answer} {OCC} {NewEntries}
        ClearAll
        
        {Ask} {OCI} Check
        Moveto [Numero da OC] TypeIn "~CODIGOANT"
        Do_It!
        ClearAll

        If Not IsEmpty("Answer")
           Then ;OP‡Æo para copiar apenas itens pendentes a entregar
                If VSDGOPDTV=2 
                   Then CoEdit "Answer"
                        Scan
                          VSD_I_Qtd_Entregue            = [Quantidade Entregue    ]
                          VSD_I_Fator_Conversao         = [Fator de Conversao     ]
                          VSD_I_Quantidade              = [Quantidade             ]
                          VSD_I_Preco_Unitario          = [Preco Unitario         ]
                          VSD_I_Taxa_Desconto_Unitario  = [Taxa Desconto Unitario ]
                          VSD_I_Valor_Desconto_Unitario = [Valor Desconto Unitario]
                          
                          ;----- Impostos --------------------------------------
                          VSD_I_CST_Item               =[Tipo Tributacao           ]
                          VSD_I_RBC_ICMS               =[Aliquota Reduzida BCICMS  ]
                          VSD_I_AICMS                  =[Aliquota de ICMS          ]
                          VSD_I_Valor_ICMS             =[Valor do ICMS             ]
                          
                          VSD_I_RBC_IPI                =[Aliquota Reduzida BCIPI   ]
                          VSD_I_AIPI                   =[Aliquota de IPI           ]
                          VSD_I_Valor_IPI              =[Valor do IPI              ]
                          ;-----------------------------------------------------
                          
                          If VSD_I_Quantidade - VSD_I_Qtd_Entregue <= 0 
                             Then [Quantidade]=0
                                  Loop
                             Else VSD_I_Quantidade   = VSD_I_Quantidade - VSD_I_Qtd_Entregue      
                                  VSD_I_Qtd_Entregue = BlankNum()
                          EndIf     
                          
                          If IsBlank(VSD_I_Fator_Conversao) Or VSD_I_Fator_Conversao=0
                             Then VSD_I_Fator_Conversao=1
                          EndIf
                          
                          If VSD_I_Fator_Conversao<1
                             Then VSD_I_Quantidade_Convertida=Round(VSD_I_Quantidade*VSD_I_Fator_Conversao,0)
                             Else VSD_I_Quantidade_Convertida=VSD_I_Quantidade*VSD_I_Fator_Conversao
                          EndIf
                          
                          If VSD_I_Taxa_Desconto_Unitario>0
                             Then VSD_I_Valor_Desconto_Unitario=NDecimal((VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100,6)
                          EndIf
                          
                          Switch
                            Case VSD_I_Quantidade>0 And VSD_I_Preco_Unitario>0 :
                                 VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                            Case VSD_I_Preco_Unitario=0 Or VSD_I_Quantidade=0 :
                                 VSD_I_Preco_Total=0
                            Case VSD_I_Preco_Unitario>0 :
                                 VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                          EndSwitch
                          
                          ;---- Calculo do Imposto -----------------------------
                          If Not IsBlank(VSD_I_CST_Item)
                             Then TribCST=Checa_CST("ICMS","S",VSD_I_CST_Item)
                                  If TribCST<>"70"
                                     Then If VSD_I_RBC_ICMS>0 And VSD_I_AICMS>0
                                             Then VSD_I_Valor_ICMS=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_ICMS)/100))*VSD_I_AICMS)/100,2)
                                             Else VSD_I_Valor_ICMS=Round((VSD_I_Preco_Total*VSD_I_AICMS)/100,2)
                                          EndIf
                                    EndIf
                          EndIf
                          If VSD_I_RBC_IPI>0 And VSD_I_AIPI>0
                             Then VSD_I_Valor_IPI=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_IPI)/100))*VSD_I_AIPI)/100,2)
                             Else VSD_I_Valor_IPI=Round((VSD_I_Preco_Total*VSD_I_AIPI)/100,2)
                          EndIf           
                          ;-----------------------------------------------------
                          
                          [Quantidade             ] = VSD_I_Quantidade
                          [Quantidade Entregue    ] = VSD_I_Qtd_Entregue
                          [Fator de Conversao     ] = VSD_I_Fator_Conversao
                         ;[Preco Unitario         ] = VSD_I_Preco_Unitario
                          [Preco Total            ] = Round(VSD_I_Preco_Total,2)
                         ;[Taxa Desconto Unitario ] = VSD_I_Taxa_Desconto_Unitario
                         ;[Valor Desconto Unitario] = VSD_I_Valor_Desconto_Unitario
                          [Valor do ICMS          ] = VSD_I_Valor_ICMS
                          [Valor do IPI           ] = VSD_I_Valor_IPI
                        EndScan
                        Do_It!
                        ClearAll
                        
                        {Ask} {Answer} TypeIn "Fast Delete"
                        Moveto [Quantidade] TypeIn "0"
                        Do_It!
                        ClearAll
                EndIf
                {Ask} {Answer} TypeIn "Fast"
                Moveto [Numero da OC       ] TypeIn "Changeto ~COD1"
                Moveto [Quantidade Entregue] TypeIn "Changeto Blank"
                Do_It!

                {Tools} {More} {Add} {Answer} {OCI} {NewEntries}
                ClearAll                        
        EndIf        
        Mensagem("Ordem de Compra copiada !")
   Else Mensagem("Ordem de Compra n„o foi copiada, verificar !")
EndIf

ClearAll
LimpAguarde()
Monta_Tabelas()

Moveto [Numero da OC]
Locate CODIGOANT

EndProc


;*******************************************************************************
;* Rotina para Copiar Ordem de Compra                                          *
;*******************************************************************************
Proc Copiar()
Private campoant

COD1=""

Echo Normal
Echo Off

Campoant=Field()

ShowDialog "Nova OC" Proc "SD_Dialog"
Trigger "OPEN","ARRIVE"
Key "F1","ENTER","ESC","TAB",
  -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
  @ 01,01 Height 09 Width 48

  Label  @ 01,01 "N§" For "TG_NOC"
  Accept @ 01,06 Width 09 "A6"  Picture "#*#" Tag "TG_NOC" To VSDGNOC
  
  Label @ 03,01 "Copiar OC" For "TG_OPDTV"
  RadioButtons @ 04,01 Height 3 Width 42
    "Com ~t~odos os itens",
    "Somente os itens ~p~endentes a entregar"
    Tag "TG_OPDTV"
    To VSDGOPDTV

EndDialog
Mouse Show
If Not RetVal
   Then Moveto Field campoant
        Return False
   Else NovaRef()
        Return True
EndIf

EndProc   ;  (Copiar)

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC,OPCAON
OC=[OCC->Numero da OC]
Do_It!

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

Monta_Tabelas()
Return True
EndProc

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

{Ask} TypeIn "\\Sistemas\\Cadastro\\Destinat" Enter
Moveto [Codigo            ] example "cemit"
Moveto [Codigo Atividade  ] TypeIn "~VSDGATIVIDADE.."
{Ask} {OcC} Check
Moveto [Numero da OC          ] Example "Oc"
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo                ] example "cemit" TypeIn "!, ~VSDGDESTINAT.."
switch
  case VSDGOPDTPEEI="1" : Moveto [Data de Entrega ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
  case VSDGOPDTPEEI="2" : Moveto [Data de Emissao ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
  case VSDGOPDTPEEI="3" : Moveto [Data_Inclusao   ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
endswitch

Moveto [Codigo do Comprador   ] TypeIn "~VSDGCOMPRADOR.."
Moveto [Situacao da OC        ] 
switch
  case VSDGSITUACAOOC="JUNTAR ABERTO+SUSPENSO"     : TypeIn "ABERTO or SUSPENSO"
  case VSDGSITUACAOOC="IGNORAR CANCELADO+SUSPENSO" : TypeIn "not CANCELADO, not SUSPENSO"
  case VSDGSITUACAOOC="IGNORAR CANCELADO"          : TypeIn "not CANCELADO"
  case VSDGSITUACAOOC<>"TODAS"                     : TypeIn "~VSDGSITUACAOOC.."
endswitch
Moveto [Tipo da Operacao OC     ] TypeIn "~VSDGTPOPEROC.."
Do_It!
ClearAll

CriaTabelaControle()
EndProc  ; (Seleciona)

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

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"        : Campo="NO"
            Case Campo="TG_COMPRADOR"      : Campo="TG_EMPRESA"
            Case Campo="TG_ATIVIDADE"      : Campo="TG_COMPRADOR"
            Case Campo="TG_DESTINAT"       : Campo="TG_ATIVIDADE"
            Case Campo="TG_TPOPEROC"       : Campo="TG_DESTINAT"
            Case Campo="TG_OPDTPEEI"       : Campo="TG_TPOPEROC"
            Case Campo="TG_DTINI"          : Campo="TG_OPDTPEEI"
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"
            Case Campo="TG_SITUACAOOC"  : Campo="TG_DTFIM"
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"     : Campo="TG_COMPRADOR"
                    Case Campo="TG_COMPRADOR"   : Campo="TG_ATIVIDADE"
                    Case Campo="TG_ATIVIDADE"   : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT"    : Campo="TG_TPOPEROC" 
                    Case Campo="TG_TPOPEROC"    : Campo="TG_OPDTPEEI"
                    Case Campo="TG_OPDTPEEI"    : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"       : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"       : Campo="TG_SITUACAOOC"
                    Case Campo="TG_SITUACAOOC"  : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="":
       MSG_CAMPO=""
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc


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

LimpAguarde()
Do_It!
ClearAll

Echo Normal
Echo Off

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

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

    Label  @ 02,00 "Comprador"  For "TG_COMPRADOR"
    Accept @ 03,01 Width 07 "A4"  Picture "!*!" Tag "TG_COMPRADOR" To VSDGCOMPRADOR
    Accept @ 03,09 Width 25 "A30"  Picture "!*!" Tag "TG_NOMCOMPRADOR" To VSDGNOMCOMPRADOR

    Label  @ 04,00 "Atividade"  For "TG_ATIVIDADE"
    Accept @ 05,01 Width 07 "A4"  Picture "!*!" Tag "TG_ATIVIDADE" To VSDGATIVIDADE
    Accept @ 05,09 Width 25 "A30"  Picture "!*!" Tag "TG_NOMATIV" To VSDGNOMATIV

    Label  @ 06,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 07,01 Width 07 "A04" Picture "[&,#][#*#]" Tag "TG_DESTINAT"   To VSDGDESTINAT
    Accept @ 07,09 Width 25 "A24" Picture "!*!" Tag "TG_NOMDEST"    To VSDGNOMDEST

    Label  @ 08,00 "Tipo da Opera‡‡ao OC" For "TG_TPOPEROC"
    Accept @ 09,04 Width 04 "A1"  Picture "!*!"  Tag "TG_TPOPEROC"       To VSDGTPOPEROC
    Accept @ 09,09 Width 25 "A20" Picture "!*!"  Tag "TG_NOMNOMTPOPEROC" To VSDGNOMTPOPEROC

    Label  @ 10,00 "Op‡äes de Datas" For "TG_OPDTPEEI"
    Accept @ 11,04 Width 04 "A1"  Picture "1,2,3"  Tag "TG_OPDTPEEI"    To VSDGOPDTPEEI
    Accept @ 11,09 Width 25 "A20" Picture "!*!"  Tag "TG_NOMOPDTPEEI" To VSDGNOMOPDTPEEI
 
    Label  @ 12,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 13,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 13,16 "at‚" For "TG_DTFIM"
    Accept @ 13,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 14,00 "Situa‡Æo"  For "TG_SITUACAOOC"
    Accept @ 15,01 Width 33 "A30"  Picture "ABERTO,SUSPENSO,CANCELADO,ENTREGUE,TODAS,!*!" Tag "TG_SITUACAOOC"  To VSDGSITUACAOOC

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

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  AGUARDE("Filtrando dados")
  SelecionaFiltro()

  Result=True

  QuitLoop
EndWhile

SDFILTRO_ATIVO=False

Return Result
EndProc

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

View NOWINDOW "\\Sistemas\\Vendas\\PedidoC"
View NOWINDOW "\\Sistemas\\Vendas\\PedidoI"
View NOWINDOW "\\Sistemas\\Compras\\OcI"

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

View NoWindow "\\Sistemas\\Cadastro\\Destinat"
View NOWINDOW "\\Sistemas\\CtaPag\\Titulos"
View NoWindow "P_OC"
View NOWINDOW "OCV"

If Not CoEditaTabelaControle() ; substitui Coedit da tabela principal
   Then Return False
EndIf

Return True
EndProc


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

If IsEmpty("P_OC")
   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_OC"
        Moveto [Codigo_Empresa]
        Locate [OCC->Codigo da Empresa]
        If Not RetVal
           Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Result=False
           Else PARAM_CONTA_CAIXA  = [Codigo_Conta_Caixa       ]

                Moveto [Codigo_Conta_Caixa]
                Ativa_Lookup()
                Moveto [Codigo da Conta]
                Locate PARAM_CONTA_CAIXA
                If RetVal
                   Then PARAM_DESC_CONTA_CAIXA=[Descricao da Conta]
                   Else PARAM_DESC_CONTA_CAIXA=""
                EndIf
                Keypress "Esc"
                UnLockRecord
                
                PARAM_EMPRESA       =[Codigo_Empresa        ]
                PARAM_ATUA_CAPG     =[Atualiza_Contas_Pagar ]
                PARAM_RELATORIO     =[Script_Impressao      ]
                PARAM_RELATORIO_S   =[Script_Impressao_S    ]
                PARAM_DATAS_VENCTOS =[Datas_Vencimentos     ]
                PARAM_SUBSTICMS     =[Substituicao ICMS     ]
                PARAM_TRANSPORTADORA=[Codigo_Transportadora ]
                PARAM_ORIGEM_PRECO  =[Origem_Preco_Unitario ]
                PARAM_ALTERA_PRECO  =[Alterar_Preco_Unitario]
                
                Result=True
        EndIf
EndIf

Moveto "Occ"
KeyPress "F7"

Return Result
EndProc ; (Carrega_Parametros)


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

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoAP()
Digita_APrazo()
Moveto "OCV"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
SetaCorRegistro("Editar")
While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1 Then Controle_Dia() EndIf
  While FACA_CHAVEI
    While True
      CHAVEI()
      If CHAVEI=9 Then QuitLoop EndIf
      If Not CONSFORN Then  Controla_EdicaoI() endIf
    EndWhile

    While FACA_DIGITAF
      DIGITAF()
      If CHAVEF=9 Then QuitLoop EndIf
    EndWhile
  EndWhile
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf

AtualizaRegistroControle("Numero da OC",OC,MODOPAGINA)
If OPCAO_FORM="1"
  Then PickForm "1"
  Else PickForm "F"
EndIf
                           
EndProc

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

VSDGEMPRESA       = ""
VSDGDESTINAT      = ""
VSDGNOMDEST       = ""
VSDGTPOPEROC      = ""
VSDGNOMTPOPEROC   = ""
VSDGOPDTPEEI      = ""
VSDGDTINI         = BlankDate()
VSDGDTFIM         = Today()
VSDGATIVIDADE     = ""
VSDGNOMATIV       = ""
VSDGCOMPRADOR     = ""
VSDGNOMCOMPRADOR  = ""
VSDGSITUACAOOC    = ""

REGRAFILTRO       = ""
SD_ICODATAMF      = "2,EMISSAO,ENTREGA"

EndProc

;*******************************************************************************
;* Rotina Principal OCs                                                        *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"
SYS_VALOR()
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""    EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf

LimpaFiltro()

;---- Metodo p/ Localizar Item ------------------------------------------------- 
If IsFile(PrivDir()+"COMPRA.ini")
   Then LeiaINI(PrivDir()+"COMPRA.ini","LOCALIZA_CODIGO.S.null")
EndIf
If Not IsAssigned(LOCALIZA_CODIGO) Then LOCALIZA_CODIGO=""  EndIf
ModoLocalizarItem("","","")

TabelaTemp      = ""
TabelaPrincipal = "Occ"
TabelaControle  = TabelaPrincipal

If (IsAssigned(MODOFILTRAR) And MODOFILTRAR)
   Then If Not SetaFiltro()
           Then Return
        EndIf
        SelecionaFiltro()
   Else TabelaControle    = TabelaPrincipal
        MODOFILTRARATIVO  = True
        MODOFILTRAR       = False
        MODOFILTRARINCLUI = False
        MODOFILTRATODOS   = True
EndIf
OPCAO_FORM = "F"

If Not Monta_Tabelas() ;Criado uma proc onde as tabelas serÆo abertas 
   Then Return
EndIf
;-------------------------------------------------------------------------------

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

CONT=0

Array AICMS[10]
Array AIPI[10]

Array VIICMS[10]
Array VIIPI[10]

Array BCICMS[10]
Array BCIPI[10]

Array RICMS[10]
Array RIPI[10]

While True
  CHAVEC()
  ;--- FILTRO ------------------------------------------------------------------
  If CHAVEC=99 
     Then If Filtrar()
             Then MODOFILTRAR=True
          EndIf
          Monta_Tabelas()
          Loop
  EndIf
  If CHAVEC=98 
     Then AGUARDE("Visualizando todos registros")
          MODOFILTRAR=False
          Do_It!
          
          TabelaControle=TabelaPrincipal
          Monta_Tabelas()
          Loop
  EndIf   
  ;-----------------------------------------------------------------------------
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
DeletaTabelaControle() ; FILTRO
Release Vars All
Release Procs All
