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

;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Compra                              *
;*******************************************************************************
Proc ChaveC()
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

  TECLA=""
  AguardaTeclasPadrao()

  If RetVal=-33
    Then 
         Echo Normal
         Echo Off
         Switch
           Case Not MODOFILTRAR:
             ShowPopup " Fun‡”es " CENTERED
              "~F~iltrar  ": " Ativar filtro para edicao    " :"6",
              "~S~air"     : " Ignorar op‡äes               " : "CANCELAR"
             EndMenu
             To MenuVar
           OtherWise           :  
             ShowPopup " Fun‡”es " CENTERED
              "~F~iltrar                   ": " Ativar crit‚rio de filtro para edicao     " :"6",
              "~O~rdenar por N§ OC         ": " Ordernar registros filtrados              " :"15NOC",
              "~O~rdenar por Fornecedor    ": " Ordernar registros filtrados              " :"15FORN",
              "~T~odos                     ": " Desativar filtro e exiber todos registrors" :"20",
              "~S~air                      ": " Ignorar op‡äes                            " : "CANCELAR"
             EndMenu
             To MenuVar
         EndSwitch
         Echo Off
         If MenuVar="CANCELAR" or MenuVar="Esc"
            Then Loop
         EndIf                                         
         RetVal=MenuVar
  EndIf

  Switch
    ; ---- FILTRO --------------------------------------------------------------
    Case RetVal="15NOC"  And MODOFILTRAR: OrdenaCampo("Numero da OC") QuitLoop ; posso utilizar um indice jaïexistente
    Case RetVal="15FORN" And MODOFILTRAR: OrdenaCampo("Razao Social") QuitLoop
    Case RetVal="6":
         CHAVEC=99
         Del
         Return
    Case RetVal="20":
         MODOFILTRAR=False
         CHAVEC=98
         Del
         Return
    ;---------------------------------------------------------------------------
    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":
         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]
           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()
                                     Else UnLockRecord
                                  EndIf
                             Else UnLockRecord
                          EndIf
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           AtualizaRegistroControle()                           
           If OPCAO_FORM="1"
              Then PickForm "1"
              Else PickForm "F"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If IsBlank([])
            Then If IsBlank(OC)
                    Then OC="1"
                    Else OC=StrVal(NumVal(OC)+1)
                 EndIf
                 []=OC
         EndIf
         []=ALINH()
         OC=[]
         Del
         If OPCAO_FORM="F"
            Then PickForm "1"
         EndIf
         Locate OC
         If Retval
            Then CHAVEC=0
            Else CHAVEC=1
                 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 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 Entrega  ]
        EndIf
        [Data de Emissao]=Today()
   Else Moveto [Data de Entrega]
EndIf

INICIO_PAGINA=False
FACA_CHAVEI=True

While True

      TECLA="Esc=Retornar  "

      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"
         Then TECLA=TECLA + "F1=Tabelas  "
      EndIf
      If CHAVEC=0
         Then TECLA=TECLA+"Del=Excluir  F6=Imprimir  "
      EndIf
      TECLA=TECLA+"F7=Copiar OC  F8=Obs  PgDn  "

      Prompt TECLA

      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

      Wait Field
           Message MSGCAMPO
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","DOWN","UP",
                 "F8","F6","F8","F4","F7"

      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()="CFO"
              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",
                     "~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":
           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 do Comprador"      : Moveto [Codigo]
           Case Field()="Codigo da Transportadora" : Moveto [Codigo do Requisitante]
           Case Field()="Razao Social Transport"   : Moveto [Codigo da Transportadora]
           Case Field()="CFO"                      : Moveto [Codigo do Comprador]
           Case Field()="Codigo da Destinacao"     : Moveto [Codigo]
           Case Field()="Data de Entrega"          :
                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then Moveto [Codigo da Empresa]
                           Else Undo
                                CHAVEC=9
                                QuitLoop
                        EndIf
                EndIf
           Case Field()="Codigo da Empresa":
                If QuerDesfazer("")
                   Then EXCLUSAO_C()
                        CHAVEC=9
                        QuitLoop
                Endif
           OtherWise:
                Left
           EndSwitch
      Case Retval="F6":
           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" 
                      Then 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 [Codigo]
           Case Field()="Codigo":
                If IsBlank([Codigo da Transportadora])
                   Then [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                EndIf
                Moveto [Codigo do Comprador]
           Case Field()="Codigo do Comprador":
                Moveto [CFO]
           Case Field()="CFO":
                If NumVAl(SubStr([CFO],1,1))>4
                   Then Mensagem("CFO Invalido !")
                        Loop
                   Else Moveto [ICMS sobre Total NF]
                EndIf
           Case Field()="ICMS sobre Total NF":
                If IsBlank([])
                   Then []="0"
                EndIf
                Moveto [Codigo do Requisitante]
           Case Field()="Codigo do Requisitante":
                Moveto [Codigo da Transportadora]
           Case Field()="Codigo da Transportadora":
                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 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 !")
  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)

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc ChaveI()
Moveto "OCI"
FACA_DIGITAF=True
While True
  Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
  Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
  Moveto [Item da OC    ]   VCITENS =ImageCCount()

  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
                          
    TECLA= "Esc=Retornar  F3=Ver Ficha  F5=Consulta  F7=Paginar PgDn/PgUp  "

    Prompt TECLA

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

    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="F5":
         VSDGEMPRESA=[Occ->Codigo da Empresa]
         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
           SetaPosForm()
				 EndWhile
				 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 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_Referencia=[Referencia]
        KeyPress "ESC"
EndIf

If INICIO_DIALOG
   Then If CHAVEI=0
           Then Campo="I_Quantidade"
           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
   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 [Pedidoi->Codigo do Item]
                             VSD_I_Referencia=[Referencia]
                             KeyPress "ESC"
                     EndIf
                 Case Evento["KeyCode"] = -81:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else Down
                      EndIf
                      If CHAVEI=0
                        Then Moveto [Codigo do Item]
                             Ativa_Lookup()
                             Locate [Pedidoi->Codigo do Item]
                             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"] = -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]
                            Campo="I_Codigo_Item"
                    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" :
           ShowPopup " Alterar Forma de Localizar o Item " CENTERED
            "Por Codigo do ~I~tem       " : " Localiza o item pelo seu c¢digo           " : "LOC_CODITE",
            "Por Codigo do ~F~ornecedor " : " Localiza o item pelo codigo do fornecedor " : "LOC_CODFOR",
            "Por ~R~eferencia do Item   " : " Localiza o item pela sua referencia       " : "LOC_CODREF",
            "Por Codigo de ~B~arra      " : " Localiza o item pelo c¢digo de barra      " : "LOC_CODBAR",
           Separator,
            "~S~air                     " : " Ignorar op‡äes                            " : "CANCELAR"
           EndMenu
           To MenuVar
           Echo Off
            
           If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Return
           EndIf                                         
           RetVal=MenuVar
           LOCALIZA_CODIGO = MenuVar
            
           Switch 
            Case LOCALIZA_CODIGO="LOC_CODITE" : LOCALIZAR_POR="CodItem" 
            Case LOCALIZA_CODIGO="LOC_CODFOR" : LOCALIZAR_POR="CodFor" 
            Case LOCALIZA_CODIGO="LOC_CODREF" : LOCALIZAR_POR="Ref."
            Case LOCALIZA_CODIGO="LOC_CODBAR" : LOCALIZAR_POR="CodBar"   
           EndSwitch                           
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="I_Codigo_Item":
                  If QuerDesfazer("")
                     Then CHAVEI = 9
                          Del
                          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 IsBlank(VSD_I_Codigo_Item)
                     Then Campo="I_UN_Item"
                     Else Campo="I_Quantidade"
                  EndIf
             Case Campo="I_Taxa_Desconto_Unitario"  Or
                  Campo="I_Valor_Desconto_Unitario" Or
                  Campo="I_Preco_Total"       : Campo="I_Preco_Unitario"
                  
            Case Campo="I_CST_Item"           : Campo="I_Quantidade"
            
            Case Campo="I_RBC_ICMS"    Or
                 Campo="I_AICMS"       Or
                 Campo="I_Valor_ICMS"  Or       
                 Campo="I_CST_IPI"            : Campo="I_CST_Item"
                 
            Case Campo="I_AIPI"        Or
                 Campo="I_Valor_IPI"   Or      
                 Campo="I_CFOP"               : Campo="I_CST_IPI"
             
             Case Campo="I_MVA"               : Campo="I_CFOP"
             Case Campo="I_UFO"               : Campo="I_MVA"
             Case Campo="I_Fator_Conversao"   :
                  If VSD_I_TICMS="S"
                     Then Campo="I_UFO"
                     Else Campo="I_CFOP"
                  EndIf
             Case Campo="I_CCusto"            : Campo="I_Fator_Conversao"
             Case Campo="I_Flag"              : Campo="I_CCusto"
           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 Moveto [Codigo do Item]
                          Ativa_Lookup()
                          Localizar_Item_Por()         
                          If RetVal
                             Then VSD_I_Referencia     =[Referencia]
                                  VSD_I_Codigo_Item    =[Codigo do Item   ]
                                  VSD_I_MVA            =[MVA_1            ]
                                  If [Inativo]="S"
                                     Then Mensagem("Este item://"+[Codigo do Item]+" "+[Descricao do Item]+"//"+"Referˆncia: "+[Referencia]+"//"+
                                                  "Fornecedor: "+[Codigo Fornecedor]+"// // esta inativo !")
                                          KeyPress "ESC"
                                     Else KeyPress "ESC"
                                          Moveto "OCI"
                                          [Codigo do Item]=VSD_I_Codigo_Item
                                          [MVA           ]=VSD_I_MVA
                                          If [Tributacao de ICMS]="D" Or SubStr([Tipo Tributacao],2,2)="10"
                                             Then [Aliquota de ICMS]=UF_ALIQUOTA_ICMS
                                          EndIf
                                          Moveto [Lookup_Cotacao]
                                          Ativa_Lookup()
                                          Moveto [Codigo do Item]
                                          Locate VSD_I_Codigo_Item, [OCC->Codigo]
                                          If RetVal
                                             Then VSD_I_Preco_Unitario=[Valor Unitario]
                                                  VSD_I_MVA           =[MVA           ]
                                                  VSD_I_AICMSUFO      =[ICMS UF_ORIGEM]
                                          EndIf
                                          KeyPress "ESC"
        
                                          Moveto "OCI"
                                          [Preco Unitario]=VSD_I_Preco_Unitario
                                          [MVA           ]=VSD_I_MVA
                                          [ICMS UF_ORIGEM]=VSD_I_AICMSUFO
        
                                          ;* 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
        
                                          Registro_Item("Ler")
                                          Campo="I_Quantidade"                          
                                  EndIf
                             Else Mensagem("Item n„o Cadastrado !")
                                  VSD_I_Codigo_Item   =""
                                  VSD_I_Descricao_Item=""
                                  VSD_I_UN_Item       =""
                                  VSD_I_Tipo_Item     =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf                                  
             Case Campo="I_Descricao_Item":
                  VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                  Campo="I_Tipo_Item"
             Case Campo="I_Tipo_Item":
                  VSD_I_Tipo_Item=ControlValue("I_Tipo_Item")
                  If Not IsBlank(VSD_I_Tipo_Item)
                     Then Moveto [Tipo do Item]
                          Ativa_Lookup()
                          Moveto [Tipo do Item]
                          Locate VSD_I_Tipo_Item
                          If RetVal
                             Then 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

                  If IsBlank(VSD_I_Codigo_Item)
                     Then Campo="I_UN_Item"
                     Else Campo="I_Preco_Unitario"
                  EndIf
             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
                                  Campo="I_Preco_Unitario"
                             Else Mensagem("Unidade n„o Cadastrada !")
                                  VSD_I_UN_Item=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_Preco_Unitario":
                  VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                  If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                     Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                     Else If VSD_I_Preco_Unitario>0
                             Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                          EndIf
                 EndIf
                 Campo="I_Taxa_Desconto_Unitario"
             Case Campo="I_Taxa_Desconto_Unitario":
                  VSD_I_Taxa_Desconto_Unitario=ControlValue("I_Taxa_Desconto_Unitario")
                  If VSD_I_Taxa_Desconto_Unitario>0
                     Then VSD_I_Valor_Desconto_Unitario=NDecimal((VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100,6)
                          Campo="I_Preco_Total"
                     Else Campo="I_Valor_Desconto_Unitario"
                  EndIf
                  If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                     Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                     Else If VSD_I_Preco_Unitario>0
                             Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                          EndIf
                 EndIf
             Case Campo="I_Valor_Desconto_Unitario":
                  VSD_I_Valor_Desconto_Unitario=ControlValue("I_Valor_Desconto_Unitario")
                  Campo="I_Preco_Total"
                  If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                     Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                     Else If VSD_I_Preco_Unitario>0
                             Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                          EndIf
                  EndIf
             Case Campo="I_Preco_Total":
                  VSD_I_Preco_Total=ControlValue("I_Preco_Total")
                  Campo="I_CST_Item"
             Case Campo="I_CST_Item":
                  VSD_I_CST_Item=ControlValue("I_CST_Item")
                  If Not IsBlank(VSD_I_CST_Item)
                     Then TribCST=Checa_CST("ICMS","S",VSD_I_CST_Item)
                          If TribCST<>""
                             Then CSTOk  =False
        												 TribCST=SubStr(VSD_I_CST_Item,2,2)
            										 If (SubStr(VSD_I_CST_Item,1,1)="0"   Or
            										     SubStr(VSD_I_CST_Item,1,1)="1"   Or
            										     SubStr(VSD_I_CST_Item,1,1)="2" ) And
                                     TribCST="00" Or 
                                     TribCST="10" Or
                                     TribCST="20" Or
                                     TribCST="30" Or
                                     TribCST="40" Or
                                     TribCST="41" Or
                                     TribCST="50" Or
                                     TribCST="51" Or
                                     TribCST="60" Or
                                     TribCST="70" Or
                                     TribCST="90"
                                     Then CSTOk=True
                                  EndIf
         												 If CSTOk
                                     Then Switch
                                           Case TribCST="00"    : VSD_I_TICMS="D"
                                           Case TribCST="10"    : VSD_I_TICMS="S"
                                           Case TribCST="20"    : VSD_I_TICMS="D"
                                           Case TribCST="30"    : VSD_I_TICMS="S"
                                           Case TribCST="40"    : VSD_I_TICMS="I"
                                           Case TribCST="41"    : VSD_I_TICMS="N"
                                           Case TribCST="50" Or 
                                                TribCST="51"    : VSD_I_TICMS="O"
                                           Case TribCST="60"    : VSD_I_TICMS="S"
                                           Case TribCST="70"    : VSD_I_TICMS="S"
                                           Case TribCST="90"    : VSD_I_TICMS="O"
                                           OtherWise            : VSD_I_TICMS="O"   
                                          EndSwitch
                                         
                                          Switch
                                           Case (TribCST="00" Or TribCST="10")                                :
                                                VSD_I_RBC_ICMS=BlankNum()
                                                Campo="I_AICMS"
                                           Case (TribCST="20" Or TribCST="60" Or TribCST="70" Or TribCST="90"):
                                                Campo="I_RBC_ICMS"
                                           Case (TribCST="30" Or TribCST="40" Or TribCST="41" Or                                                 
                                                 TribCST="50" Or TribCST="51")                                :                               
                                                VSD_I_RBC_ICMS=BlankNum()
                                                VSD_I_AICMS=BlankNum()
                                                VSD_I_Valor_ICMS=BlankNum()
                                                Campo="I_CST_IPI"
                												  EndSwitch
        		 										    Else Mensagem("CST inv lido para tipo de tributa‡„o de ICMS !")
        	 											 EndIF   
                             Else Mensagem("CST ICMS inv lido, use F1 para consultar !")   
                          EndIf
                  EndIf
             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_Fator_Conversao"
                                  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_Fator_Conversao"
             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_Flag"
                             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_Flag"
                  EndIf
             Case Campo="I_Flag":
                  AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA="Esc=Retornar  F7=Altera Localiza‡„o  "
If Campo="I_Codigo_Item" Or
   Campo="I_Tipo_Item"   Or
   Campo="I_CCusto"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Seq"                    : MSGCAMPO="Sequencia"
  Case Campo="I_Codigo_Item"            : MSGCAMPO="Codigo do Item"
  Case Campo="I_Descricao_Item"         : MSGCAMPO="Descri‡„o do Item"
  Case Campo="I_Tipo_Item"              : MSGCAMPO="Tipo do Item"
  Case Campo="I_Quantidade"             : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"                : MSGCAMPO="Unidade 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"
  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  "
EndIf

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

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

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

EndProc ;Proc Localizar_Item_Por()

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc 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()

Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP","F7"
     @ 06,2 height 15 width 74

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

   Label  @ 00,01 "Codigo Item" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,15 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,15 Width 33 "A30" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,49 "TI" For "I_Tipo_Item"
   Accept @ 01,49 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   Label  @ 00,53 "Referˆncia" For "I_Referencia"
   Accept @ 01,54 Width 16 "A14" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia
     
   Label  @ 02,01 "Quantidade" For "I_Quantidade"
   Accept @ 03,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 02,15 "UN" For "I_UN_Item"
   Accept @ 03,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 02,21 "Pr.Unitario" For "I_Preco_Unitario"
   Accept @ 03,21 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 02,34 "%/" For "I_Taxa_Desconto_Unitario"
   Accept @ 03,34 Width 10 "N" picture "#*#.[####]" Tag "I_Taxa_Desconto_Unitario" to VSD_I_Taxa_Desconto_Unitario
   Label  @ 02,36 "Vr.Desconto" For "I_Valor_Desconto_Unitario"
   Accept @ 03,45 Width 12 "N" picture "#*#.[#####]" Tag "I_Valor_Desconto_Unitario" to VSD_I_Valor_Desconto_Unitario
   Label  @ 02,58 "Pr.Total" For "I_Preco_Total"
   Accept @ 03,58 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

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

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

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

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

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

   Label  @ 11,00 "Centro Custo" For "I_CCusto"
   Accept @ 12,01 Width 10 "A7" picture "###.###" Tag "I_CCusto" to VSD_I_CCusto
   Accept @ 12,11 Width 31 "A25" picture "!*!" Tag "I_Descricao_CCusto" to VSD_I_Descricao_CCusto

   Accept @ 12,60 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
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 
                      
       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                       ]

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

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

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           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
  [Tipo do Pagamento]=[OCC->Forma de Pagamento]

  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")
                  If Not IsBlank(VSD_AICMS_Frete) Or VSD_Frete<=0
                     Then Campo="CFO_Frete"
                  EndIf
             Case Campo="CFO_Frete":
                  VSD_CFO_Frete=ControlValue("CFO_Frete")

                  If Not IsBlank(VSD_CFO_Frete) And VSD_Frete>0
                     Then 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
                  EndIf

           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))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog
Return TEMP
EndProc

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

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

    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 Moveto [Codigo Plano_Conta]
                          Ativa_Lookup()
                          Moveto [Codigo Plano_Conta]
                          Locate VSD_V_PlContas
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Plano de Contas a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_V_PlContas          =""
                                          VSD_V_Descricao_PlContas=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_V_PlContas          =[Codigo Plano_Conta]
                                          VSD_V_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                                          VSD_V_Codigo_Hist        = [Codigo do Historico   ]
                                          KeyPress "ESC"

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

                                          [Codigo CCusto]=VSD_V_CCusto
                                          Campo="V_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))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog
Return TEMP
EndProc  ; (APrazo_Dialog)

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

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro_Venctos()
INICIO_DIALOG=True
Moveto [Sequencia do Lancamento]
Locate [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
           If [Numero do Lancamento]=""
              Then SEQ="000001"
              Else SEQ=ALINHM(StrVal(NumVal([Numero do Lancamento])+1),6)
           EndIf
           Down
           [Numero do Lancamento]=SEQ
           If Not IsLockRecord()
              Then QuitLoop
              Else Del
           EndIf
         EndWhile
    Else
         SEQ=[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
        [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 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
          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
                                  AcceptDialog
                           EndIf
                  EndIf
          EndSwitch
   EndSwitch
EndIf
Switch
  Case Campo="TG_NOC":
     MSG_CAMPO="Informe o novo n£mero da Ordem de Compra"
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 {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 04 Width 21

  Label  @ 01,02 "N§" For "TG_NOC"
  Accept @ 01,07 Width 09 "A6"  Picture "#*#" Tag "TG_NOC" To VSDGNOC

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 VSDGNOMDATAOC="ENTREGA": Moveto [Data de Entrega       ] ">=~VSDGDTINI, <=~VSDGDTFIM"
  Case VSDGNOMDATAOC="EMISSAO": Moveto [Data de Emissao       ] ">=~VSDGDTINI, <=~VSDGDTFIM"
EndSwitch
Moveto [Codigo do Comprador   ] TypeIn "~VSDGCOMPRADOR.."
Moveto [Situacao da OC        ] TypeIn "~VSDGNOMSITUACAOOC.."
Do_It!
ClearAll

CriaTabelaControle()
EndProc  ; (Seleciona)

;*******************************************************************************
;* ROTINA PARAR MONTAR LAYOUT COMBOBOX                                         *
;*******************************************************************************
Proc Carrega_ComboBox()
Private Janela_Lista, WinArray_Lista, Result

;LI = Linha Inicial
;CI = Coluna Inicial 
;NL = N§ de Linhas do ComboBox
;LC = Largura do ComboBox  

Window Handle Dialog To Janela_Lista
Window GetAttributes Janela_Lista To WinArray_Lista
LISD=WinArray_Lista["ORIGINROW"]
CISD=WinArray_Lista["ORIGINCOL"]

Result=True
Switch 
  Case Campo="TG_ICODATAOC"        Or
       Campo="TG_NOMDATAOC"        : LI=09 CI=01 NL=02 LC=20

  Case Campo="TG_ICOSITUACAOOC"    Or  
       Campo="TG_NOMSITUACAOOC"    : LI=11 CI=01 NL=04 LC=20

  OtherWise                        : Result=False
EndSwitch

Return Result
EndProc ;Carrega_ComboBox()

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

If Disparo="EVENT" And Evento["Type"]="MOUSE" And SubStr(Campo,1,6)="TG_ICO"
   Then Temp=False 
        MONTA_COMBOBOX()
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_NOMDATAOC"      : Campo="TG_DESTINAT"
            Case Campo="TG_DTINI"          : Campo="TG_NOMDATAOC"
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"
            Case Campo="TG_NOMSITUACAOOC"  : 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_NOMDATAOC" 
                    Case Campo="TG_NOMDATAOC": Campo="TG_DTINI"
                         VSDGNOMDATAOC=ControlValue("TG_NOMDATAOC")
                         If IsBlank(VSDGNOMDATAOC)
                            Then VSDGNOMDATAOC="EMISSAO"
                         EndIf    
                    Case Campo="TG_DTINI"    : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"    : Campo="TG_NOMSITUACAOOC"
                    Case Campo="TG_NOMSITUACAOOC" : Campo="YES"
                         VSDGNOMSITUACAOOC=ControlValue("TG_NOMSITUACAOOC")
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_SITUACAO":
       MSG_CAMPO="Situacao: Aberto, Suspenso, Cancelada, Entregue, Todas"
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 17 Width 65

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 33 "A24" 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 33 "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 33 "A30"  Picture "!*!" Tag "TG_NOMATIV" To VSDGNOMATIV

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

    Label  @ 08,00  "Op‡”es de Datas"  For "TG_NOMDATAOC"
    Label  @ 09,20  chr(31) For "TG_ICODATAOC"
    Accept @ 09,01  Width 20 "A12"  Picture "EMISSAO,ENTREGA" Tag "TG_NOMDATAOC" To VSDGNOMDATAOC
    Accept @ 09,100 Width 1   "A1" Picture "!*!" Tag "TG_ICODATAOC" To VSDGICODATAOC

    Label  @ 08,22  "Per¡odo Referente" For "TG_DTINI"
    Label  @ 09,22  "de" For "TG_DTINI"
    Accept @ 09,26  Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 09,39  "at‚" For "TG_DTFIM"
    Accept @ 09,44  Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 10,00  "Situacao" For "TG_NOMSITUACAOOC"
    Label  @ 11,20  chr(31) For "TG_ICOSITUACAOOC"
    Accept @ 11,01  Width 20 "A12" Picture "ABERTO,SUSPENSO,CANCELADA,ENTREGUE" Tag "TG_NOMSITUACAOOC" To VSDGNOMSITUACAOOC
    Accept @ 11,100 Width 1   "A1" Picture "!*!" Tag "TG_ICOSITUACAOOC" To VSDGICOSITUACAOOC

    Pushbutton @ 13,19 width 11 "~O~k"      OK     Default Value "Ok"  Tag "YES" To BottonValue
    Pushbutton @ 13,33 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\\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 princiapl
   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]
                
                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()
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
      Controla_EdicaoI()
    EndWhile

    While FACA_DIGITAF
      DIGITAF()
      If CHAVEF=9 Then QuitLoop EndIf
    EndWhile
  EndWhile
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
AtualizaRegistroControle()                           
EndProc

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

;--- Variaveis para Filtrar ----------------------------------------------------
VSDGEMPRESA       = ""
VSDGDESTINAT      = ""
VSDGNOMDEST       = ""
VSDGDTINI         = BlankDate()
VSDGDTFIM         = Today()
VSDGATIVIDADE     = ""
VSDGNOMATIV       = ""
VSDGCOMPRADOR     = ""
VSDGNOMCOMPRADOR  = ""
VSDGNOMDATAOC     = "EMISSAO"
VSDGNOMSITUACAOOC = ""

TabelaPrincipal="Occ"
TabelaControle =TabelaPrincipal
OPCAO_FORM="F"

MODOFILTRAR=False

If Not Monta_Tabelas() 
   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
