;** RqCabeca *******************************************************************
;*  Digitacao de Requisicao de Estoque \/ Verifica Estoque/Explosao Mat.Prima  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)                       
;Desenvolvido em : 23/12/1994 por Anivel Augusto Rodrigues
;Ultima Alteracao: 23/05/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pegar Custo Medio como Valor Padrao !!
;Ultima Alteracao: 23/05/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle Mouse
;Ultima Alteracao: 07/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Codigo de Barras
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 15/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Outras Entradas Alterar Preco de Custo
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 12/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Showdialog Preco Total
;Ultima Alteracao: 03/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Recalc_Consumo() Tricostura
;Ultima Alteracao: 22/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: AJustes usar ultimo custo atual no item
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha      
;Ultima Alteracao: 23/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes INICIO_PAGINA EletroG   
;Ultima Alteracao: 08/11/2010 por Bruno Carvalho
;Motivo Alteracao: Ajuste Rotina C¢digo de Barra             
;Ultima Alteracao: 24/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao CHECA_FORMULA()
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas       
;Ultima Alteracao: 31/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Atualizacao Preco de Custo >0
;Ultima Alteracao: 27/04/2011 por Bruno Carvalho
;Motivo Alteracao: Add rotina para verificar senha supervisor ao exlcluir
;Ultima Alteracao: 11/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes para exclusÆo de requisiäes
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas funäes para confecäes  
;Ultima Alteracao: 21/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Paginar/Exclusao()  
;Ultima Alteracao: 23/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes C¢digo de Barras e alteraÆo de tecla pra ativar CDBAR   
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 30/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CUSTO=0->CUSTO=[Ultimo Custo Total]
;Ultima Alteracao: 24/01/2012 por Bruno Carvalho
;Motivo Alteracao: Add ShowPopup "Movimento" e "OperaÆo", InclusÆo "Nome Fantasia 
;                  Empresa Trf" e excluido do form "Nome Fantasia"   
;Ultima Alteracao: 30/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Preo de Custo quando E/O acerto de custo, registro locado
;Ultima Alteracao: 27/02/2012 por Karina Andrade
;Motivo Alteracao: Ajustes CD_Barras SYS_CODIGO_CLIENTE="0304"
;Ultima Alteracao: 07/05/2012 por Bruno Carvalho
;Motivo Alteracao: Add Consulta "F5" na digitaÆo dos itens
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() nÆo usar imagecsum()
;Ultima Alteracao: 21/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() totalizar itens e quantidades
;Ultima Alteracao: 26/09/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        
;Ultima Alteracao: 01/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SetaCorRegistro("Editando") 
;Ultima Alteracao: 28/03/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado Localizar_Item_Por() 
;Ultima Alteracao: 16/04/2013 por Karina Andrade
;Motivo Alteracao: Ajustes ConsultaF1() no Codigo do Item -> mover para quantidade
;Ultima Alteracao: 09/05/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes "F1" ao buscar o item, atribuir custo unitario
;Ultima Alteracao: 16/09/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Codigo do Documento" e "Codigo da Empresa" Monta_Opcoes()
;Ultima Alteracao: 26/09/2013 por Bruno Carvalho
;Motivo Alteracao: Implementado "Informar Valor do Custo Mdio" #0322# 
;Ultima Alteracao: 08/04/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado Verifica_NLancto() 
;Ultima Alteracao: 10/04/2014 por Bruno Carvalho
;Motivo Alteracao: Add Verifica_NRegistros() onde ir  informar limite de registros
;Ultima Alteracao: 23/04/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao informar o numero do lancamento
;Ultima Alteracao: 03/06/2014 por Bruno Carvalho
;Motivo Alteracao: Comentado o novo procedimento de numero de lanamento at finalizaÆo de testes
;Ultima Alteracao: 12/06/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes Digitac() TECLA="ESC" quando [Codigo do Documento]
;Ultima Alteracao: 15/09/2014 por Kamila Gomes
;Motivo Alteracao: Adicionado VerificaÆo Controle dia por m¢dulo requisiÆo 
;Ultima Alteracao: 22/09/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes nao deixar excluir requisicao gerada de balanco 
;Ultima Alteracao: 29/09/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes variavel SYS_TIPO_CONTRDIA 
;Ultima Alteracao: 16/10/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado nova rotina para verificaÆo do Numero do Lancamento
;Ultima Alteracao: 04/11/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes inclusÆo de registro em intervalo de data, checa supervisor
;Ultima Alteracao: 10/11/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes MODOFILTRAR, MODOFILTRARINCLUI e MODOFILTRARATIVO
;Ultima Alteracao: 30/03/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado Parametro para nÆo deixar incluir item Fracionado
;Ultima Alteracao: 30/09/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado "Nome Fantasia Empresa Trf" -> "Nome Fantasia EmitDest" e "Codigo da Empresa Destino" - > "Codigo" 
;                  para utilizaao deste campo tambm para [Entrada] de [Industrializacao]
;Ultima Alteracao: 02/10/2015 por Bruno Carvalho  
;Motivo Alteracao: Incluido "I" no [Tipo de Operacao] para fornecer registros quando for requisiäes de IndustrializaÆo
;Ultima Alteracao: 07/10/2015 por Bruno Carvalho  
;Motivo Alteracao: Ajustado o processo p/ quandio for entrada de produÆo/industrializaÆo, permitir o usu rio o direito de alterar o consumo "RqMatPri"
;Ultima Alteracao: 22/01/2016 por Bruno Carvalho  
;Motivo Alteracao: Ajustes p/ permitir produÆo de item de terceiro #0290#
;Ultima Alteracao: 11/03/2016 por Bruno Carvalho  
;Motivo Alteracao: Ajustado a proc EXCLUIMAT() onde a sequencia do item da RqItem estava se perdendo
;Ultima Alteracao: 11/04/2016 por Bruno Carvalho  
;Motivo Alteracao: Add EXCLUIGRADE() quando usu rio excluir a requisiÆo, verificar se h  itens na RQITEMG e remove-los
;Ultima Alteracao: 11/04/2016 por Bruno Carvalho  
;Motivo Alteracao: Ajustado rotina p/ permitir apenas lanamentos sem grade [Sistema Gerador]="MA" ou [Sistema Gerador]="RR" 
;Ultima Alteracao: 11/05/2016 por Bruno Carvalho
;Motivo Alteracao: Inclusao ModoLocalizarItem()     
;Ultima Alteracao: 20/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Fracionado]
;Ultima Alteracao: 16/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado novo processo para geraÆo/verificaÆo do [Numero do Lancamento]
;Ultima Alteracao: 30/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Ajustes nao deixar excluir requisicao quando [Sistema Gerador]="RM"
;Ultima Alteracao: 05/07/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado Sistema Gerador "RM", "NE", "IX" e "NX"
;Ultima Alteracao: 16/07/2016 por Kamila Gomes 
;Motivo Alteracao: Ajustes Controle_Dia() nÆo estava sendo executada
;Ultima Alteracao: 23/07/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado opÆo de buscar itens a partir da nota de entrada (quantidade = 1) #0294#  
;Ultima Alteracao: 09/08/2016 por Bruno Carvalho 
;Motivo Alteracao: Ajustes Nota_Entrada() onde nÆo estava gerando o ESTOQUE()
;Ultima Alteracao: 01/11/2016 por Bruno Carvalho  
;Motivo Alteracao: Ajustado rotina p/ permitir lanamentos sem grade [Sistema Gerador]="DC" *ProgramaÆo de Disco
;Ultima Alteracao: 08/11/2016 por Bruno Carvalho  
;Motivo Alteracao: Ajustes p/ permitir produÆo de item #0325#
;Ultima Alteracao: 22/11/2016 por Bruno Carvalho  
;Motivo Alteracao: Ajustes na proc ESTOQUE() p/ atualizaÆo da [Data do Preco de Custo] independente se [RqItem->Custo Unitario]=[Preco de Custo]
;Ultima Alteracao: 29/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao PermissaoUsuario(), Ajustes CDBarras()
;Ultima Alteracao: 06/03/2017 por Bruno Carvalho 
;Motivo Alteracao: Adicionado Sistema Gerador "FT"
;Ultima Alteracao: 15/03/2017 por Bruno Carvalho 
;Motivo Alteracao: Adicionado Sistema Gerador "PR"
;Ultima Alteracao: 23/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SetaCorRegistro()
;Ultima Alteracao: 24/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ buscar c¢digo de barra na "Iten_Bar" -> Codigo_Barras2() 
;Ultima Alteracao: 29/09/2017 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes SomatoriaDosItens()
;Ultima Alteracao: 17/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloquear origem FT                
;Ultima Alteracao: 17/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloquear conforme sistema origem  
;Ultima Alteracao: 24/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog item exibir referencia 
;Ultima Alteracao: 23/01/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Destinat" -> Monta_Tabelas() Sol.: 33541                
;Ultima Alteracao: 26/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes criaÆo novos registros e unlockrecord
;Ultima Alteracao: 16/05/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes CDBarras() -> Ao chamar "F2" criava linha em branco
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 15/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opäes de quantidade nota de entrada
;Ultima Alteracao: 19/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes grava_log
;Ultima Alteracao: 23/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem qtde fracionada    
;Ultima Alteracao: 04/07/2018 por Bruno Carvalho             
;Motivo Alteracao: Ajustes CD_BARRA ao localizar o item, p/ nÆo alinhar a 10 d¡gitos -> ITEM_FRACIONADO
;Ultima Alteracao: 04/07/2018 por Bruno Carvalho             
;Motivo Alteracao: Ajustes p/ baixar itens da formula ao fazer a requisiÆo pela nota de entrada
;Ultima Alteracao: 22/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CtrlPgdn                    
;Ultima Alteracao: 24/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Filtro                      
;Ultima Alteracao: 24/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Filtro   
;Ultima Alteracao: 14/02/2019 por Kamila Gomes
;Motivo Alteracao: Ajuste localizar codigo de barras                   
;Ultima Alteracao: 31/05/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no processo para localizar codbar da proc CDBarras()
;Ultima Alteracao: 24/06/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes CDBarras() -> Comentado um QuitLoop que estava encerrando o showdialog do leitor de c¢digo de barras, pois o mesmo deve ficar em loop  
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Sistema Gerador] = "IM" na proc Sistema_Gerador() p/ ocorrncias de importaÆo de um sistema para outro "TransfRQ"
;Ultima Alteracao: 28/08/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes View tabelas para getrecord
;Ultima Alteracao: 17/09/2020 por Bruno Carvalho
;Motivo Alteracao: Movido da Bibliot IncluiRegistroControle()

;*******************************************************************************
;* Rotina para Localizar Registro Cabeca                                       *
;*******************************************************************************
Proc CHAVEC()

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

CHAVEF=0
INICIO_PAGINA=True
While True

   Moveto TabelaControle ;FILTRO
   Moveto [Numero do Lancamento]
   End
   LANCTO=[Numero do Lancamento]

   If OPCAO_FORM="F"
     Then Down
     Else CtrlPgDn
   EndIf
   Moveto [Numero do Lancamento]

   SetaCorRegistro("Editar")
   While True

    TECLA=""
    AguardaTeclasPadraoCF()

    If RetVal="F5"
       Then RetVal = MenuFiltrar()
    EndIf

    Switch
      ; ---- FILTRO ------------------------------------------------------------
      Case RetVal="MENUFILTRAR" :
           CHAVEC=99
           Del
           Return
      Case RetVal="MENUFILTROPADRAO" :
           Del
           
           LimpaFiltro()
           If Not SetaFiltro()
              Then CHAVE=9
              Else SelecionaFiltro()
                   Monta_Tabelas()
           EndIf   
           QuitLoop
      Case RetVal="MENUFILTROTODOS" :
           MODOFILTRAR=False
           CHAVEC=98
           Del
           Return
      ;-------------------------------------------------------------------------
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F3":
           If OPCAO_FORM="F"
              Then OPCAO_FORM="1"
              Else OPCAO_FORM="F"
           EndIf
           Del
           CHAVEC=5
           Return
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           MODOPAGINA = True        
           
           Del
           While True         
            VCITENS =BlankNum()
            VSQTDE  =BlankNum()
            VSVRMERC=BlankNum()
             
             If OPCAO_FORM="F"
                Then PAGINA(TabelaControle,"MR") ;FILTRO
                Else PAGINA(TabelaControle,"MT") ;FILTRO
             EndIf 
             LANCTO          = [Numero do Lancamento]
             SISTEMA_GERADOR = Sistema_Gerador()
             
             Switch
               Case EDITAR="S":  
                    If PegaRegistroControle("Numero do Lancamento",LANCTO) ;FILTRO
                       Then PickForm "1"
                            Echo Normal
                            Echo Off
                            If Checa_Controle([Numero_Controle_Dia])
                               Then 
                                    if PermissaoUsuario()
                                       then CHAVEC=0
                                            Controla_EdicaoC()
                                    endif
                               Else UnLockRecord
                            EndIf
                    EndIf    
               Case EXCLUIR="S":
                    If PegaRegistroControle("Numero do Lancamento",LANCTO) ;FILTRO
                       Then PickForm "1"
                            Echo Normal
                            Echo Off                   
                            If Checa_Controle([Numero_Controle_Dia])
                               Then If QuerExcluir("")
                                       Then
                                            SISTEMA_GERADOR = Sistema_Gerador()
                                            If (REGRAFILTRO ="CORTE" and [Sistema Gerador]<>"CO") or
                                               (REGRAFILTRO<>"CORTE" and [Sistema Gerador]<>"MA" and [Sistema Gerador]<>"MN") or
                                               (REGRAFILTRO<>"CORTE" and substr(SISTEMA_GERADOR,1,4)="BL -")   
                                               then
                                                    MSG="Sistema Origem = "+Sistema_Gerador()+"// //"
                                                    MSG=MSG+"Lanamento gerado por outro processo !// //"
                                                    MSG=MSG+"Excluir este lanamento em caso de erro no Sistema !//"
                                                    MSG=MSG+"Caso contrario corriga o lanamento no Sistema Origem !//"
                                               Else 
                                                    MSG=""
                                            EndIf
                                            If MSG="" or CONFGERAL_Supervisor("Confirma a Excluso do Lanamento ?")
                                               Then 
                                                    GRAVA_LOG=True
                                                    EXCLUSAO("Cabeca")
                                                    AtualizaRegistroControle("Numero do Lancamento",LANCTO,MODOPAGINA)
                                               Else UnLockRecord
                                            EndIf
                                       Else UnLockRecord     
                                    EndIf  
                               Else UnLockRecord           
                            EndIf
                    EndIf              
               OtherWise: QuitLoop
             EndSwitch
             
             FormKey
             Moveto TabelaControle
             
             If OPCAO_FORM="1"
                Then PickForm "1"
                Else PickForm "F"
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC":
           CHAVEC=9
           Del
           Return
      Case Retval="ENTER": 
           MODOPAGINA = False
           Switch
              Case TabelaControle=TabelaPrincipal:      
                 If Numero_Lancamento("","F")
                    Then LANCTO = PROXLANCTO_NLANC
                         Release Vars PROXLANCTO_NLANC   
                    Else QuitLoop
                 EndIf
                 PickForm "1"    
                 Moveto [Numero do Lancamento]        
              OtherWise:
                 If Not VerificaRegistroTemp("Lanamento no encontrado !") 
                    Then QuitLoop
                 EndIf   
                 LANCTO=IncluiRegistroControle("Numero do Lancamento")
                 PickForm "1"    
                 Moveto [Numero do Lancamento]
                 []=LANCTO
           EndSwitch
           If PROXIMO_LANCTO_REG_ACHOU
              Then CHAVEC=0
                   STATUSFILTRO    = "UPDATE"
                   If Checa_Controle([Numero_Controle_Dia])
                      Then if PermissaoUsuario()
                              then return
                           endif   
                   EndIf
              Else CHAVEC=1
                   STATUSFILTRO    = "INSERT"
                   If [Sistema Gerador] = ""
                      Then [Sistema Gerador   ] = "MA"
                           [Lancamento Gerador] = LANCTO
                   EndIf       
                   If Not Checa_Controle(SYS_CONTROLE_DIA_MOD)
                      Then OPCAO_FORM="F"
                      Else Return         
                   EndIf                  
           EndIf
           If CHAVEC=1
              Then Del
           EndIf              
           If TabelaControle <> TabelaPrincipal
              Then FormKey
                   Moveto TabelaControle
           EndIf
           If OPCAO_FORM="F"
              Then PickForm "F"
           EndIf
           QuitLoop
      EndSwitch
   EndWhile
EndWhile
EndProc  ; (ChaveC)

;*******************************************************************************
;* Localiza e posiciona no regsitro da tabela principal                        *
;*******************************************************************************
Proc IncluiRegistroControle(CAMPO)
Private CAMPO,COD

COD          = ""
STATUSFILTRO = ""
If Search("TEMP_",Upper(TabelaControle))>0
   Then If Not IsBlank([]) Then COD = [] EndIf   
        Del
        FormKey   

        Moveto TabelaPrincipal
        PickForm OPCAO_FORM
        Moveto Field CAMPO
        End
        If COD="" 
            Then If Numero_Lancamento("Interno","")
                    Then PROXIMO_LANCTO_REG_ACHOU = False
                         COD = PROXLANCTO_NLANC
                    Else Return COD
                 EndIf   
        EndIf                 
        If Form()<>"None"
           Then FormKey
                End Down
           Else Down     
        EndIf         
EndIf   
Release Vars CAMPO
Return COD

EndProc ;IncluiRegistroControle()

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()

Atualiza_Menu("Limpar")
If CHAVEC=1
   Then If Not IsBlank(SYS_EMPRESA_DEFAULT) And INICIO_PAGINA
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf
        Moveto [Codigo da Empresa]
        If REGRAFILTRO = "CORTE" 
           Then [Tipo de Movimento     ]="E"
                [Descricao do Movimento]="ENTRADA"
                [Tipo de Operacao      ]="P"
                [Descricao da Operacao ]="PRODUCAO"
                [Sistema Gerador       ]="CO"
                [Lancamento Gerador    ]=LANCTO
           Else [Sistema Gerador       ]="MA"
                [Lancamento Gerador    ]=LANCTO      
        EndIf
        SISTEMA_GERADOR = Sistema_Gerador()
        INICIO_PAGINA=False         
   Else  
        SISTEMA_GERADOR = Sistema_Gerador()
        If (REGRAFILTRO ="CORTE" and [Sistema Gerador]<>"CO") or
           (REGRAFILTRO<>"CORTE" and [Sistema Gerador]<>"MA" and [Sistema Gerador]<>"MN") or
           (REGRAFILTRO<>"CORTE" and substr(SISTEMA_GERADOR,1,4)="BL -")   
           then
                MSG="Sistema Origem = "+Sistema_Gerador()+"// //"
                MSG=MSG+"Lanamento gerado por outro processo !// //"
                MSG=MSG+"AlteraÆo nÆo permitida, verificar lanamento de origem !"
                Mensagem(MSG)
                UnLockRecord
                CHAVEC=9
                Return
        EndIf
        
        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
        EndIf
        Moveto [Requisitante]
EndIf

Switch
  Case [Tipo de Movimento]="E" And [Tipo de Operacao]="I" : VSDG_TITULO = "Industrializado pelo Fornecedor"
  Case [Tipo de Movimento]="S" And [Tipo de Operacao]="T" : VSDG_TITULO = "Transferido para Empresa"
  OtherWise                                               : VSDG_TITULO = ""
EndSwitch    

SetaCorRegistro("Editando")
While True
      TECLA=" Esc=Retornar  "
      If Field()="Codigo da Empresa"         Or
         Field()="Codigo"                    Or
         Field()="Codigo do Documento"       Or
         Field()="Requisitante"              Or
         Field()="Tipo de Movimento"         Or 
         Field()="Tipo de Operacao"
         Then TECLA=TECLA+"F1=Tabelas  "
      EndIf
      If CHAVEC=0
         Then TECLA=TECLA+"F8/=Itens  Del=Excluir  "
      EndIf

      If Field()="Codigo do Documento"
         Then Monta_Opcoes("Codigo do Documento","")
      EndIf
      
      If Field()="Codigo da Empresa"      
         Then Monta_Opcoes("Empresas","")     
      EndIf 
       
      MSGCAMPO=Field() 
       
      Prompt TECLA
      Wait Field
           Until "F1","ESC","ENTER","F8","DEL","FIELDVIEW","F35","DOWN"

      Switch
      Case RetVal="F1":
           If Field()="Codigo"       Or
              Field()="Requisitante" Or
              Field()="Numero do Corte"
              Then CONSULTAF1()
           EndIf
                                                    
           If Field()="Codigo do Documento"
              Then Seleciona_Opcoes("Codigo do Documento","CD")
           EndIf    
           
           If Field()="Codigo da Empresa"         
              Then Seleciona_Opcoes("Empresas","CR")
           Endif

           If Field()="Tipo de Movimento"
              Then Echo Normal
                   Echo Off
              
                   ShowPopup " Tipo de Movimento " @ 5,0
                     "~E~ntrada  " : " Requisio de Entrada " : "ENTRADA",
                     "~S~a¡da    " : " Requisio de Sa¡da   " : "SAIDA"
                   EndMenu
                   To OpcaoM

                   Echo off    

                   If OpcaoM<>"Esc" And OpcaoM<>"Cancelar"
                      Then [Tipo de Movimento     ]=SubStr(OpcaoM,1,1)
                           [Descricao do Movimento]=OpcaoM
                   EndIf
           EndIf    

           If Field()="Tipo de Operacao" And [Tipo de Movimento]<>"S"
              Then Echo Normal
                   Echo Off
              
                   ShowPopup " Tipo de Operacao " @ 5,16
                     "~D~evoluo       " : " Devoluo                " : "DEVOLUCAO",
                     "~T~ransferncia   " : " Transferncia            " : "TRANSFERENCIA",
                     "~P~roduo        " : " Produo/Pr¢pria         " : "PRODUCAO",
                     "~I~ndustrializao" : " Industrializao/Terceiro" : "INDUSTRIALIZADO",  
                     "~O~utras          " : " Outras                   " : "OUTRAS" 
                   EndMenu
                   To OpcaoO

                   Echo off    

                   If OpcaoO<>"Esc" And OpcaoO<>"Cancelar"
                      Then [Tipo de Operacao     ]=SubStr(OpcaoO,1,1)
                           [Descricao da Operacao]=OpcaoO
                   EndIf
           EndIf
           
           If Field()="Tipo de Operacao" And [Tipo de Movimento]<>"E"
              Then Echo Normal
                   Echo Off
              
                   ShowPopup " Tipo de Operacao " @ 5,16
                     "~C~onsumo       " : " Consumo       " : "CONSUMO",
                     "~D~evoluo     " : " Devoluo     " : "DEVOLUCAO",
                     "~T~ransferncia " : " Transferncia " : "TRANSFERENCIA",
                     "~O~utras        " : " Outras        " : "OUTRAS"
                   EndMenu
                   To OpcaoO

                   Echo off    

                   If OpcaoO<>"Esc" And OpcaoO<>"Cancelar"
                      Then [Tipo de Operacao     ]=SubStr(OpcaoO,1,1)
                           [Descricao da Operacao]=OpcaoO
                   EndIf
           EndIf              
   
      Case RetVal="F8" Or RetVal="DOWN":
           If CHAVEC=0
              Then CHAVEF=1
                   QuitLoop
           EndIf
      Case Retval="ESC": 
           Switch
           Case Field()="Codigo da Empresa":
                If QuerDesfazer("")
                   Then EXCLUSAO("Cabeca")
                        CHAVEC=9
                        QuitLoop
                EndIf
           Case Field()="Tipo de Movimento":
                Moveto [Codigo da Empresa  ]
           Case Field()="Tipo de Operacao":
                Switch
                  Case [Tipo de Movimento]="E" And [Tipo de Operacao]="I" : VSDG_TITULO = "Industrializado pelo Fornecedor"
                  Case [Tipo de Movimento]="S" And [Tipo de Operacao]="T" : VSDG_TITULO = "Transferido para Empresa"
                  OtherWise                                               : VSDG_TITULO = ""
                EndSwitch    
                Moveto [Tipo de Movimento  ]
           Case Field()="Codigo":
                Moveto [Tipo de Operacao]
           Case Field()="Numero do Documento":
                Moveto [Codigo do Documento]
           Case Field()="Codigo do Documento":          
                If REGRAFILTRO = "CORTE"
                   Then Moveto [Codigo da Empresa]
                   Else Moveto [Tipo de Operacao]      
                EndIf     
           Case Field()="Requisitante":
                If CHAVEC=0
                   Then If QuerDesfazer("")
                           Then Undo
                                CHAVEC=9
                                QuitLoop
                        EndIf
                   Else Left
                EndIf
           Case Field()="Numero do Corte" :
                Moveto [Requisitante]
           Otherwise:
                Left
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If QuerExcluir("desta requisio")
                      Then If Checa_Supervisor()
                              Then GRAVA_LOG=True
                                   EXCLUSAO("Cabeca")
                                   CHAVEC=9
                                   QuitLoop
                           EndIf        
                   EndIf
           EndIf
      Case Retval="ENTER":
           Switch
           Case Field()="Codigo da Empresa": 
                If Not Checa_Opcoes("Empresas",[])
                   Then Mensagem("Empresa inv lida !")
                        Loop     
                   Else If Not Carrega_Parametros()
                           Then Loop
                        EndIf     
                        If REGRAFILTRO = "CORTE"
                           Then Moveto [Codigo do Documento]
                           Else Moveto [Tipo de Movimento]
                        EndIf
                EndIf              
           Case Field()="Tipo de Movimento":
                If [] <> "E" And [] <> "S"
                   Then FastMsg("Movimento inv lido !")
                        Loop
                EndIf
                Switch
                  Case []="E" : [Descricao do Movimento]="ENTRADA"
                  Case []="S" : [Descricao do Movimento]="SAIDA"
                EndSwitch  
                Moveto [Tipo de Operacao]
           Case Field()="Tipo de Operacao":
                If [Tipo de Movimento]="E"
                   Then If []<>"D" And 
                           []<>"O" And 
                           []<>"P" And
                           []<>"I" And
                           []<>"T" And 
                           []<>"M"
                           Then FastMsg("OperaÆo inv lida !")
                                Loop
                        EndIf
                   Else If []<>"C" And 
                           []<>"T" And 
                           []<>"D" And 
                           []<>"O" And 
                           []<>"E" And 
                           []<>"R" And 
                           []<>"V"
                           Then FastMsg("OperaÆo inv lida !")
                                Loop
                        EndIf
                EndIf                
                Switch
                  Case []="P" : [Descricao da Operacao]="PRODUCAO"
                  Case []="I" : [Descricao da Operacao]="INDUSTRIALIZACAO"
                  Case []="C" : [Descricao da Operacao]="CONSUMO"
                  Case []="T" : [Descricao da Operacao]="TRANSFERENCIA"
                  Case []="D" : [Descricao da Operacao]="DEVOLUCAO"
                  Case []="O" : [Descricao da Operacao]="OUTRAS"
                EndSwitch

                Switch
                  Case [Tipo de Movimento]="E" And [Tipo de Operacao]="I" : VSDG_TITULO = "Industrializado pelo Fornecedor"
                  Case [Tipo de Movimento]="S" And [Tipo de Operacao]="T" : VSDG_TITULO = "Transferido para Empresa"
                  OtherWise                                               : VSDG_TITULO = ""
                EndSwitch

                If []="T" And [Tipo de Movimento]="S" Or 
                   []="I" And [Tipo de Movimento]="E"                            
                   Then Moveto [Codigo]
                   Else Moveto [Codigo do Documento]
                        [Codigo]="" 
                        [Nome Fantasia Emitdest]=""
                        Resynckey
                EndIf
           Case Field()="Codigo":
                CAMPO="Codigo do Documento"
                If (([Tipo de Movimento]="S" And [Tipo de Operacao]="T") And ([]<>[Codigo da Empresa] And Not IsBlank([]))) Or
                    ([Tipo de Movimento]="E" And [Tipo de Operacao]="I")
                   Then Resynckey
                        If [Codigo]<>""
                           Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] To REG_DESTINAT
                                If RetVal
                                   Then [Nome Fantasia EmitDest] = REG_DESTINAT["Nome Fantasia EmitDest"]
                                EndIf
                        EndIf    
                        ;---- Entrada para IndustrializaÆo --------------------
                        If [Tipo de Movimento]="E" And [Tipo de Operacao]="I"
                           Then If [Codigo]<>""
                                   Then If [RqCabeca->Tipo de Movimento]="E" And [RqCabeca->Tipo de Operacao]="I" And REG_DESTINAT["Tipo"]<>"F"
                                           Then FastMsg("Deve ser informado um fornecedor v lido!")
                                                CAMPO="Codigo"        
                                        EndIf
                                   Else FastMsg("O fornecedor deve ser informado !")
                                        CAMPO="Codigo"
                                EndIf
                        EndIf
                        ;---- Entrada para Producao Pr¢pria --------------------
                        If [Tipo de Movimento]="S" And [Tipo de Operacao]="T" 
                           Then If REG_DESTINAT["Tipo"]<>"E"
                                   Then FastMsg("Deve ser informado uma empresa!")
                                        CAMPO="Codigo"
                                   Else If [Codigo da Empresa]=[Codigo]
                                           Then FastMsg("Deve ser informado uma empresa v lida!")
                                                CAMPO="Codigo"
                                        EndIF          
                                EndIf
                        EndIf                        
                        Release Vars REG_DESTINAT
                   Else Switch
                          Case [Tipo de Movimento]="S" And [Tipo de Operacao]="T" : FastMsg("Empresa destino inv lida !")
                                                                                    CAMPO="Codigo"
                          Case [Tipo de Movimento]="E" And [Tipo de Operacao]="I" : FastMsg("Fornecedor no informado !")
                                                                                    CAMPO="Codigo"
                        EndSwitch  
                        [Codigo]="" 
                        [Nome Fantasia EmitDest]=""
                EndIf
                Moveto Field CAMPO
           Case Field()="Codigo do Documento":
                If Not Checa_Opcoes("Codigo do Documento",[])
                   Then [Tipo do Documento  ]=""
                        [Serie do Documento ]=""
                        [Numero do Documento]=""
                        Mensagem("Codigo do Documento Inv lido !")
                        Loop
                EndIf
                Moveto [Numero do Documento]
           Case Field()="Numero do Documento":
                If IsBlank([]) Then Loop EndIf
                If CHAVEC=1
                   Then Moveto [Data de Ocorrencia]
                   Else Moveto [Requisitante]
                EndIf                               
           Case Field()="Data de Ocorrencia":
                If IsBlank([])
                   Then []=Today()
                EndIf
                If Not IntervaloDataMod([Data de Ocorrencia],"REQUISICAO")
                   Then If not Checa_Supervisor() Then Loop EndIf
                EndIf
                Moveto [Requisitante]
           Case Field()="Requisitante": 
                If REGRAFILTRO = "CORTE" And CHAVEC = 1
                   Then Moveto [Numero do Corte] 
                   Else CHAVEF=0
                        FACA_CHAVEI = True
                        QuitLoop
                EndIf
           Case Field()="Numero do Corte" :
                If IsBlank([])
                   Then Mensagem(" necess rio informar o n£mero do corte !")
                        Loop
                EndIf
                If CHAVEC=1
                   Then GetRecord "\\Sistemas\\Faccao\\Cfacc" [Numero do Corte] To CORTE
                        If RetVal
                           Then If CORTE["Situacao_Programacao"]="FINALIZADA"
                                   Then ConfGeral("Situao do Corte FINALIZADA////Deseja continuar com a requisio ?")            
                                        If Ok<>"S"
                                           Then Loop
                                       EndIf
                                EndIf  
                           Else Mensagem("Corte no localizdo !")
                                Loop           
                        EndIf
                EndIf 
                FACA_CHAVEI = True
                CHAVEF=0
                QuitLoop     
           EndSwitch
      EndSwitch
EndWhile
EndProc   ; (DigitaC)

;*******************************************************************************
;* Rotina para Verificar Sistema GeradorDigitacao da Cabeca                    *
;*******************************************************************************
Proc Sistema_Gerador()
Private AUX

Switch
  Case [Sistema Gerador] = "MA" : AUX = "MANUAL"
  Case [Sistema Gerador] = "MG" : AUX = "MANUAL MODO GRADE"
  Case [Sistema Gerador] = "NE" : AUX = "NOTA ENTRADA"
  Case [Sistema Gerador] = "CO" : AUX = "CORTE"
  Case [Sistema Gerador] = "RM" : AUX = "REQUISI¶O MERCADORIA"
  Case [Sistema Gerador] = "PC" : AUX = "CONFECÇO PRODUÇO CORTE"
  Case [Sistema Gerador] = "PF" : AUX = "CONFECÇO PROGRAMAÇO INTERNO/EXTERNO"
  Case [Sistema Gerador] = "PR" : AUX = "CONFECÇO PROBLEMA" 
  Case [Sistema Gerador] = "RF" : AUX = "CONFECÇO PRODUÇO INTERNO/EXTERNO"
  Case [Sistema Gerador] = "RR" : AUX = "CONFECÇO PRODUÇO INTERNO/EXTERNO"
  Case [Sistema Gerador] = "FT" : AUX = "FATURAMENTO"
  
  Case [Sistema Gerador] = "MN" : AUX = "MANAUL COM NOTA DE ENTRADA"
  Case [Sistema Gerador] = "IX" : AUX = "XML/NOTA DE ENTRADA"
  Case [Sistema Gerador] = "NX" : AUX = "XML/NOTA DE ENTRADA"

  Case [Sistema Gerador] = "DC" : AUX = "FUNDIÇO PROGRAMAÇO"
  Case [Sistema Gerador] = "IM" : AUX = "IMPORTADO"            ;ImportaÆo de um sistema para outro TransfRQ  
  Otherwise                     : AUX = ""  
EndSwitch


if ([Codigo do Documento]="REQ" And [Tipo do Documento]="REQ") And
   ([Numero do Documento]="BALANCO" Or [Numero do Documento]="ZERAMENTO") And
   (SubStr([Descricao Requisitante],1,15)="BALANCO ESTOQUE" Or SubStr([Descricao Requisitante],1,12)="ZERA ESTOQUE")
   then AUX = "BL - BALANO"
endif

Return AUX

EndProc ;Sistema_Gerador()

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

VSVRMERC = 0
VSQTDE   = 0
VCITENS  = 0

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

endproc 


;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc CHAVEI()
While True
  Moveto "Rqitem"
  
  SomatoriaDosItens()
  
  Moveto "Rqcabeca"
  [Valor Total     ]=VSVRMERC
  [Quantidade Total]=VSQTDE

  Moveto "Rqitem"
  Moveto [Sequencia do Lancamento]
  End
  ITEM = [Sequencia do Lancamento]
  Down
  Moveto [Sequencia do Lancamento]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  
  PARAM_RQMATPRI = False
                 
  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True
        Moveto "Rqitem"
        Moveto [Sequencia do Lancamento]

        Prompt " Esc=Retornar  F3=Ver Ficha  F7=Paginar  Alt+F=Funes  PgDn=Finalizar  "
                     
        Wait Field
             Until "ESC","ENTER","F3","F4","F7","HOME","UP","PGUP","PGDN","F2","F5","F9",-33

        If RetVal=-33
           Then Echo Normal
                Echo Off
                ShowPopup " Funes " CENTERED
                  "F4  ~R~ecalcular consumo  " : " Recalcular consumo conforme F¢rmula atual   " : "F4",
                  "F5  C~o~nsulta            " : " Consultar Tabela Preo                      " : "F5",
                  "F7  ~N~ota de Entrada     " : " Carregar itens da Nota de Entrada           " : "F7",
                  "F9  ~A~tiva CDBarras      " : " Ativa Leitura Codigo de Barras              " : "F9",
                  Separator,
                  "~C~ancelar                " : " Cancelar a Operao                         " : "CANCELAR"
                EndMenu
                To MenuVar
                echo off
                If MenuVar="CANCELAR" or MenuVar="Esc"
                   Then Loop
                EndIf

                RetVal=MenuVar
        EndIf
        Switch      
        Case Retval="F7" :
             Del
             Nota_Entrada()
             QuitLoop
             
        Case Retval="F9" Or Retval="F2": 
             Del
             CDBarras()
             QuitLoop
             
        Case RetVal="F3" : 
             Del
             Moveto [Sequencia do Lancamento]
             If RecordStatus("New")
                Then MENSAGEM("Sem Item p/ ver !")
                     QuitLoop
             EndIf
             Opcao_Ver=True
             CHAVEI=0
             Home
             ITEM=[Sequencia do Lancamento]
             Inicia_Registro()
             DigitaI()
             QuitLoop
             
        Case Retval="F4": 
             Del
             Recalc_Consumo()
             QuitLoop
             
        Case Retval="F5":
        TABANT=Table()
        If [RqCabeca->Tipo de Movimento]="S" And
           [RqCabeca->Tipo de Operacao ]="T"
           Then COD_EMPRESA=[RqCabeca->Codigo]
           Else COD_EMPRESA=[RqCabeca->Codigo da Empresa]
        EndIf         
        VSDGEMPRESA=COD_EMPRESA
        Del
        Moveto "RqCabeca"
        UnLockRecord
        KeyPress "F7"
        IsLockRecord()
        OP_INSERT_ITEM=True

        Play "SW_CONSR"
        
        Moveto "RqCabeca"
        Moveto [Numero do Lancamento]
        Locate LANCTO
        KeyPress "F7"
        
        IsLockRecord()
        Moveto "RqItem"        
                       
        If Sw_Item_Pesquisado="" Then QuitLoop EndIf
       
        While True
          Moveto [Sequencia do Lancamento]
          End
          NITEM = [Sequencia do Lancamento]
          Down
          Moveto [Sequencia do Lancamento]
          Seta_Sequencia(NITEM,False)
          If IsLockRecord()
             Then Del
                  Loop
          EndIf
          QuitLoop
         EndWhile           
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf

         SEQIT=[Sequencia do Lancamento]
         CHAVEI=1
         [Numero do Lancamento   ]=LANCTO
         [Sequencia do Lancamento]=SEQIT
         [Codigo do Item         ]=Sw_Item_Pesquisado
         Item_Ins_Consulta=True
           
         ITEM = [Sequencia do Lancamento]
         Return
        Case RetVal="PGDN":   
             Del
             Moveto [Sequencia do Lancamento]
             If RecordStatus("New")=True
                Then MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item Ok !")
                     QuitLoop
             EndIf
             FACA_CHAVEC=False
             FACA_CHAVEI=False
             CHAVEI=9
             CHAVEF=8
             Return
        Case Retval="ESC": 
             Del
             If RecordStatus("New")=True
                Then CHAVEF=9
             EndIf
             FACA_CHAVEC = True
             FACA_CHAVEI = False
             CHAVEI=9
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               PAGINA_ESPECIAL("RqItem","MR")
               ITEM = [Sequencia do Lancamento]
               Switch
                 Case AVANCAR="S" : PARAM_RQMATPRI=True
                                    
                                    ;---- Array p/ guardar os itens da formula -----------
                                    CONT_FORMULA = 0
                                    DynArray ARRAY_FORMULA[]
                                    ITEM    = [Sequencia do Lancamento]
                                    COD_ITE = [Codigo do Item]
                                    
                                    TableAdd_Open("\\Sistemas\\Producao\\FormulaI")

                                    Moveto "\\Sistemas\\Producao\\FormulaI"
                                    Moveto [Codigo do Produto]
                                    Locate COD_ITE
                                    If ReTval
                                       Then While COD_ITE = [Codigo do Produto]
                                              CONT_FORMULA = CONT_FORMULA + 1
                                              ARRAY_FORMULA[CONT_FORMULA] = Format("W3",[Sequencia])+
                                                                            Format("W10",[Codigo do Produto])+
                                                                            Format("W10",[Codigo do Material])
                                              Skip
                                              If Eot() Then QuitLoop EndIf
                                            EndWhile
                                    EndIf    
                                    Moveto TabelaPrincipal
                                    TableAdd_Close("Requisicao",ANT_TAB,ANT_FIE)
                                    Moveto "RqItem"
                                    Moveto [Sequencia do Lancamento]
                                    Locate ITEM
                                    Release Vars CONT_FORMULA,COD_ITE
                                    ;-----------------------------------------------------
                                    
                                    While True
                                      CHAVEV()
                                      If CHAVEV=9  
                                         Then Atualiza_Menu("Limpar")
                                              Atualiza("Limpar")
                                              QuitLoop  
                                      EndIf
                                      If CHAVEV=7  
                                         Then Loop  
                                      EndIf
                                      If CHAVEV<>8
                                         Then ITEM=[Sequencia Materia Prima]
                                              Controla_EdicaoV() 
                                      EndIf
                                    EndWhile
                                    PARAM_RQMATPRI=False
                                    Moveto "Rqitem"
                                    Moveto [Sequencia do Lancamento]                                    
                 Case EDITAR="S"  : CHAVEI=0
                                    Controla_EdicaoI()
                 Case EXCLUIR="S" : If QuerExcluir("")
                                       Then If Checa_Supervisor()
                                                Then GRAVA_LOG=True
                                                     EXCLUSAO("Item")
                                                     Moveto "RqItem"
                                            EndIf
                                       Else UnLockRecord
                                     EndIf
                 OtherWise        : QuitLoop
               EndSwitch

               SomatoriaDosItens()

               Moveto "Rqcabeca"
               [Valor Total     ]=VSVRMERC
               [Quantidade Total]=VSQTDE
               
               Moveto "Rqitem"

               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ENTER": 
             If Not Seta_Sequencia(ITEM,True)
                Then Del
                     QuitLoop
             EndIf
             ITEM=[]
             Del
             Locate LANCTO,ITEM
             If Retval
                Then CHAVEI=0
                Else CHAVEI=1
                     End Down
                     [Numero do Lancamento   ] = LANCTO
                     [Sequencia do Lancamento] = ITEM
                     UnLockRecord
                     Locate LANCTO,ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)
                            
;*******************************************************************************
;* Rotina para Localizar Registro Item - RqMatPri                              *
;*******************************************************************************
Proc CHAVEV()

While True
  Moveto "Rqmatpri"
  
  SomatoriaDosItens()
  
  Moveto "Rqmatpri"
  Moveto [Sequencia Materia Prima]
  End
  ITEM = [Sequencia Materia Prima]
  Down
  Moveto [Sequencia Materia Prima]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  
  PARAM_RQMATPRI = True
                 
  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While true
        Moveto "Rqmatpri"
        Moveto [Sequencia Materia Prima]

        Prompt " Esc=Retornar  F3=Ver Ficha  F7=Paginar  "
                     
        Wait Field
             Until "ESC","ENTER","F3","F4","F7","HOME","UP","PGUP","F2","F5","F9",-33,-115,-116

        Switch
        Case Retval=-115 :  
             Del
             Atualiza_Menu("Limpar")
             Atualiza("Limpar")
             CHAVEV=9
             Return            
        Case RetVal="F3": 
             Del
             Moveto [Sequencia Materia Prima]
             If RecordStatus("New")
                Then MENSAGEM("Sem Item p/ ver !")
                     QuitLoop
             EndIf
             Opcao_Ver=True
             CHAVEV=0
             Home
             ITEM=[Sequencia Materia Prima]
             Inicia_RegistroV()
             DIGITAV()
             QuitLoop
             
        Case RetVal="PGDN":   
             Del
             Atualiza_Menu("Limpar")
             Atualiza("Limpar")
             CHAVEV=9
             Return
        Case Retval="ESC": 
             Del
             Atualiza_Menu("Limpar")
             Atualiza("Limpar")
             CHAVEV=9
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               PAGINA("Rqmatpri","MR")
               ITEM = [Sequencia Materia Prima]
               If EDITAR="S"
                  Then CHAVEV=0
                       CopyToArray REG_DIGITAV
                       Controla_EdicaoV()
                       Verifica_Alteracao()
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then If Checa_Supervisor()
                                          Then GRAVA_LOG=True
                                               EXCLUSAO("Item_MatPri")
                                               Moveto "Rqmatpri"
                                       EndIf
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
             
               SomatoriaDosItens()
             
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ENTER":
             If Not Seta_Sequencia(ITEM,True)
                Then Del
                     QuitLoop
             EndIf
             ITEM=[]
             Del
             Locate LANCTO,[RqItem->Sequencia do Lancamento],ITEM
             If Retval
                Then CHAVEV=0
                     CopyToArray REG_DIGITAV
                Else CHAVEV=1
                     End Down
                     [Numero do Lancamento   ] = LANCTO
                     [Sequencia Materia Prima]=[RqItem->Sequencia do Lancamento]
                     [Sequencia Materia Prima] = ITEM
                     [Ocorrencia de Alteracao] = "N"
                     UnLockRecord
                     Locate LANCTO,[RqItem->Sequencia do Lancamento],ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile      

EndProc ;CHAVEV()   

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5
TECLA="Esc=Retornar  "
MSG_CAMPO=""
Temp=True

If Not IsAssigned(PARAM_F1) Then PARAM_F1 = False 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
                 Case Evento["KeyCode"] = -81:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else Down
                      EndIf
               EndSwitch
               If Mover_Reg=True
                  Then ITEM=[Sequencia do Lancamento]
                       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"] = -65 Or Evento["KeyCode"] = "F7" :
          ModoLocalizarItem("SELECAO","","RQCABECA")
                     
     Case Evento["KeyCode"] = -59:
            If Campo="I_Codigo_Item" Or
               Campo="I_CCusto"
               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_CCusto"      Then Moveto [Codigo CCusto  ] EndIf

                    If ConsultaF1()
                       Then PARAM_F1 = True
                    EndIf
                    
                    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_Tipo_Item      = [Tipo do Item      ]
                            VSD_I_UN_Item        = [Unidade Interna   ]
                    EndIf
                              
                    If Campo="I_CCusto"
                       Then VSD_I_CCusto           = [Codigo CCusto   ]
                            VSD_I_Descricao_CCusto = LTrim([Descricao CCusto])
                    Endif
                    Moveto "Rqitem"
                    RefreshDialog
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="I_Codigo_Item":
                  If QuerDesfazer("")
                     Then CHAVEI=9
                          Del
                          CancelDialog
                  EndIf
             Case Campo="I_Quantidade":
                  If CHAVEI=1
                     Then Campo="I_Codigo_Item"
                     Else If QuerDesfazer("")
                             Then CHAVEI=9
                                  CopyFromArray RegItem
                                  CancelDialog
                          EndIf
                  Endif
             Case Campo="I_Custo_Unitario":
                  Campo="I_Quantidade"
             Case Campo="I_CCusto":
                  Campo="I_Custo_Unitario"
             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 Not IsBlank(VSD_I_Codigo_Item)
                     Then MSG="Item no localizado no cadastro de itens!"
                          FAZ_ROTINA = False
                           
                          VSD_I_Codigo_Item = Item_Localizador(VSD_I_Codigo_Item)
                          Achou_Item = True
                          
                          Moveto [Codigo do Item]
                          Ativa_Lookup()
                          ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item,"")
                          If RetVal
                             Then VSD_I_Codigo_Item=[Codigo do Item]
                             Else Achou_Item = False
                                  If LOCALIZA_CODIGO="LOC_CODBAR"
                                     Then KeyPress "ESC" 
                                          Dados_Item = VSD_I_Codigo_Item
                                          If Pega_Dados_CdBarras()
                                             Then Achou_Item=True
                                             Else MSG=""
                                          EndIf
                                  EndIf                 
                          EndIf 
                          KeyPress "ESC"
                          
                          If Achou_Item        
                             Then GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To REG_ITEM
                                  If RetVal
                                     Then FAZ_ROTINA = True
                                          VSD_I_Descricao_Item = REG_ITEM["Descricao do Item"]
                                          VSD_I_Tipo_Item      = REG_ITEM["Tipo do Item"]
                                          VSD_I_UN_Item        = REG_ITEM["Unidade Interna"]
                                          VSD_I_Referencia     = REG_ITEM["Referencia"]
                                          While True
                                            ;---- Tipo dos Itens no Consumo --------------
                                            If [RqCabeca->Tipo de Movimento]="E"                                       And
                                               ([RqCabeca->Tipo de Operacao]="P" Or [RqCabeca->Tipo de Operacao ]="I") And 
                                               REG_ITEM["Tipo do Item"]<>"P"                                           And
                                               REG_ITEM["Tipo do Item"]<>"S"                                                                                            
                                               Then If SYS_CODIGO_CLIENTE<>"0290" And SYS_CODIGO_CLIENTE<>"0325"
                                                       Then FAZ_ROTINA = False 
                                                            MSG="O item "+REG_ITEM["Codigo do Item"]+" "+REG_ITEM["Descricao do Item"]+
                                                                "  do tipo //"+REG_ITEM["Descricao Tipo do Item"]+"!"
                                                            QuitLoop
                                                    EndIf                 
                                            EndIf
                                  
                                            If REG_ITEM["Inativo"]="S"
                                               Then FAZ_ROTINA = False
                                                    MSG="Este item: //"+REG_ITEM["Codigo do Item"]+"//"+
                                                         REG_ITEM["Descricao do Item"]+"// // esta inativo !"
                                                    QuitLoop
                                            EndIf        
                                           
                                            [Codigo do Item]=VSD_I_Codigo_Item
                                            Registro_Item("Ler")
                                            RefreshDialog
                                                                       
                                            MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
                                            ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)
  
                                            Moveto "SdEstq"
                                            Moveto [Codigo da Empresa]
  
                                            If [RqCabeca->Tipo de Movimento]="S" And
                                               [RqCabeca->Tipo de Operacao ]="T"
                                               Then Locate [RqCabeca->Codigo],[RqItem->Codigo do Item], ANO, MES
                                                    If Not RetVal
                                                       Then If Not Cria_Ficha([RqCabeca->Codigo],[RqItem->Codigo do Item],False)
                                                               Then Moveto "RqItem"
                                                                    Temp=False
                                                                    Return TEMP
                                                            EndIf
                                                    EndIf
                                            EndIf
  
                                            Locate [RqCabeca->Codigo da Empresa],[RqItem->Codigo do Item], ANO, MES
                                            If Not RetVal
                                               Then If Not Cria_Ficha([RqCabeca->Codigo da Empresa],[RqItem->Codigo do Item],False)
                                                       Then Moveto "RqItem"
                                                            Temp=False
                                                            Return TEMP
                                                    EndIf
                                            EndIf
  
                                            CUSTOMEDIO=[Custo Total Atual]/[Saldo Atual]
                                            If CUSTOMEDIO=0 Or IsBlank(CUSTOMEDIO)
                                              Then CUSTOMEDIO=[Ultimo Custo Atual]
                                            EndIf  
  
                                            If [RqCabeca->Tipo de Operacao ]="P" Or
                                               [RqCabeca->Tipo de Operacao ]="I" Or
                                               [RqCabeca->Tipo de Operacao ]="E" Or
                                               [RqCabeca->Tipo de Operacao ]="R"
                                               Then CUSTOMEDIO=[Preco de Custo]
                                            EndIf
  
                                            Moveto "RqItem"
                                            [Custo Unitario]    =NDecimal(CUSTOMEDIO,5)
                                            VSD_I_Custo_Unitario=NDecimal(CUSTOMEDIO,5)
  
                                            Campo="I_Quantidade"
                                            QuitLoop
                                          EndWhile
                                  EndIf
                             Else 
                           EndIf
                           If Not FAZ_ROTINA
                              Then If MSG<>"" Then Mensagem(MSG) EndIf
                                   VSD_I_Codigo_Item   =""
                                   VSD_I_Descricao_Item=""
                                   VSD_I_UN_Item       =""
                                   VSD_I_CF_Item       =""
                                   VSD_I_CST_Item      =""
                                   VSD_I_Tipo_Item     =""
                           EndIf
                           Echo Off
                  EndIf
             Case Campo="I_Quantidade": 
                  VSD_I_Quantidade=ControlValue("I_Quantidade")
                  GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To FRACIONADO
                  If RetVal
                     Then If FRACIONADO["Fracionado"]="N" And (VSD_I_Quantidade-Int(VSD_I_Quantidade))<>0
                             Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                             Else [Quantidade]=VSD_I_Quantidade
                                  If CHECA_ESTOQUE() And CHECA_FORMULA()
                                     Then Campo="I_Custo_Unitario"
                                  EndIf
                          EndIf
                  EndIf
                  Release Vars FRACIONADO               
             Case Campo="I_Custo_Unitario":
                  VSD_I_Custo_Unitario=ControlValue("I_Custo_Unitario")
                  If VSD_I_Quantidade>0
                     Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
                     Else If VSD_I_Custo_Unitario>0
                             Then VSD_I_Custo_Total=VSD_I_Custo_Unitario
                          EndIf
                  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 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_I_CCusto          =""
                                          VSD_I_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else VSD_I_CCusto          =[Codigo CCusto]
                                          VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                                          KeyPress "ESC"
                                          [Codigo CCusto]       =VSD_I_CCusto
                                          Campo="I_Flag"
                                  Endif
                             Else Mensagem("Centro de Custo no 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"  :  
                  If CHAVEI=0
                     Then If VSD_I_Quantidade_Aux=VSD_I_Quantidade
                             Then CHAVEI=7 
                             Else Verifica_Alteracao_Finalizacao()
                          EndIf
                  EndIf
                  RefreshDialog Registro_Item("Gravar")
                  AcceptDialog                               
           EndSwitch
           Temp=False
   EndSwitch
EndIf
SelectControl Campo
TECLA="Esc=Retornar  "

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

Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="I_Descricao_Item":
       MSGCAMPO="Descrio 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_Custo_Unitario":
       MSGCAMPO="Custo Unitario"
  Case Campo="I_Custo_Total":
       MSGCAMPO="Custo Total"
  Case Campo="I_CCusto":
       MSGCAMPO="Centro de Custo"
  Case Campo="I_Codigo_Item" : 
       MSGCAMPO=LOCALIZAR_POR +", [F1]Consultar tabela  [F7]Alterar modo localizar"
  OtherWise:
       MSGCAMPO=""
EndSwitch

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

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

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

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog2(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5
TECLA="Esc=Retornar  "
MSG_CAMPO=""
Temp=True

If Not IsAssigned(PARAM_F1) Then PARAM_F1 = False EndIf 
                     
If INICIO_DIALOG
   Then Switch
          Case CHAVEV=0 : Campo="I_Quantidade"
          Case CHAVEV=1 : Campo="I_Codigo_Item"    
        EndSwitch
        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
                 Case Evento["KeyCode"] = -81:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else Down
                      EndIf
               EndSwitch
               If Mover_Reg=True
                  Then ITEM=[Sequencia Materia Prima]
                       Inicia_RegistroV()   
               EndIf
           EndSwitch
       Case Evento["KeyCode"] = 9 Or
            Evento["KeyCode"] = -15:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then CHAVEV=8
                            CancelDialog
                    EndIf
            EndIf                
     Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
          ModoLocalizarItem("SELECAO","","RQCABECA")
                      
       Case Evento["KeyCode"] = -59:
            If Campo="I_Codigo_Item"  Or
               Campo="I_CCusto"       Or
               Campo="I_Codigo_Item2"
               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_CCusto"       Then Moveto [Codigo CCusto  ] EndIf
                    If Campo="I_Codigo_Item2" Then Moveto [Codigo do Item ] EndIf

                    If ConsultaF1()
                       Then PARAM_F1 = True
                    EndIf
                    
                    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_Tipo_Item      =[Tipo do Item      ]
                            VSD_I_UN_Item        =[Unidade Interna   ]
                    EndIf
                    
                    If Campo="I_Codigo_Item2"
                       Then VSD_I_Codigo_Item2    = [Codigo do Item]
                            VSD_I_Descricao_Item2 = [Descricao do Item ]
                            VSD_I_Tipo_Item2      = [Tipo do Item      ]
                            VSD_I_UN_Item2        = [Unidade Interna   ]
                    EndIf                                        
                    
                    Moveto "RqMatPri"
                    RefreshDialog
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="I_Codigo_Item":
                  If QuerDesfazer("")
                     Then CHAVEV=9   
                          Del
                          CancelDialog
                  EndIf
             Case Campo="I_Quantidade":
                  If CHAVEV=1
                     Then Campo="I_Codigo_Item"
                     Else If QuerDesfazer("")
                             Then CHAVEV=9   
                                  CopyFromArray RegItem
                                  CancelDialog
                          EndIf
                  Endif
             Case Campo="I_Custo_Unitario":
                  Campo="I_Quantidade"
             Case Campo="I_Codigo_Item2":
                  Campo="I_Quantidade"
             Case Campo="I_Flag":
                  If ITEM_FORMULA
                     Then Campo="I_Quantidade"
                     Else Campo="I_Codigo_Item2"
                  EndIf   
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13: 
           Switch
             Case Campo="I_Codigo_Item":
                  VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                  If Not IsBlank(VSD_I_Codigo_Item)
                     Then MSG="Item no localizado/cadastrado !"
                          AUX_SEQ = [Sequencia Materia Prima]
                          FAZ_ROTINA=False
                          
                          VSD_I_Codigo_Item = Item_Localizador(VSD_I_Codigo_Item)
                          Moveto [Codigo do Item]
                          Ativa_Lookup()
                          ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item,"")
                          If RetVal
                             Then VSD_I_Codigo_Item=[Codigo do Item]
                                  KeyPress "ESC"
                                  FAZ_ROTINA=True
                             Else KeyPress "ESC"      
                          EndIf   
                          If FAZ_ROTINA
                             Then GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To REG_ITEM
                                  If RetVal
                                     Then FAZ_ROTINA=False
                                     ELse VSD_I_Descricao_Item = REG_ITEM["Descricao do Item"]
                                          VSD_I_Tipo_Item      = REG_ITEM["Tipo do Item"]
                                          VSD_I_UN_Item        = REG_ITEM["Unidade Interna"]
                                          VSD_I_Referencia     = REG_ITEM["Referencia"]
                                          While True
                                            ;---- Tipo dos Itens no Consumo ----
                                            If REG_ITEM["Tipo do Item"]<>"A" And
                                               REG_ITEM["Tipo do Item"]<>"E" And
                                               REG_ITEM["Tipo do Item"]<>"M" And
                                               REG_ITEM["Tipo do Item"]<>"O" And
                                               REG_ITEM["Tipo do Item"]<>"T" And
                                               REG_ITEM["Tipo do Item"]<>"S"
                                               Then FAZ_ROTINA = False
                                                    MSG="O item "+REG_ITEM["Codigo do Item"]+" "+REG_ITEM["Descricao do Item"]+
                                                        "  do tipo //"+REG_ITEM["Descricao Tipo do Item"]
                                                    QuitLoop
                                            EndIf          

                                            If REG_ITEM["Inativo"]="S"
                                               Then FAZ_ROTINA=False
                                                    MSG="Este item: "+REG_ITEM["Codigo do Item"]+" "+REG_ITEM["Descricao do Item"]+" est  inativo!"
                                                    QuitLoop
                                            EndIf        
                                                  
                                            Home
                                            Scan
                                              If AUX_SEQ <> [Sequencia Materia Prima]
                                                 Then If VSD_I_Codigo_Item=[Codigo do Item]
                                                         Then FAZ_ROTINA=False
                                                              MSG="O item "+VSD_I_Codigo_Item+
                                                                  " foi informado na sequencia "+StrVal([Sequencia Materia Prima])
                                                              QuitLoop
                                                      EndIf
                                              EndIf               
                                            EndScan
                                            Moveto [Sequencia Materia Prima]
                                            Locate AUX_SEQ
                                            If Not FAZ_ROTINA Then QuitLoop EndIf
                                            
                                            [Codigo do Item]=VSD_I_Codigo_Item
                                            Registro_ItemV("Ler")
                                            RefreshDialog
                                            
                                            MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
                                            ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)
                                                         
                                            Moveto "SdEstq"
                                            Moveto [Codigo da Empresa]   
                                            If [RqCabeca->Tipo de Movimento]="S" And
                                               [RqCabeca->Tipo de Operacao ]="T"
                                               Then Locate [RqCabeca->Codigo],[Rqmatpri->Codigo do Item],ANO,MES
                                                    If Not RetVal
                                                       Then If Not Cria_Ficha([RqCabeca->Codigo],[Rqmatpri->Codigo do Item],False)
                                                               Then Moveto "RqMatPri"
                                                                    Temp=False
                                                                    Return TEMP
                                                            EndIf
                                                    EndIf
                                            EndIf
                                            Locate [RqCabeca->Codigo da Empresa],[Rqmatpri->Codigo do Item],ANO,MES
                                            If Not RetVal
                                               Then If Not Cria_Ficha([RqCabeca->Codigo da Empresa],[Rqmatpri->Codigo do Item],False)
                                                       Then Moveto "RqMatPri"
                                                            Temp=False
                                                            Return TEMP
                                                    EndIf
                                            EndIf
    
                                            CUSTOMEDIO=[Custo Total Atual]/[Saldo Atual]
                                            If CUSTOMEDIO=0 Or IsBlank(CUSTOMEDIO)
                                              Then CUSTOMEDIO=[Ultimo Custo Atual]
                                            EndIf  
                                                                              
                                            If [RqCabeca->Tipo de Operacao ]="P" Or
                                               [RqCabeca->Tipo de Operacao ]="I" Or
                                               [RqCabeca->Tipo de Operacao ]="E" Or
                                               [RqCabeca->Tipo de Operacao ]="R"
                                               Then CUSTOMEDIO=[Preco de Custo]
                                            EndIf
    
                                            Moveto "RqMatPri"
                                            [Custo Unitario]    =NDecimal(CUSTOMEDIO,5)
                                            VSD_I_Custo_Unitario=NDecimal(CUSTOMEDIO,5)
    
                                            Campo="I_Quantidade"   
                                            QuitLoop
                                          EndWhile
                                  EndIf 
                           EndIf
                           
                           If Not FAZ_ROTINA
                              Then Mensagem(MSG)
                                   VSD_I_Codigo_Item   =""
                                   VSD_I_Descricao_Item=""
                                   VSD_I_UN_Item       =""
                                   VSD_I_CF_Item       =""
                                   VSD_I_CST_Item      =""
                                   VSD_I_Tipo_Item     =""
                           EndIf
                           Echo Off  
                  EndIf
             Case Campo="I_Quantidade":
                  VSD_I_Quantidade=ControlValue("I_Quantidade")
                  If Not IsBlank(VSD_I_Quantidade)
                     Then Verifica_Item_Formula(VSD_I_Codigo_Item)   
                          GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To FRACIONADO
                          If RetVal
                             Then If FRACIONADO["Fracionado"]="N" And (VSD_I_Quantidade-Int(VSD_I_Quantidade))<>0
                                     Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                                     Else [Quantidade]=VSD_I_Quantidade
                                          If CHECA_ESTOQUEV()
                                             Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario     
                                                  If ITEM_FORMULA
                                                     Then Campo="I_Flag"
                                                     Else Campo="I_Codigo_Item2"
                                                  EndIf 
                                          EndIf
                                  EndIf
                          EndIf
                          Release Vars FRACIONADO
                  EndIf    
             Case Campo="I_Codigo_Item2":   
                  VSD_I_Codigo_Item2=ControlValue("I_Codigo_Item2")
                  If Not IsBlank(VSD_I_Codigo_Item2)
                     Then FAZ_ROTINA=False
                          MSG="Item no localizado/cadastrado !"
                          VSD_I_Codigo_Item2 = Item_Localizador(VSD_I_Codigo_Item2)
                          Moveto [Codigo do Item]
                          Ativa_Lookup()
                          ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item2,"")
                          If RetVal
                             Then VSD_I_Codigo_Item2 = [Codigo do Item]
                                  FAZ_ROTINA=True
                                  KeyPress "ESC"
                             Else KeyPress "ESC"                          
                          EndIf
                          If FAZ_ROTINA
                             Then GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item2 To REG_ITEM
                                  If Not RetVal
                                     Then FAZ_ROTINA = False  
                                     ELse VSD_I_Descricao_Item2 = REG_ITEM["Descricao do Item"]
                                          VSD_I_Tipo_Item2      = REG_ITEM["Tipo do Item"]
                                          VSD_I_UN_Item2        = REG_ITEM["Unidade Interna"]
                                          While True
                                            ;---- Tipo dos Itens no Consumo ----
                                            If REG_ITEM["Tipo do Item"]<>"A" And
                                               REG_ITEM["Tipo do Item"]<>"E" And
                                               REG_ITEM["Tipo do Item"]<>"M" And
                                               REG_ITEM["Tipo do Item"]<>"O" And
                                               REG_ITEM["Tipo do Item"]<>"T" And
                                               REG_ITEM["Tipo do Item"]<>"S"
                                               Then FAZ_ROTINA = False
                                                    MSG="O item "+REG_ITEM["Codigo do Item"]+" "+REG_ITEM["Descricao do Item"]+
                                                        "  do tipo //"+REG_ITEM["Descricao Tipo do Item"]
                                                    QuitLoop
                                            EndIf  
                                            
                                            If VSD_I_Codigo_Item2 = VSD_I_Codigo_Item
                                               Then FAZ_ROTINA = False
                                                    MSG="Informe corretamente o item substitu¡do do consumo da f¢rmula!"
                                                    QuitLoop
                                            EndIf       
                 
                                            If REG_ITEM["Inativo"]="S"
                                               Then FAZ_ROTINA=False
                                                    MSG="Este item: "+REG_ITEM["Codigo do Item"]+" "+REG_ITEM["Descricao do Item"]+" est  inativo !"
                                                    QuitLoop
                                            EndIf
                 
                                            Verifica_Item_Formula2(VSD_I_Codigo_Item2)
                                            If Not ITEM_FORMULA2
                                               Then FAZ_ROTINA=False
                                                    MSG=Format("W65"," obrigat¢rio informar um item de substituio que exista na")+"//"+ 
                                                        Format("W65","seguinte f¢rmula:                                           ")+"//"+
                                                        Format("W65","- "+[RqItem->Codigo do Item]+" "+[RqItem->Descricao do Item])
                                                    QuitLoop
                                            EndIf
                                            
                                            [Codigo do Item Substituto]=VSD_I_Codigo_Item
                                            RefreshDialog
                                            Campo="I_Flag"
                                            QuitLoop
                                          EndWhile
                                  EndIf 
                           EndIf
                           If Not FAZ_ROTINA
                              Then Mensagem(MSG)
                                   VSD_I_Codigo_Item2   =""
                                   VSD_I_Descricao_Item2=""
                                   VSD_I_UN_Item2       =""
                                   VSD_I_CF_Item2       =""
                                   VSD_I_CST_Item2      =""
                                   VSD_I_Tipo_Item2     =""
                           EndIf
                           Echo Off  
                      Else VSD_I_Descricao_Item2=""
                           VSD_I_UN_Item2       =""
                           VSD_I_CF_Item2       =""
                           VSD_I_CST_Item2      =""
                           VSD_I_Tipo_Item2     =""
                           MSG=Format("W65"," obrigat¢rio informar um item de substituio que exista na")+"//"+ 
                               Format("W65","seguinte f¢rmula:                                           ")+"//"+
                               Format("W65","- "+[RqItem->Codigo do Item]+" "+[RqItem->Descricao do Item])
                           Mensagem(MSG)
                  EndIf 
             Case Campo="I_Flag"  : AcceptDialog
           EndSwitch
           RefreshDialog Registro_ItemV("Gravar")    
           Temp=False
   EndSwitch
EndIf
SelectControl Campo
TECLA="Esc=Retornar  "

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

Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="I_Descricao_Item":
       MSGCAMPO="Descrio 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_Custo_Unitario":
       MSGCAMPO="Custo Unitario"
  Case Campo="I_Codigo_Item" : 
       MSGCAMPO=LOCALIZAR_POR +", [F1]Consultar tabela  [F7]Alterar modo localizar"
  Case Campo="I_Codigo_Item2" :     
       MSGCAMPO="C¢digo do Item Substitu¡do do Consumo da F¢rmula"       
  Case Campo="I_Flag":
       MSGCAMPO="ENTER=Prosseguir"
  OtherWise:
       MSGCAMPO=""
EndSwitch

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

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

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

EndProc  ;Item_Dialog2()

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Sequencia do Lancamento]
Locate [RqCabeca->Numero do Lancamento],ITEM
CopyToArray RegItem

Echo Normal
Echo Off

QUANTANT = [Quantidade ]
CUSTOANT = Round([Custo Total],2)
Registro_Item("Ler")

EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_RegistroV()
INICIO_DIALOG=True

Moveto [Sequencia Materia Prima]
Locate [RqCabeca->Numero do Lancamento],[RqItem->Sequencia do Lancamento],ITEM
CopyToArray RegItem

Echo Normal
Echo Off

QUANTANTV = [Quantidade ]
CUSTOANTV = Round([Custo Total],2)
       
Registro_ItemV("Ler")
       
EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DIGITAI()
ModoLocalizarItem("","","")
Showdialog "Dados do Item [     ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","F7","ClearArea","HOME","END","PGDN","PGUP"
     @ 12,03 height 08 width 73

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

   @ 00,03 ?? LOCALIZAR_POR

   Label  @ 00,01 ">" 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,55 "Referncia" 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 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 03,21 Width 12 "N" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 02,34 "Ct.Total" For "I_Custo_Total"
   Accept @ 03,34 Width 12 "$" picture "#*#.[##]" Tag "I_Custo_Total" to VSD_I_Custo_Total

   Label  @ 04,00 "Centro Custo" For "I_CCusto"
   Accept @ 05,01 Width 10 "A7" picture "###.###" Tag "I_CCusto" to VSD_I_CCusto
   Accept @ 05,11 Width 31 "A25" picture "!*!" Tag "I_Descricao_CCusto" to VSD_I_Descricao_CCusto
   Accept @ 05,43 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 Digitacao Item                                                  *
;*******************************************************************************
Proc DIGITAV()
Showdialog "Dados do Item de Consumo [     ]" Proc "Item_Dialog2"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","F7","ClearArea","HOME","END","PGDN","PGUP"
     @ 12,03 height 8 width 73

   Accept @ -01,45 Width 5 "A2" Tag "I_Seq" To VSD_I_SEQ
   
   @ 00,03 ?? LOCALIZAR_POR

   Label  @ 00,01 ">" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,15 "Descricao do 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,55 "Referncia" 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 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 03,21 Width 12 "N" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 02,34 "Ct.Total" For "I_Custo_Total"
   Accept @ 03,34 Width 12 "$" picture "#*#.[##]" Tag "I_Custo_Total" to VSD_I_Custo_Total
 
   Label  @ 04,01 "Item Substitu¡do do Consumo da F¢rmula" For "I_Codigo_Item2"
   Accept @ 05,01 Width 14 "A25" picture "!*!" Tag "I_Codigo_Item2" to VSD_I_Codigo_Item2
   Label  @ 04,100 "" For "I_Descricao_Item2"
   Accept @ 05,15 Width 34 "A30" picture "!*!" Tag "I_Descricao_Item2" to VSD_I_Descricao_Item2
   Label  @ 04,100 "" For "I_UN_Item2"
   Accept @ 05,49 Width 05 "A2" picture "!*!" Tag "I_UN_Item2" to VSD_I_UN_Item2
   
   Accept @ 05,55 Width 1 "A1" picture "!*!" Tag "I_Flag" to VSD_I_Flag
Enddialog
Mouse Show
If RetVal
   Then Finaliza_RegistroV(True)
   Else Finaliza_RegistroV(False)
EndIf
EndProc ;DigitaV()

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

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_RegistroV(ok)
Private ok
If Ok
   Then Registro_ItemV("Gravar")
   Else If  CHAVEV=8
           Then CopyFromArray RegItem
                Exclusao("Item_MatPri")
        EndIf
EndIf

EndProc ;Finaliza_RegistroV()

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

       [Quantidade           ]=VSD_I_Quantidade
       [Unidade Interna      ]=VSD_I_UN_Item
       [Custo Unitario       ]=VSD_I_Custo_Unitario
       [Custo Total          ]=Round(VSD_I_Custo_Total,2)

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

  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia do Lancamento   ]

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

       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Interna           ]
       VSD_I_Custo_Unitario         =[Custo Unitario            ]
       VSD_I_Custo_Total            =Round([Custo Total               ],2)

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

       VSD_I_Quantidade_Aux         =VSD_I_Quantidade

       VSD_I_Referencia             =""
       If Not Isblank(VSD_I_Codigo_Item)
          Then GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To regitens 
               If RetVal
                  Then VSD_I_Referencia =regitens["Referencia"]
                EndIf  
       EndIf   

EndSwitch
EndProc  ; (Registro_Item)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_ItemV(Funcao_Registro)
Private Funcao_Registro,REG_ITEM

Switch
  Case Funcao_Registro="Gravar":
       [Codigo da Empresa        ]=[Rqcabeca->Codigo da Empresa]
       [Codigo do Item           ]=VSD_I_Codigo_Item
       [Descricao do Item        ]=VSD_I_Descricao_Item
       [Tipo do Item             ]=VSD_I_Tipo_Item

       [Quantidade               ]=VSD_I_Quantidade
       [Unidade Interna          ]=VSD_I_UN_Item
       [Custo Unitario           ]=VSD_I_Custo_Unitario
       [Custo Total              ]=Round(VSD_I_Custo_Total,2)

       [Codigo CCusto            ]=VSD_I_CCusto
       [Descricao CCusto         ]=VSD_I_Descricao_CCusto
       
       [Codigo do Item Substituto]=VSD_I_Codigo_Item2

  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia Materia Prima   ]   

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

       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Interna           ]
       VSD_I_Custo_Unitario         =[Custo Unitario            ]
       VSD_I_Custo_Total            =Round([Custo Total         ],2)

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

       VSD_I_Referencia             =""
       If Not Isblank(VSD_I_Codigo_Item)
          Then GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To regitens 
               If RetVal
                  Then VSD_I_Referencia =regitens["Referencia"]
                EndIf  
       EndIf   

       VSD_I_Descricao_Item2        =""
       VSD_I_Tipo_Item2             =""
       VSD_I_UN_Item2               =""
       VSD_I_Codigo_Item2           =[Codigo do Item Substituto ]

       If Not Isblank(VSD_I_Codigo_Item2)
          Then GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item2 To REG_ITEM 
               If RetVal
                  Then VSD_I_Descricao_Item2 =REG_ITEM["Descricao do Item"]
                       VSD_I_Tipo_Item2      =REG_ITEM["Tipo do Item"]
                       VSD_I_UN_Item2        =REG_ITEM["Unidade Interna"]
                  Else VSD_I_Descricao_Item2 ="ITEM NAO LOCALIZADO NO CADASTRO" 
                EndIf  
       EndIf   
EndSwitch

EndProc  ;Registro_ItemV()

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO(TIPO)
Private TIPO     
              
If Not IsAssigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf
                                        
Switch
  Case TIPO="Cabeca":  
       ;----------------------------------------------------
       Moveto "RqCabeca"
       Moveto [Numero do Lancamento]
       UnLockRecord
       PickForm "1"
       ;----------------------------------------------------
       Moveto "RqItem"  
       While RecordStatus("New")=False
             ITEM=[Sequencia do Lancamento]
             ESTOQUE("Exclusao") 
             If [RqCabeca->Tipo de Movimento]="E" And ([RqCabeca->Tipo de Operacao ]="P" Or [RqCabeca->Tipo de Operacao ]="I")
                Then EXCLUIMAT()
             Endif
             If GRAVA_LOG Then Grava_LogEx("RqItem") EndIf
             Del
       EndWhile
       EXCLUIGRADE()
       Moveto "RqCabeca"
       If GRAVA_LOG Then Grava_LogEx("Requisicao") EndIf
       Del       
       STATUSFILTRO = "DEL"
  Case TIPO="Item":
       ITEM = [Sequencia do Lancamento]
       ESTOQUE("Exclusao")
       If [RqCabeca->Tipo de Movimento]="E" And ([RqCabeca->Tipo de Operacao ]="P" Or [RqCabeca->Tipo de Operacao ]="I")
          Then EXCLUIMAT()
       Endif
       Moveto "RqItem"
       Moveto [Sequencia do Lancamento]
       Locate ITEM
       If GRAVA_LOG Then Grava_LogEx("RqItem") EndIf
       Del
  Case TIPO="Item_MatPri":
       ESTOQUE_RQMATPRI("Exclusao")
       Moveto "Rqmatpri"
       If GRAVA_LOG Then Grava_LogEx("Item RqMatPri") EndIf
       Del
EndSwitch             

Release Vars GRAVA_LOG

EndProc  ; (Exclusao)

;*******************************************************************************
;* Entrada e Saida de Estoque                                                  *
;*******************************************************************************
Proc ESTOQUE(OPER)
Private OPER

COD_EMPRESA=[RqCabeca->Codigo da Empresa]
TPMOV      =[RqCabeca->Tipo de Movimento]

MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)

For i from 1 to 2
  Moveto "SdEstq"
  Moveto [Codigo da Empresa]
  Locate COD_EMPRESA, [RqItem->Codigo do Item], ANO, MES
  If not RetVal
     Then Cria_Ficha(COD_EMPRESA,[RqItem->Codigo do Item],False)
  EndIf   
                 
  While True
    If IsLockRecord()  
       Then Loop
    EndIf     
               
    Switch
    Case OPER="Exclusao":
         If TPMOV="E"
            Then [Saldo Atual      ]=NDecimal([Saldo Atual]-[RqItem->Quantidade],3)
                 [Custo Total Atual]=NDecimal([Custo Total Atual]-[RqItem->Custo Total],2)
            Else [Saldo Atual      ]=NDecimal([Saldo Atual]+[RqItem->Quantidade],3)
                 [Custo Total Atual]=NDecimal([Custo Total Atual]+[RqItem->Custo Total],2)
         EndIf
    Case OPER="IncAlt":
         If TPMOV="E"
            Then [Saldo Atual      ]=NDecimal(([Saldo Atual]-QUANTANT)+[RqItem->Quantidade],3)
                 [Custo Total Atual]=NDecimal(([Custo Total Atual]-CUSTOANT)+[RqItem->Custo Total],2)
            Else [Saldo Atual      ]=NDecimal(([Saldo Atual]+QUANTANT)-[RqItem->Quantidade],3)
                 [Custo Total Atual]=NDecimal(([Custo Total Atual]+CUSTOANT)-[RqItem->Custo Total],2)
         EndIf

         ;Quantidade = 0
         If [RqCabeca->Data de Ocorrencia]>=[Data do Preco de Custo] And
            [RqCabeca->Tipo de Movimento]="E"                        And
            [RqCabeca->Tipo de Operacao ]="O"                        And
            [RqItem->Custo Unitario]>0                               And
            [RqItem->Quantidade]=BlankNum() Or [RqItem->Quantidade]=0 
            Then If ([Custo Total Atual]/[Saldo Atual])>0
                     Then If [RqItem->Custo Unitario]<>[Preco de Custo]
                             Then MSG = "O Custo Unit rio informado neste Item, // "+
                                        "difere da Ficha de Estoque !// //"+
                                        "Custo Informado = "+Format("W12.5,EIC",[RqItem->Custo Unitario])+"//"+
                                        "Custo da Ficha  = "+Format("W12.5,EIC",[Preco de Custo        ])+"// //"+
                                        "Deseja Atualizar o Custo da Ficha a partir deste Lanamento ?"
                                  ConfGeral(MSG)
                                  If OK="S"
                                     Then [Data do Preco de Custo]=[RqCabeca->Data de Ocorrencia]
                                          [Preco de Custo        ]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                                  EndIf
                             Else [Data do Preco de Custo]=[RqCabeca->Data de Ocorrencia]     
                          EndIf        
                 EndIf 
         EndIf
         
         ;Quantidade > 0
         If [RqCabeca->Data de Ocorrencia]>=[Data do Preco de Custo] And
            [RqCabeca->Tipo de Movimento]="E"                        And
            ([RqCabeca->Tipo de Operacao ]="P" Or [RqCabeca->Tipo de Operacao ]="I" Or [RqCabeca->Tipo de Operacao ]="O") And
            [RqItem->Custo Unitario]>0                               And
            [RqItem->Quantidade]>0 
            Then If [RqItem->Custo Unitario]<>[Preco de Custo]
                    Then MSG = "O Custo Unit rio informado neste Item, // "+
                               "difere da Ficha de Estoque !// //"+
                               "Custo Informado = "+Format("W12.5,EIC",[RqItem->Custo Unitario])+"//"+
                               "Custo da Ficha  = "+Format("W12.5,EIC",[Preco de Custo        ])+"// //"+
                               "Deseja Atualizar o Custo da Ficha a partir deste Lanamento ?"
                         ConfGeral(MSG)
                         If OK="S"
                            Then [Data do Preco de Custo]=[RqCabeca->Data de Ocorrencia ]
                                 [Preco de Custo        ]=[RqItem->Custo Unitario       ]
                         EndIf
                    Else [Data do Preco de Custo]=[RqCabeca->Data de Ocorrencia]     
                 EndIf        
         EndIf
    EndSwitch
    If ([Custo Total Atual]/[Saldo Atual])>0
       Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
    EndIf
    UnLockRecord

    QuitLoop
  EndWhile

  If OPER="IncAlt" And TPMOV="S"
     Then While True
            Moveto "EstqPrm"
            Moveto [Codigo da Empresa]
            Locate COD_EMPRESA, [RqItem->Codigo do Item]
            If Not RetVal
               Then End Down
                    [Codigo da Empresa   ]=COD_EMPRESA
                    [Codigo do Item      ]=[RqItem->Codigo do Item]
                    If IsLockRecord()
                       Then Del
                       Else UnLockrecord
                    EndIf
                    Loop
            EndIf
            If IsLockRecord()
               Then Loop
            EndIf
            If [RqCabeca->Data de Ocorrencia]>[Data da Ultima Saida]
               Then [Data da Ultima Saida]=[RqCabeca->Data de Ocorrencia]
            EndIf
            UnLockRecord

            QuitLoop
          EndWhile       
  EndIf

  If [RqCabeca->Tipo de Movimento]="S" And
     [RqCabeca->Tipo de Operacao ]="T"
     Then COD_EMPRESA=[RqCabeca->Codigo]
          If TPMOV="E"
             Then TPMOV="S"
             Else TPMOV="E"
          EndIf
     Else QuitLoop
  EndIf

EndFor
Moveto "RqItem"
EndProc  ; (Estoque)    

;*******************************************************************************
;* Entrada e Saida de Estoque                                                  *
;*******************************************************************************
Proc ESTOQUE_RQMATPRI(OPER)
Private OPER

COD_EMPRESA=[RqCabeca->Codigo da Empresa]
TPMOV      =[RqCabeca->Tipo de Movimento]

MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)

Moveto "SdEstq"
Moveto [Codigo da Empresa]
Locate COD_EMPRESA,[RqMatPri->Codigo do Item],ANO,MES
If Not RetVal
   Then Cria_Ficha(COD_EMPRESA,[RqMatPri->Codigo do Item],False)
EndIf   
               
While True
  If IsLockRecord()  
     Then Loop
  EndIf     
             
  Switch
  Case OPER="Exclusao":
       [Saldo Atual      ]=NDecimal([Saldo Atual]+[RqMatPri->Quantidade],3)
       [Custo Total Atual]=NDecimal([Custo Total Atual]+[RqMatPri->Custo Total],2)  
  Case OPER="IncAlt":
       [Saldo Atual      ]=NDecimal(([Saldo Atual]+QUANTANTV)-[RqMatPri->Quantidade],3)
       [Custo Total Atual]=NDecimal(([Custo Total Atual]+CUSTOANTV)-[RqMatPri->Custo Total],2)
  EndSwitch
  
  If ([Custo Total Atual]/[Saldo Atual])>0
     Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
  EndIf
  UnLockRecord
  QuitLoop
EndWhile

If OPER="IncAlt"
   Then While True
          Moveto "EstqPrm"
          Moveto [Codigo da Empresa]
          Locate COD_EMPRESA,[RqMatPri->Codigo do Item]
          If Not RetVal
             Then End Down
                  [Codigo da Empresa   ]=COD_EMPRESA
                  [Codigo do Item      ]=[RqMatPri->Codigo do Item]
                  If IsLockRecord()
                     Then Del
                     Else UnLockrecord
                  EndIf
                  Loop
          EndIf
          If IsLockRecord()
             Then Loop
          EndIf
          If [RqCabeca->Data de Ocorrencia]>[Data da Ultima Saida]
             Then [Data da Ultima Saida]=[RqCabeca->Data de Ocorrencia]
          EndIf
          UnLockRecord

          QuitLoop
        EndWhile       
EndIf

Moveto "RqMatPri" 
EndProc ;Estoque_RqMatPri()    

;*******************************************************************************
;* Adicionad Tabela p/ MovimentaÆo - Tableadd OPEN                            *
;*******************************************************************************
Proc TableAdd_Open(PARAM)
Private TABELA,PosI,PARAM,CONT

;PARAM = Pode ser passado uma ou mais tabelas separadas por "," conforme a necessidade

; preciso verificar como ser  o procedimento da tabela adicionada, setando as 
;vari veis que irÆo ser utilizadas neste processo antes de executar esta funÆo
;e ap¢s este processo realizado,  preciso voltar as operaäes anteriores atravs
;da proc TableAdd_Close 

CONT = 0
DynArray TABELA[]

PosI=Search(",",PARAM)
While PosI>0
  CONT = CONT + 1
  TABELA[CONT] = SubStr(PARAM,1,PosI-1)
  PARAM = SubStr(PARAM,PosI+1,Len(PARAM))
  PosI=Search(",",PARAM)
EndWhile
CONT = CONT + 1
TABELA[CONT]=PARAM

If Not IsTable(PARAM)
   Then Mensagem(PARAM+" no localizada!")
        Return False
EndIf   

ANT_TAB = Table()
ANT_FIE = Field()

FormKey

For CONT From 1 To DynArraySize(TABELA)
  {TableAdd} TypeIn TABELA[CONT] Enter
EndFor  
Return True

EndProc ;TableAdd()
                            
;*******************************************************************************
;* Adicionad Tabela p/ MovimentaÆo - Tableadd CLOSE                           *
;*******************************************************************************
Proc TableAdd_Close(ROTINA,ANT_TAB,ANT_FIE)
Private ANT_TAB,ANT_FIE

;ROTINA  a que esta sendo executada para controlar as tabelas que fazem parte do processo.
;ANT_TAB e ANT_FIE  setado na proc de adiÆo das tabelas utilizadas na proc TableAdd_Open
;a fim de continuar de onde parou. 

Switch
  Case ROTINA="Requisicao" : Do_It!
                             ClearAll
                             Monta_Tabelas()
                             Moveto "RqCabeca"
                             Moveto [Numero do Lancamento]
                             Locate LANCTO
                             PickForm "1"
                             SetaCorRegistro("Padrao")       
  OtherWise                : Return
EndSwitch  
Moveto ANT_TAB
Moveto Field ANT_FIE

EndProc ;TableAdd()

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc NotaEc_Dialog(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento,Janela,WinArray5,Temp

Temp=True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9:
          Temp=False
          
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_NOTAEC"        : Campo="NO"
            Case Campo="TG_OPQTD"         : Campo="TG_NOTAEC"
            Case Campo="YES" Or Campo="NO": Campo="TG_NOTAEC"
          EndSwitch
      Case Evento["KeyCode"] = 13:
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_NOTAEC"      : 
                      VSDGNOTAEC=ControlValue("TG_NOTAEC") 

                      VSDGNOTAEC=AlinhNL(VSDGNOTAEC,6)
                      getrecord "\\Sistemas\\Estoque\\NotaEC" VSDGNOTAEC to regnotaec
                      If Not RetVal
                         Then FastMsg("Nota de Entrada no localizada !")
                         Else VSDGNOMNOTAEC = regnotaec["Tipo do Documento"]+"/"+regnotaec["Numero do Documento"]+" "+regnotaec["Nome Fantasia EmitDest"]
                              Campo="TG_OPQTD"
                      EndIf
                    Case Campo="TG_OPQTD"       : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
          Temp=False
   EndSwitch
EndIf

Switch
  Case Campo="TG_NOTAEC":
       MSG_CAMPO="Informe o n£mero dom lanamento da nota de entrada"
  Case Campo="TG_OPQTD":
       MensagemRadioButtons()
endSwitch


Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc    ; (Geral_Dialog)      

;*******************************************************************************
;* Notas de Entrada                                                            *
;*******************************************************************************
Proc Nota_Entrada()
Private MSG,ANT_TAB, ANT_FIELD, COD_EMPRESA, NUMEROL, Temp, AUX_CONTA_ITENS, AUX_ITENS 

If CHAVEC <> 1 
  Then Mensagem("Funo permitida para novos lanamentos!")
       return
EndIf   

If [RqCabeca->Sistema Gerador   ] = "MN"
  Then VSDGNOTAEC = [RqCabeca->Lancamento Gerador]
  Else VSDGNOTAEC = ""
EndIf

VSDGOPQTD=1   

While True
 Showdialog "Carregar itens da Nota de Entrada" Proc "NotaEc_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "TAB","ReverseTab","ENTER","ESC","ClearArea"
   @ 10,25 height 11 width 72

    Label  @ 00,00 "Nota Entrada"  For "TG_NOTAEC"
    Accept @ 01,01 Width 09 "A6"  Picture "#*#" Tag "TG_NOTAEC"    To VSDGNOTAEC
    Accept @ 01,09 Width 25 "A22" Picture "#*#" Tag "TG_NOMNOTAEC" To VSDGNOMNOTAEC

    Label @ 03,00 "Quantidade desejada" For "TG_OPQTD"
    RadioButtons @ 04,00 Height 2 Width 33
      "= ~1~",
      "= ~2~ da Nota de Entrada"
        Tag "TG_OPQTD"
        To VSDGOPQTD

    Pushbutton @ 07,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 07,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
   
 Enddialog
 If Not RetVal 
    Then return
 endif

 If VSDGNOTAEC = [RqCabeca->Lancamento Gerador] And [RqCabeca->Sistema Gerador   ] = "MN"
    Then Mensagem("Itens do lanamento "+VSDGNOTAEC+" j  foram adicionados!")
    Else quitloop
 EndIf   

EndWhile  

LimpaRodape(0)
Aguarde("Carregando Itens")

ANT_TAB   = Table()
ANT_FIELD = Field()

Temp=True

Moveto "RqCabeca"
UnLockRecord
                 
TableAdd_Open("\\Sistemas\\Estoque\\Notaei")

MSG=""
Moveto "\\Sistemas\\Estoque\\Notaei"
Moveto [Numero do Lancamento]
Locate VSDGNOTAEC
If RetVal
   Then AUX_CONTA_ITENS = 0 
        DynArray AUX_ITENS[]
        While [Numero do Lancamento] = VSDGNOTAEC
          AUX_CONTA_ITENS = AUX_CONTA_ITENS + 1
          AUX_ITENS[AUX_CONTA_ITENS] = [Sequencia do Lancamento]
          Skip
          If Eot() Then QuitLoop EndIf
        EndWhile
   Else MSG = "No h  itens correspondente ao lanamento "+VSDGNOTAEC+"!"
        Temp=False     
EndIf    
UnLockRecord

Moveto TabelaPrincipal
TableAdd_Close("Requisicao",ANT_TAB,ANT_FIE)
Moveto "RqItem"
        
If Temp
   Then SEQ     = 0
        QTDTOT  = 0
        For ki From 1 To DynArraySize(AUX_ITENS)
          GetRecord "\\Sistemas\\Estoque\\NotaEi" VSDGNOTAEC,AUX_ITENS[ki] To REG_NOTAEI
          If RetVal
             Then 
                  CODIGO_ITEM = REG_NOTAEI["Codigo do Item"]
                  CUSTOMEDIO  = REG_NOTAEI["Custo Medio Unitario"]        ;Custo Medio do Item
                  if VSDGOPQTD=1
                     then QTD_ITEM= 1
                     else QTD_ITEM= REG_NOTAEI["Quantidade Convertida"]
                  endif   
                  CUSTO_TOTAL = CUSTOMEDIO * QTD_ITEM                     ;Custo Total do Item
          EndIf
          
          GetRecord "\\Sistemas\\Estoque\\Itens" CODIGO_ITEM To REG_ITEM 
          If RetVal
             Then WS_TITEM = REG_ITEM["Tipo do Item"]
                  WS_DITEM = REG_ITEM["Descricao do Item"]
                  WS_UNI   = REG_ITEM["Unidade Interna"]
             Else WS_TITEM = ""
                  WS_DITEM = ""
                  WS_UNI   = ""
          EndIf
          
          QUANTANT = 0
          CUSTOANT = 0
          Moveto "RqItem"
          SEQ = SEQ + 1
          End Down
          [Sequencia do Lancamento]=SEQ
          [Codigo da Empresa      ]=[RqCabeca->Codigo da Empresa]
          [Tipo do Item           ]=WS_TITEM
          [Codigo do Item         ]=CODIGO_ITEM
          [Descricao do Item      ]=WS_DITEM
          [Unidade Interna        ]=WS_UNI
          [Quantidade             ]=QTD_ITEM
          [Custo Total            ]=CUSTO_TOTAL
          [Custo Unitario         ]=NDecimal([Custo Total]/[Quantidade],5)
          ESTOQUE("IncAlt")
          If [RqCabeca->Tipo de Movimento]="E" And
             ([RqCabeca->Tipo de Operacao] ="P" Or [RqCabeca->Tipo de Operacao] ="I") And
             PARAM_EXPLODE_MATPRIMA="S"
             Then ITEM = [Sequencia do Lancamento]
                  EXCLUIMAT()
                  FORMULA() 
          Endif
          UnLockRecord

        EndFor
        Moveto "RqCabeca"
        [Lancamento Gerador]=VSDGNOTAEC
        [Sistema Gerador   ]="MN"
        SISTEMA_GERADOR     ="MANUAL -> NE"   
   Else MSG = "No h  itens correspondente ao lanamento "+VSDGNOTAEC+"!"
EndIf

If Not Temp Then Mensagem(MSG) EndIf

Moveto "RqItem"

LimpaRodape(0)
EndProc ;Nota_Entrada()

;*******************************************************************************
;* Verifica Formula de Materia Prima                                           *
;*******************************************************************************
Proc FORMULA()     
Private COD_ITE,MSG,COD_ITE,COD_EMP,QTD,QTD_PROD,COD_CCUS

Moveto "\\Sistemas\\Producao\\FormulaC"
Moveto [Codigo do Produto]
Locate [\Sistemas\Estoque\RqItem->Codigo do Item],"",""
If Not RetVal
  Then Mensagem("NÆo existe f¢rmula cadastrada para este item !//Verificar")
       Moveto "RqItem"
       Return
EndIf

If [Baixa_Automatica]="N"
   Then Moveto "RqItem"
        Return
EndIf

Moveto "RqItem"
Moveto [Sequencia do Lancamento]
Locate ITEM

MSG      = ""
QTD_PROD = [\Sistemas\Producao\Formulac->Quantidade Produzida] 
COD_EMP  = [RqCabeca->Codigo da Empresa]
COD_ITE  = [Codigo do Item]
QTD      = [Quantidade]
COD_CCUS = [Codigo CCusto] 
 
TableAdd_Open("RqMatPri,\\Sistemas\\Producao\\FormulaI")

Moveto "\\Sistemas\\Producao\\FormulaI"
Moveto [Codigo do Produto]
Locate COD_ITE,"",""
If RetVal
   Then While [Codigo do Produto]=COD_ITE
          If Not IsBlank([Codigo do Material]) And [Item_Baixa_Automatica]="S"
             Then Moveto "RqMatPri"
                  Moveto [Numero do Lancamento]
                  Locate LANCTO,ITEM,[\Sistemas\Producao\FormulaI->Sequencia]
                  If Not RetVal
                     Then End Down
                          [Numero do Lancamento   ]=LANCTO
                          [Sequencia do Item      ]=ITEM
                          [Sequencia Materia Prima]=[\Sistemas\Producao\FormulaI->Sequencia]
                  EndIf
                  [Codigo da Empresa  ]=COD_EMP
                  [Codigo do Item     ]=[\Sistemas\Producao\FormulaI->Codigo do Material]
                  ESTOQUEMAT("VOLTA")
                  UNIDADE=(QTD/QTD_PROD)
                  [Quantidade         ]=NDecimal(UNIDADE*[\Sistemas\Producao\FormulaI->Quantidade],3)
                  [Custo Unitario     ]=CUSTOMEDIO_MATPRIMA
                  [Custo Total        ]=Round([Quantidade]*[Custo Unitario],2)
                  [Codigo CCusto      ]=COD_CCUS
                  ESTOQUEMAT("BAIXA")
                  UnLockRecord
                  Moveto "\\Sistemas\\Producao\\FormulaI"
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
   Else MSG = "NÆo existe itens a consumir na f¢rmula deste item !//Verificar !"
EndIf
                   
Moveto TabelaPrincipal
TableAdd_Close("Requisicao",ANT_TAB,ANT_FIE)
Moveto "RqItem"
Moveto [Sequencia do Lancamento]
Locate ITEM
                    
If MSG<>""
   Then Mensagem(MSG)
EndIf   

EndProc  ;  (Formula)

;*******************************************************************************
;* Rotina p/ Checagem de Formula                                              **
;*******************************************************************************
Proc CHECA_FORMULA()
Private OkFormula

If [RqCabeca->Tipo de Movimento]="E" And
   ([RqCabeca->Tipo de Operacao ]="P" Or [RqCabeca->Tipo de Operacao ]="I") And
   PARAM_EXPLODE_MATPRIMA       ="S"
   Then OkFormula=True
   Else Return True
EndIf

Moveto "RqItem"
Moveto [Sequencia do Lancamento]
Locate ITEM
COD_ITE = [Codigo do Item]

TableAdd_Open("RqMatPri,\\Sistemas\\Producao\\FormulaI,\\Sistemas\\Producao\\FormulaC")

MSG=""
Moveto "\\Sistemas\\Producao\\FormulaC"
Moveto [Codigo do Produto]
Locate COD_ITE,"",""
If Not RetVal
   Then MSG="NÆo existe f¢rmula cadastrada para este item !"
        OkFormula=False
   Else If [Baixa_Automatica]="S"
           Then Moveto "\\Sistemas\\Producao\\FormulaI"
                Moveto [Codigo do Produto]
                Locate COD_ITE,"",""
                If Not RetVal
                   Then MSG="NÆo existe itens a consumir na f¢rmula deste item !"
                        OkFormula=False
                EndIf
        EndIf
EndIf

Moveto TabelaPrincipal
TableAdd_Close("Requisicao",ANT_TAB,ANT_FIE)
Moveto "RqItem"
Moveto [Sequencia do Lancamento]
Locate ITEM

If Not OkFormula
   Then Mensagem(MSG+"//Verificar !")
EndIf         

Return OkFormula
EndProc ;CHECA_FORMULA()

;*******************************************************************************
;* Rotina Baixa Materia Prima                                                  *
;*******************************************************************************
Proc ESTOQUEMAT(OPERACAO)
Private OPERACAO
MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)
                  
Moveto "SdEstq"
Moveto [Codigo da Empresa]
Locate [RqCabeca->Codigo da Empresa],
       [RqMatPri->Codigo do Item], ANO, MES
If Not RetVal
   Then Cria_Ficha([RqCabeca->Codigo da Empresa],[RqMatPri->Codigo do Item],False)
EndIf
While True
  If IsLockRecord()
     Then Loop
  EndIf
  If OPERACAO = "BAIXA"
     Then [Saldo Atual             ]=NDecimal([Saldo Atual      ]-[RqMatPri->Quantidade ],3)
          [Custo Total Atual       ]=NDecimal([Custo Total Atual]-[RqMatPri->Custo Total],2)
     Else [Saldo Atual             ]=NDecimal([Saldo Atual      ]+[RqMatPri->Quantidade ],3)
          [Custo Total Atual       ]=NDecimal([Custo Total Atual]+[RqMatPri->Custo Total],2)
  EndIf
  If ([Custo Total Atual]/[Saldo Atual])>0
     Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
  EndIf
  CUSTOMEDIO_MATPRIMA=NDecimal([Custo Total Atual]/[Saldo Atual],5)
  If CUSTOMEDIO_MATPRIMA=0 Or IsBlank(CUSTOMEDIO_MATPRIMA)
     Then CUSTOMEDIO_MATPRIMA=[Ultimo Custo Atual]
  EndIf    
  UnLockRecord
  QuitLoop
EndWhile

If OPERACAO="BAIXA"
   Then While True
          Moveto "EstqPrm"
          Moveto [Codigo da Empresa]
          Locate [RqCabeca->Codigo da Empresa], [RqMatPri->Codigo do Item]
          If Not RetVal
             Then End Down
                  [Codigo da Empresa   ]=[RqCabeca->Codigo da Empresa]
                  [Codigo do Item      ]=[RqMatPri->Codigo do Item   ]
                  UnLockRecord
                  Loop
          EndIf
          If IsLockRecord()
             Then Loop
          EndIf
          If [RqCabeca->Data de Ocorrencia]>[Data da Ultima Saida]
             Then [Data da Ultima Saida]=[RqCabeca->Data de Ocorrencia]
          EndIf
          UnLockRecord

          QuitLoop
        EndWhile
EndIf

Moveto "RqMatPri"
EndProc  ;  (EstoqueMat)

;*******************************************************************************
;* Rotina para exclusao de materia prima                                       *
;*******************************************************************************
Proc EXCLUIMAT()

If Not IsAssigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

TableAdd_Open("RqMatPri")

Moveto [Numero do Lancamento]
Locate LANCTO,ITEM
While [Numero do Lancamento ]=LANCTO And [Sequencia do Item]=ITEM
   ESTOQUEMAT("VOLTA")
   If GRAVA_LOG Then Grava_LogEx("Item RqMatPri") EndIf
   Del
EndWhile

Moveto TabelaPrincipal
TableAdd_Close("Requisicao",ANT_TAB,ANT_FIE)

Moveto "RqItem"
Moveto [Sequencia do Lancamento]
Locate ITEM

EndProc   ; (ExcluiMat)

;*******************************************************************************
;* Rotina para exclusao de materia prima                                       *
;*******************************************************************************
Proc EXCLUIGRADE()

TableAdd_Open("RqItemG")

Moveto [Numero do Lancamento]
Locate LANCTO
While [Numero do Lancamento ]=LANCTO
   If GRAVA_LOG Then Grava_LogEx("RqItemG") EndIf
   Del
EndWhile

Moveto TabelaPrincipal
TableAdd_Close("Requisicao",ANT_TAB,ANT_FIE)

Moveto "RqCabeca"
Moveto [Numero do Lancamento]
Locate LANCTO

EndProc   

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

If [RqCabeca->Tipo de Movimento]="E"
   Then Return True
Endif
MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)

Moveto "SdEstq"
Moveto [Codigo da Empresa]
Locate [Rqcabeca->Codigo da Empresa],
       [Rqitem->Codigo do Item], ANO, MES
If Not RetVal
   Then Cria_Ficha([RqCabeca->Codigo da Empresa],[RqItem->Codigo do Item],False)
EndIf

NOVOSALDO=-1
Switch
  Case CHAVEI=1:
       NOVOSALDO=NDecimal([Saldo Atual]-[RqItem->Quantidade],3)
  Case CHAVEI=0:
       NOVOSALDO=NDecimal((([Saldo Atual]+QUANTANT)-[RqItem->Quantidade]),3)
EndSwitch
;;UnLockRecord
                
Moveto "RqItem"
If NOVOSALDO>=0
   Then Return True
   Else Mensagem("Estoque Insuficiente em "+Ltrim(StrVal(Format("W11.3,EIC",NOVOSALDO)))+", Verificar !")
        If PARAM_BLOQUEIA_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf 
EndProc   ; (Checa_Estoque)

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

If [RqCabeca->Tipo de Movimento]="E"
   Then Return True
EndIf
MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)

Moveto "SdEstq"
Moveto [Codigo da Empresa]
Locate [Rqcabeca->Codigo da Empresa],
       [Rqmatpri->Codigo do Item], ANO, MES
If Not RetVal
   Then Cria_Ficha([RqCabeca->Codigo da Empresa],[RqItem->Codigo do Item],False)
EndIf

NOVOSALDO=-1
Switch
  Case CHAVEV=1      : NOVOSALDO=NDecimal([Saldo Atual]-[Rqmatpri->Quantidade],3)
  Case CHAVEV=0      : NOVOSALDO=NDecimal((([Saldo Atual]+QUANTANTV)-[Rqmatpri->Quantidade]),3)
EndSwitch
;;UnLockRecord

Moveto "RqMatPri"

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

EndProc   ;Checa_EstoqueV()

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA,ESTQ_ANO,ESTQ_MES

ESTQ_MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
ESTQ_ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)

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

Moveto "EstqPrm"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf                 
  QuitLoop
EndWhile

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

Return True
EndProc  ; (Cria_Ficha)

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

If IsEmpty("P_Requis")
   Then Mensagem("No esta Configurado os Parametros para Digitao !")
        Result=False
   Else GetRecord "P_Requis" [RqCabeca->Codigo da Empresa] To EMPRESA
        If Not RetVal
           Then Mensagem("Parametros no Cadastrado para esta Empresa !")
                Result=False
           Else PARAM_EMPRESA         = EMPRESA["Codigo_Empresa"]
                PARAM_BLOQUEIA_NEG    = EMPRESA["Bloqueia_Estoque_Negativo"]
                PARAM_EXPLODE_MATPRIMA= EMPRESA["Explosao_Materia_Prima"]

                Result=True
        EndIf
EndIf

Return Result

EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog1(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""

If Disparo="OPEN"
   Then INICIO_DIALOG=False
        Campo="TG_CODIGO"
EndIf        

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 27:
          Temp=False
          Switch
            Case Campo="TG_QTD"            :
                 CancelDialog
            Case Campo="TG_CODIGO"         : Campo="TG_QTD"
          EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="TG_QTD"           : 
								Dados_QTD=ControlValue("TG_QTD")
                If Dados_QTD>1000
                   Then Mensagem("Quantidade Inv lida !")
                   Else Campo="TG_CODIGO"
                EndIf
             Case Campo="TG_CODIGO"        : 
                Dados_Item=ControlValue("TG_CODIGO")
								AcceptDialog
           EndSwitch
   EndSwitch
EndIf
RefreshDialog
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc
            
;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Geral_Dialog(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento,Janela,WinArray5,Temp

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"] = 27:
           If Campo="I_VrCustoMedio" 
              Then CancelDialog
           EndIf
      Case Evento["KeyCode"] = 13:
           If Campo="I_VrCustoMedio"
              Then VSD_VrCustoMedido=ControlValue("I_VrCustoMedio")
                   AcceptDialog
           EndIf      
   EndSwitch
EndIf

SelectControl Campo
TECLA="Esc=Retornar  "

Switch
  Case Campo="I_VrCustoMedio":
       MSGCAMPO="Informe o valor do custo mdio do produto"
EndSwitch

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

EndProc    ; (Geral_Dialog)      

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

SomatoriaDosItens()

While True
  Moveto "Rqitem"
  While True
    Moveto [Sequencia do Lancamento]
    End
    ITEM = [Sequencia do Lancamento]
    Down
    Moveto [Sequencia do Lancamento]
    Seta_Sequencia(ITEM,False)
    If IsLockRecord()
       Then Del
            Loop
    EndIf
    QuitLoop
  EndWhile
  
  If Not Ler_CDBarras(22,00)
     Then Del
          Return False
  EndIf
  
  If Pega_Dados_CdBarras()
     Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" PEGA_DADOS_CODITEM To REG_ITEMCOM
          If RetVal
             Then If REG_ITEMCOM["Fracionado"]="N" And (Dados_QTD-Int(Dados_QTD))<>0
                     Then Mensagem("A Quantidade do Item ["+PEGA_DADOS_CODITEM+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                          ITOK=False
                  EndIf        
             Else Mensagem("Item "+PEGA_DADOS_CODITEM+" sem cadastro complementar !")
                  ITOK=False
          EndIf
          Release Vars REG_ITEMCOM
  EnDIf
  
  Del
  If Not ITOK Then QuitLoop EndIf

  Moveto [Codigo do Item]
  Locate VSD_I_Codigo_Item
  If RetVal
     Then CHAVEI=0
          ITEM  =[Sequencia do Lancamento]
          Inicia_Registro()

          VSVRMERC=VSVRMERC-[Custo Total   ]
          VSQTDE  =VSQTDE  -[Quantidade    ]

     Else CHAVEI=1
          While True
            Moveto [Sequencia do Lancamento]
            End
            ITEM = [Sequencia do Lancamento]
            Down
            Moveto [Sequencia do Lancamento]
            Seta_Sequencia(ITEM,False)
            If IsLockRecord()
               Then Del
                    Loop
            EndIf
            QuitLoop
          EndWhile

          ITEM  =[Sequencia do Lancamento]
          [Codigo do Item]=VSD_I_Codigo_Item
          Inicia_Registro()

          MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
          ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)

          Moveto "SdEstq"
          Moveto [Codigo da Empresa]

          If [RqCabeca->Tipo de Movimento]="S" And
             [RqCabeca->Tipo de Operacao ]="T"
             Then Locate [RqCabeca->Codigo],[RqItem->Codigo do Item], ANO, MES
                  If Not RetVal
                     Then If Not Cria_Ficha([RqCabeca->Codigo],[RqItem->Codigo do Item],False)
                             Then Moveto "RqItem"
                                  Del
                                  QuitLoop
                          EndIf
                  EndIf
          EndIf

          Locate [RqCabeca->Codigo da Empresa],
                 [RqItem->Codigo do Item], ANO, MES
          If Not RetVal
             Then If Not Cria_Ficha([RqCabeca->Codigo da Empresa],[RqItem->Codigo do Item],False)
                     Then Moveto "RqItem"
                          Del
                          QuitLoop
                  EndIf
          EndIf

          CUSTOMEDIO=[Custo Total Atual]/[Saldo Atual]
          If CUSTOMEDIO=0 Or IsBlank(CUSTOMEDIO)
             Then CUSTOMEDIO=[Ultimo Custo Atual]
          EndIf
          If [RqCabeca->Tipo de Operacao ]="P" Or
             [RqCabeca->Tipo de Operacao ]="I" Or
             [RqCabeca->Tipo de Operacao ]="E" Or
             [RqCabeca->Tipo de Operacao ]="R"
             Then CUSTOMEDIO=[Preco de Custo]
          EndIf   
          
          If SYS_CODIGO_CLIENTE="0322" And [RqCabeca->Tipo de Movimento]="E" And [RqCabeca->Tipo de Operacao ]="O"  
             Then If CUSTOMEDIO=0 Or CUSTOMEDIO=BlankNum() Or CUSTOMEDIO=""
                     Then VSD_VrCustoMedido=BlankNum()
                          Echo Normal
                          Echo Off
                          
                          Showdialog "Digite o Valor do Custo Mdio" Proc "Geral_Dialog"
                          Trigger "OPEN","ARRIVE"
                          Key "TAB","ReverseTab","ENTER","ESC","ClearArea"
                          @ 09,14 height 06 width 40
                         
                          Label  @ 1,01 "Informe o Valor: " for "I_VrCustoMedio"
                          Accept @ 1,19 Width 12 "$" picture "#*#.[##]" Tag "I_VrCustoMedio" to VSD_VrCustoMedido
          
                          @ 03,02 ?? "** Em Branco = Valor ser  nulo!"
                         
                          Enddialog
                          Mouse Show
                          
                          If VSD_VrCustoMedido <> BlankNum() 
                             Then CUSTOMEDIO = VSD_VrCustoMedido
                          EndIf 
                  EndIf
          EndIf
          
          Moveto "RqItem"
          VSD_I_Custo_Unitario=NDecimal(CUSTOMEDIO,5)
  EndIf

  VSD_I_Quantidade =VSD_I_Quantidade+Dados_QTD
  [Quantidade     ]=[Quantidade    ]+Dados_QTD
  If Not CHECA_ESTOQUE() or Not CHECA_FORMULA()
     Then If CHAVEI=1
             Then Del
                  QuitLoop
             Else Undo
                  QuitLoop
          EndIf               
  EndIf
  
  VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
  Registro_Item("Gravar")

  If CHAVEI=1
     Then VCITENS =VCITENS +1
  EndIf   
  VSVRMERC=VSVRMERC+[Custo Total   ]
  VSQTDE  =VSQTDE  +[Quantidade    ]

  UnlockRecord

  ITEM = [Sequencia do Lancamento]
  ESTOQUE("IncAlt")
  If [RqCabeca->Tipo de Movimento]="E" And
     ([RqCabeca->Tipo de Operacao] ="P" Or [RqCabeca->Tipo de Operacao] ="I") And
     PARAM_EXPLODE_MATPRIMA="S"
     Then EXCLUIMAT()
          FORMULA() 
  Endif
  UnlockRecord
  
  Moveto "Rqcabeca"
  [Valor Total     ]=VSVRMERC
  [Quantidade Total]=VSQTDE

  Moveto "RqItem"
  ;QuitLoop
EndWhile

EndProc

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Pega_Dados_CdBarras()

ITOK = True

Moveto [Codigo do Item]
Ativa_Lookup()
Moveto [Codigo de Barras]
Locate Dados_Item
If RetVal
   Then Moveto [Codigo do Item]
        PEGA_DADOS_CODITEM = [Codigo do Item] 
   Else If Codigo_Barras2(Dados_Item,"")
           Then PEGA_DADOS_CODITEM = CODIGO_BARRA2
           Else PEGA_DADOS_CODITEM = Dados_Item
        EndIf
        Moveto [Codigo do Item]
        Locate PEGA_DADOS_CODITEM
EndIf
If RetVal
    Then VSD_I_Codigo_Item=[Codigo do Item]
         If [Inativo]="S"
            Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo !")
                 ITOK=False
         EndIf
    Else Mensagem("Item no Cadastrado !")
         ITOK=False
EndIf
KeyPress "ESC"

Return ITOK

EndProc ;Pega_Dados_CdBarras()
          
;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc SelecionaFiltro()
LimpAguarde()
Do_It!
ClearAll

{Ask} {RqCabeca} Check
Moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
Moveto [Numero do Corte    ] TypeIn NUMCORTE
Moveto [Codigo do Documento] TypeIn "~VSDGTPDOCTO.."
Moveto [Requisitante       ] TypeIn "~VSDGREQUISIT.."
Moveto [Tipo de Movimento  ] TypeIn "~VSDGTPMOV.."
Moveto [Tipo de Operacao   ] TypeIn "~VSDGTPOPE.."
If Not IsBlank(VSDGDTINI) Or Not IsBlank(VSDGDTFIM)
   Then Moveto [Data de Ocorrencia ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
EndIf
Do_It!
ClearAll

CriaTabelaControle()
EndProc  ; (SelecionaFiltro)

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

If Disparo="EVENT" And Evento["Type"]="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_TPDOCTO"        : Campo="TG_EMPRESA"
            Case Campo="TG_REQUISIT"       : Campo="TG_TPDOCTO"
            Case Campo="TG_TPMOV"          : Campo="TG_REQUISIT"
            Case Campo="TG_TPOPE"          : Campo="TG_TPMOV"
            Case Campo="TG_DTINI"          : Campo="TG_TPOPE"
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"
            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_TPDOCTO"
                    Case Campo="TG_TPDOCTO"   : Campo="TG_REQUISIT"
                    Case Campo="TG_REQUISIT"  : Campo="TG_TPMOV"
                    Case Campo="TG_TPMOV"     : Campo="TG_TPOPE"
                    Case Campo="TG_TPOPE"     : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"     : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"     : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo = "TG_TPMOV" :
       MSG_CAMPO = "Branco = Todas   E = Entrada   S = Sa¡da"
  Case Campo = "TG_TPOPE" :
       MSG_CAMPO = "Branco=Todas  C=Consumo  P=Producao  I=Indust.  T=Transf.  D=Devol.  O=Outros"
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 "Critrio para filtro ?" Proc "SD_DialogF"
  Trigger "OPEN","ARRIVE","SELECT"  
  Mouse "UP"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
  @ 05,00   Height 22 Width 80

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

    Label  @ 02,00 "Tipo do Documento"  For "TG_TPDOCTO"
    Accept @ 03,01 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO

    Label  @ 04,00 "Requisitante"  For "TG_REQUISIT"
    Accept @ 05,01 Width 09 "A6"  Picture "#*#" Tag "TG_REQUISIT" To VSDGREQUISIT
    Accept @ 05,09 Width 25 "A32"  Picture "!*!" Tag "TG_NOMREQUI" To VSDGNOMREQUI

    Label  @ 06,00 "Tipo de Movimento" For "TG_TPMOV"
    Accept @ 07,04 Width 04 "A1"   Picture "E,S" Tag "TG_TPMOV" To VSDGTPMOV
    Accept @ 07,09 Width 25 "A30"  Picture "!*!" Tag "TG_NOMTPMOV" To VSDGNOMTPMOV

    Label  @ 08,00 "Tipo de Operao" For "TG_TPOPE"
    Accept @ 09,04 Width 04 "A1"   Picture "C,P,T,O,D" Tag "TG_TPOPE" To VSDGTPOPE
    Accept @ 09,09 Width 25 "A30"  Picture "!*!" Tag "TG_NOMTPOPE" To VSDGNOMTPOPE

    Label  @ 10,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 11,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 11,16 "at" For "TG_DTFIM"
    Accept @ 11,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    @ 19,52 ?? "[NÆo filtra ms fechado!]"

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  AGUARDE("Filtrando dados")
  SelecionaFiltro()

  Result=True

  QuitLoop
EndWhile

SDFILTRO_ATIVO=False

Return Result
EndProc

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Monta_Tabelas()                      
ClearAll
 
View NOWINDOW "\\Sistemas\\Faccao\\Cfacc"
View NOWINDOW "\\Sistemas\\Cadastro\\Destinat"
View NOWINDOW "Itens"
View NOWINDOW "Iten_Com"
View NOWINDOW "SdEstq"
View NOWINDOW "EstqPrm"
View NoWindow "P_Requis"      
View NoWindow "NotaEC"      
View NoWindow "NotaEI"      

If Not CoEditaTabelaControle() ; Substitui Coedit da Tabela Princiapl
   Then Return False
EndIf
          
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return False            
EndIf

PickForm "1"
Moveto "\\Sistemas\\Producao\\FormulaC" SetHighLight Current Record 51 Field 51
Moveto "\\Sistemas\\Producao\\FormulaI" SetHighLight Current Record 51 Field 51
Moveto "SdEstq"   SetHighLight Current Record 51 Field 51
Moveto "EstqPrm"  SetHighLight Current Record 51 Field 51
Moveto "RqItem"   SetaCorRegistro("Padrao")
Moveto "RqMatPri" SetaCorRegistro("Padrao")

Moveto TabelaControle
PickForm "F"
If NRecords(TabelaControle)>1
   Then Home
        If IsBlank([Numero do Lancamento])
           Then Echo Normal
                Echo Off
                MSG="Existe registro com Erro !// //"
                MSG=MSG+"Verificar numero lanamento em branco !// //"
                MSG=MSG+"Excluir o lanamento e verificar a origem do mesmo !"
                Mensagem(MSG)
        EndIf
EndIf
            
If Verifica_NRegistros("Rqitem")
   Then COR_MENSAGEM="1"
        Mensagem(MSG_TABELA)
        Release Vars COR_MENSAGEM,MSG_TABELA
   Else Release Vars MSG_TABELA     
EndIf

Return True
EndProc

;*******************************************************************************
;*  ROTINA PARA PAGINACAO DE TABELA EM FORM                                    *
;*******************************************************************************
Proc PAGINA_ESPECIAL(TabIda,Tipo)
Private TABIDA,TIPO

SEMREGISTRO=False

Mouse Show
If RecordStatus("New")=True
   Then Del
EndIf

tpform =TIPO
AVANCAR="N"
EDITAR ="N"
EXCLUIR="N"
If RecordStatus("New")
   Then If SubStr(TIPO,1,2)="MT"
           Then MENSAGEM("Tabela sem Registros !")
        EndIf   
        Return
EndIf

Moveto TABIDA
If SubStr(TIPO,1,2)="MR"
   Then Switch
          Case RetVal="F7" or RetVal="HOME":
               Home
          Case RetVal="PGUP":
               PgUp
        EndSwitch
   Else Switch
          Case RetVal="F7" or RetVal="HOME":
               Home
        EndSwitch
EndIf
TABIDA=Table()

If Not IsAssigned(UltimaTabela_Pagina) Then UltimaTabela_Pagina="" EndIf
If Not IsAssigned(UltimoCampo_Pagina)  Then UltimaCampo_Pagina=""  EndIf

If UltimaTabela_Pagina=TABIDA 
   Then Moveto Field UltimoCampo_Pagina
   Else TEXTO_LOCATE=""
EndIf

FIELD_LOCATE=Field()

ImageRights ReadOnly
SetaCorRegistro("Paginar")

msgcampo =""
prompt TEXTO_LOCATE

SpeedBar "["+Chr(17)+"]"     :"ESC",
             "~Alterar~"         :"F9",
             "~Excluir~"         :"DEL",
             "<"+Chr(17)         :-115,
             Chr(16)+">"         :-116,
             "~Localizar~"       :"ZOOM",
             "~Loc~|"+Chr(16)    :"ZOOMNEXT",
             "~?~"               :-94,
             "|"+Chr(17)         :"HOME",
             Chr(17)             :"PGUP",
             Chr(16)             :"PGDN",
             Chr(16)+"|"         :"END"             

wait workspace
  Proc "wait_pagina"
  trigger "ALL"
  Message "ALL"
  Key "ALL"
EndWait
  
ClearSpeedBar

If Table()<>TABIDA
   Then Moveto TABIDA
EndIf   

If EDITAR="S" Or EXCLUIR="S" Or AVANCAR="S"
   Then UltimaTabela_Pagina=TABIDA 
        UltimoCampo_Pagina =Field()
        PegaPosForm()
   Else UltimaTabela_Pagina=""
        UltimoCampo_Pagina =""
EndIf
   
SetaCorRegistro("Editar")
ImageRights                          

EndProc

;*******************************************************************************
;* Rotina Wait p/ Pagina()                                                     *
;*******************************************************************************
proc wait_pagina(triggertype,event,cyclenumber)
private ncampo,nrec

If triggertype="TOUCHRECORD" And Event["TYPE"]="MOUSE"
   Then If SubStr(tpform,1,2)="MR"
           Then If Not IsLockRecord()
                   Then EDITAR="S"
                        Return 2
                EndIf
        EndIf
        Return 1
EndIf

If Event["TYPE"]="KEY" And triggertype="EVENT"
   Then Switch
          Case event["KEYCODE"]=-145 And IsAssigned(MODOFILTRAR) And MODOFILTRAR:
               OrdenaCampo(Field())          
               Return 1

          Case event["KEYCODE"]=-94:

               MSG=    "      Esc= Voltar                                                //"
               MSG=MSG+" Enter/F9= Seleciona registro p/ alterar   [Lista/Ficha]         //"
               MSG=MSG+"      Del= Seleciona registro p/ excluir                         //"

               If IsAssigned(MODOFILTRAR) And MODOFILTRAR
                  Then MSG=MSG+"Ctrl+Down= Ordenar campo   [A->Z]                                //"
                  Else MSG=MSG+"                                                                 //"
               EndIf   

               MSG=MSG+"   Ctrl+Z= Localizar registro                                    //"
               MSG=MSG+"    Alt+Z= Localizar pr¢ximo registro                            // //"

               MSG=MSG+"     Home= primeiro registro     Up"+Chr(25)+"= registro anterior          //"
               MSG=MSG+"      End= £ltimo registro     Down"+Chr(24)+"= Pr¢ximo registro           //"
               MSG=MSG+"  Page Up= P gina anterior     * Ctrl+Page Up                    //"
               MSG=MSG+"Page Down= Pr¢xima p gina      * Ctrl+Page Down                  // //"
               
               MSG=MSG+"* Para localizar r pido bastar teclar no campo desejado! //"
               MSG=MSG+"       BackSpace= Limpa um caracter/localiza r pido      //"
               MSG=MSG+"  Ctrl+BackSpace= Limpar/localiza r pido                 // //"
               MSG=MSG+"  Ctrl+F1= Ajuda/Teclas [?]                                       "
               MsgHelp("Teclas/Funes",MSG)
               return 1
          Case event["KEYCODE"]=Asc("F35") Or
               event["KEYCODE"]=Asc("F1")  Or
               event["KEYCODE"]=Asc("F3")  Or
               event["KEYCODE"]=Asc("F4")  Or
               event["KEYCODE"]=Asc("F5")  Or
               event["KEYCODE"]=Asc("F6")  Or
               event["KEYCODE"]=Asc("F7")  Or
               event["KEYCODE"]=Asc("F8")  Or
               event["KEYCODE"]=Asc("F10") Or
               event["KEYCODE"]=Asc("F11") Or
               event["KEYCODE"]=Asc("F12") Or
               event["KEYCODE"]=-31        Or
               event["KEYCODE"]=-45        Or        
               event["KEYCODE"]=6 :        
               return 1
          Case Event["KEYCODE"]=Asc("ZOOM"):
               PESQUISA()
               prompt TEXTO_LOCATE
               return 1
          Case Event["KEYCODE"]=Asc("ZOOMNEXT"):
               PESQUISACON()
               return 1
          Case Event["KEYCODE"]=Asc("ESC"):
               Return 2
          Case Event["KEYCODE"]=Asc("DEL"):
               If Not IsLockRecord()
                  Then EXCLUIR="S"
                       Return 2
               EndIf
               Return 1
          Case Event["KEYCODE"]=Asc("F9") Or
               Event["KEYCODE"]=Asc("F2") Or
               Event["KEYCODE"]=Asc("ENTER") Or
               ISFIELDVIEW():
               If (Event["KEYCODE"]=Asc("ENTER") Or ISFIELDVIEW()) And tpform="MT"
                  Then Return 1
               EndIf
               If Not IsLockRecord()
                  Then EDITAR="S"
                       Return 2
               EndIf
               Return 1
          Case Event["KEYCODE"]=Asc("DOWN"):
               If SubStr(tpform,1,2)="MR"
                  Then If Not AtLast()
                          Then nrec=recno() 
                               ncampo=Field()
                               Down
                               If recno()=nrec
                                  Then Down
                               EndIf   
                               moveto field ncampo
                               Return 1
                          Else If tpform="MR"
                                  Then Return 2
                                  Else Return 1
                               EndIf
                       EndIf
                  Else Right
               EndIf
               Return 1
          Case Event["KEYCODE"]=Asc("PGUP") Or
               Event["KEYCODE"]=Asc("PGDN"):
               If npages()=1
                  Then ncampo=Field()
                       KeyPress Event["KEYCODE"]
                       moveto field ncampo
                  Else KeyPress Event["KEYCODE"]
               EndIf        
               return 1
          Case Event["KEYCODE"]=Asc("UP"):
               If SubStr(tpform,1,2)="MR"
                  Then nrec=recno() 
                       ncampo=Field()
                       Up
                       If recno()=nrec
                          Then Up
                       EndIf   
                       moveto field ncampo
                  Else Left
               EndIf
               Return 1

          Case Event["KEYCODE"]=Asc("CTRLBACKSPACE"):
               TEXTO_LOCATE=""
               prompt TEXTO_LOCATE
               
               Return 1
          Case Event["KEYCODE"]=Asc("BACKSPACE"):
               If Field()<>FIELD_LOCATE
                  Then FIELD_LOCATE=Field()
                       TEXTO_LOCATE=""
                       prompt TEXTO_LOCATE
               Endif        

               TEXTO_LOCATE=SubStr(TEXTO_LOCATE,1,Len(TEXTO_LOCATE)-1)
               prompt TEXTO_LOCATE
               
               If Not IsBlank(TEXTO_LOCATE)
                  Then Zoom Select TEXTO_LOCATE+".."
               EndIf   
               
               Return 1
          Case (Event["KEYCODE"]>=32 And Event["KEYCODE"]<=125):
               If Field()<>FIELD_LOCATE
                  Then FIELD_LOCATE=Field()
                       TEXTO_LOCATE=""
                       prompt TEXTO_LOCATE
               Endif        

               TEXTO_LOCATE=TEXTO_LOCATE+UPPER(Chr(Event["KEYCODE"]))
               prompt TEXTO_LOCATE
               Zoom Select TEXTO_LOCATE+".."

               Return 1
          Case Event["KEYCODE"]=-116 : 
               If [RqCabeca->Tipo de Movimento]="E" And
                  ([RqCabeca->Tipo de Operacao ]="P" Or [RqCabeca->Tipo de Operacao] ="I")
                  Then Atualiza_Menu("Adicionar")
                       Atualiza("Adicionar")
                       AVANCAR="S"
                       Return 2
               EndIf   
               Return 1      
          OtherWise:   
              KeyPress Event["KEYCODE"]
              return 1
      EndSwitch
EndIf                             

Return 0
EndProc

;*******************************************************************************
;* Rotina p/ Verificar Alteracao RqMatPri                                      *
;*******************************************************************************
Proc Verifica_Alteracao()
Private i,AUX_REG_DIGITAV,LTERACAO

CopyToArray AUX_REG_DIGITAV

If ArraySize(AUX_REG_DIGITAV)<>ArraySize(REG_DIGITAV)
   Then Mensagem("Registros Inconsistentes !")
        Return
EndIf        

ALTERACAO = False

If REG_DIGITAV["Quantidade"]<>AUX_REG_DIGITAV["Quantidade"]
   Then ALTERACAO=True
EndIf    

If ALTERACAO
  Then [Ocorrencia de Alteracao]="A"
EndIf  

EndProc ;Verifica_Alteracao()

;*******************************************************************************
;* Rotina p/ Verificar Ocorrencias de AlteraÆo                                *
;*******************************************************************************
Proc Verifica_Alteracao_Finalizacao()
Private i,ALTERACAO,ANT_TAB,ANT_FIELD,NOVO,ALTE

NOVO=False
ALTE=False

ANT_TAB   = Table()
ANT_FIELD = Field()

REG_RQITEM=[Sequencia do Lancamento]
Atualiza_Menu("Adicionar")
Atualiza("Adicionar")

ITEM_ALTERADO=False
Moveto "RqMatPri"
Scan
  If [Ocorrencia de Alteracao]<>""
     Then ITEM_ALTERADO=True  
          QuitLoop
  EndIf
EndScan

Moveto ANT_TAB
Atualiza_Menu("Limpar")
Atualiza("Limpar")

If ITEM_ALTERADO
  Then MSG = Format("W65","O sistema detectou que houve alteraes efetuadas manualmente nos")+"//"+
             Format("W65","itens consumidos.                                                ")+"////"+
             
             Format("W65","[SIM] Refazer  o  consumo  autom tico  para  este item baseado na")+"//"+
             Format("W65","      f¢rmula.                                                   ")+"//"+    
             Format("W65","[NAO] Manter  o  consumo  como  est   para manualmente efetuar as")+"//"+
             Format("W65","      alteraes necess rias.                                    ")+"//"+
             Format("W65","Deseja REFAZER NOVO CONSUMO baseado na formula?                  ")
      ConfGeral_N(MSG)
      If OK="N"
         Then CHAVEI=7
      EndIf
EndIf

EndProc ;Verifica_Alteracao_Finalizacao()

;*******************************************************************************
;* Rotina p/ Verificar Item da Formula                                         *
;*******************************************************************************
Proc Verifica_Item_Formula(PARAM)
Private PARAM,AUX_SEQ,AUX_ITEM_RQITEM,AUX_ITEM_FORMULA 
                 
ITEM_FORMULA=False    
If Isassigned(ARRAY_FORMULA)
   Then For out From 1 To DynArraySize(ARRAY_FORMULA)
          ;AUX_SEQ = NumVal(Rtrim(Ltrim(SubStr(ARRAY_FORMULA[out],1,3))))
          AUX_ITEM_RQITEM  = SubStr(ARRAY_FORMULA[out],4,10)
          AUX_ITEM_FORMULA = SubStr(ARRAY_FORMULA[out],14,10)

          If AUX_ITEM_RQITEM  = [RqItem->Codigo do Item] And
             AUX_ITEM_FORMULA = PARAM
             Then ITEM_FORMULA=True
                  QuitLoop
          EndIf

          ;If [Sequencia Materia Prima]= AUX_SEQ
          ;   Then If AUX_ITEM_RQITEM  = [RqItem->Codigo do Item] And
          ;           AUX_ITEM_FORMULA = PARAM
          ;           Then ITEM_FORMULA=True
          ;                QuitLoop
          ;        EndIf
          ;EndIf
        EndFor
EndIf

EndProc ;Verifica_Item_Formula()

;*******************************************************************************
;* Rotina p/ Verificar Item da Formula                                         *
;*******************************************************************************
Proc Verifica_Item_Formula2(PARAM)
Private PARAM,AUX_SEQ,AUX_ITEM_RQITEM,AUX_ITEM_FORMULA 
                 
ITEM_FORMULA2=False    
If Isassigned(ARRAY_FORMULA)
   Then For out From 1 To DynArraySize(ARRAY_FORMULA)
          AUX_ITEM_RQITEM  = SubStr(ARRAY_FORMULA[out],4,10)
          AUX_ITEM_FORMULA = SubStr(ARRAY_FORMULA[out],14,10)
          If AUX_ITEM_RQITEM  = [RqItem->Codigo do Item] And
            AUX_ITEM_FORMULA = PARAM
            Then ITEM_FORMULA2=True
                 QuitLoop   
          EndIf       
        EndFor                                          
EndIf

EndProc ;Verifica_Item_Formula2()

;*******************************************************************************
;* Rotina p/ Controlar ChaveV                                                  *
;*******************************************************************************
Proc Atualiza(PARAM)
Private TAB_ANT

TAB_ANT = Table()              

Moveto "RqCabeca"
Switch
  Case PARAM="Limpar"    : [Sequencia do Item] = BlankNum()
  Case PARAM="Adicionar" : [Sequencia do Item] = [RqItem->Sequencia do Lancamento]
EndSwitch  

Moveto TAB_ANT

EndProc ;Atualiza()

;*******************************************************************************
;* Rotina p/ Controlar ChaveV                                                  *
;*******************************************************************************
Proc Atualiza_Menu(PARAM)
Private TAB_ANT
              
Switch
  Case PARAM="Limpar"    : VSDG_ITEM = ""
  Case PARAM="Adicionar" : VSDG_ITEM = "para o Item ["+Ltrim(Format("W3,AR",[RqItem->Sequencia do Lancamento]))+"] "+ 
                                       Format("W10",[RqItem->Codigo do Item])+" "+
                                       Format("W30",[RqItem->Descricao do Item])+"]"
EndSwitch  

EndProc ;Atualiza_Menu()

;*******************************************************************************
;* Rotina para Recalcular consumo da formula                                   *
;*******************************************************************************
Proc Recalc_Consumo()
Private Ok

ok=False
If [RqCabeca->Tipo de Movimento]="E" And
   ([RqCabeca->Tipo de Operacao] ="P" Or [RqCabeca->Tipo de Operacao] ="I") And
   PARAM_EXPLODE_MATPRIMA="S"
   Then ok=True
EndIf

If Not ok
   Then Mensagem("Tipo de movimento e operao inv lida, para recalculo !")
        Return
EndIf        

If Not ConfGeral("Confirma recalculo de consumo conforme f¢rmula atual ?")
   Then Return
EndIf        

NR = NImageRecords()
Scan

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

 CHAVEI=0
 ITEM = [Sequencia do Lancamento]
 EXCLUIMAT() 
 FORMULA()
 Moveto "RqItem"
EndScan

Mensagem("Processo finalizado !")
EndProc



;*******************************************************************************
;* Rotina para controlar usuario                                               *
;*******************************************************************************
Proc PermissaoUsuario()
private msg

if sys_Codigo_Cliente<>"0294"
   then return true
endif   

msg=""
if SYS_NIVEL_USUARIO="P" and
   [Codigo_Usuario]<>SYS_CHAPA_USUARIO
   then
        msg=    "Voc  um usu rio tipo [PARTICULAR] !// //"
        msg=msg+"Voc nao tem permissÆo para alterar o lanamento //"
        msg=msg+"efetuado por outro usu rio.                      // //"
        msg=msg+"Se necess rio verifique com o Supervisor do SISTEMA !"
endif   

if msg<>""
   then mensagem(msg)
        return false
   else return true
endif        
 
endproc

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

ITEM=[Sequencia Materia Prima]
INICIA_REGISTROV()
DIGITAV()
If CHAVEV=1 Or CHAVEV=0
   Then ESTOQUE_RQMATPRI("IncAlt")
        UnlockRecord
        Moveto "Rqmatpri"
EndIf
SetaCorRegistro("Padrao")
EndProc

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

If CHAVEI=1 Or CHAVEI=0
   Then ESTOQUE("IncAlt")
        If [RqCabeca->Tipo de Movimento]="E" And
           ([RqCabeca->Tipo de Operacao] ="P" Or [RqCabeca->Tipo de Operacao] ="I") And
           PARAM_EXPLODE_MATPRIMA="S"
           Then ITEM = [Sequencia do Lancamento]
                EXCLUIMAT()
                FORMULA()
        Endif
        UnlockRecord
        Moveto "RqItem"
EndIf
SetaCorRegistro("Padrao")

EndProc

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

FACA_CHAVEC = True
FACA_CHAVEI = False
    
While FACA_CHAVEC
  DIGITAC()
  If CHAVEC = 9 Then QuitLoop EndIf      
  SetaCorRegistro("Padrao")
  
  If CHAVEC=1
     Then Controle_Dia()
  EndIf  
  ;----------------------------  
  Moveto [Numero do Lancamento]
  UnLockRecord
  PickForm "1"
  ;----------------------------
  Moveto "RqItem"
  
  While FACA_CHAVEI
    CHAVEI()
    If CHAVEI=9  Then QuitLoop  EndIf
    If CHAVEI=7  Then     Loop  EndIf
    If CHAVEI<>8
       Then ITEM=[Sequencia do Lancamento]
            Controla_EdicaoI() 
    EndIf
  EndWhile
  SetaCorRegistro("Padrao")

  Moveto "RqCabeca"
  If CHAVEF=8 Then QuitLoop EndIf  
EndWhile
                                              
If RecordStatus("Locked") Then UnLockRecord EndIf         

AtualizaRegistroControle("Numero do Lancamento",LANCTO,MODOPAGINA)
If OPCAO_FORM="1"
  Then PickForm "1"
  Else PickForm "F"
EndIf

EndProc ;Controla_EdicaoC()

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

VSDGEMPRESA    = ""
VSDGNOMEMP     = ""
VSDGTPDOCTO    = ""
VSDGNOMTPDOCTO = ""
VSDGREQUISIT   = ""
VSDGNOMREQUI   = ""
VSDGTPMOV      = ""
VSDGNOMTPMOV   = ""
VSDGTPOPE      = ""
VSDGNOMTPOPE   = ""
VSDGDTINI      = BlankDate()
VSDGDTFIM      = Today()

REGRAFILTRO    = ""

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"
SYS_VALOR()
If Not IsAssigned(SYS_EMPRESA_DEFAULT)  Then SYS_EMPRESA_DEFAULT=""    EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)    Then SYS_CHAPA_USUARIO="9999"  EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)    Then SYS_NIVEL_USUARIO ="S"    EndIf
If Not IsAssigned(SYS_NOME_USUARIO)     Then SYS_NOME_USUARIO  ="S"    EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)   Then SYS_CODIGO_CLIENTE=""     EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)     Then SYS_CONTROLE_DIA=""       EndIf
If Not IsAssigned(SYS_CONTROLE_DIA_MOD) Then SYS_CONTROLE_DIA_MOD = "" EndIf
If Not IsAssigned(SYS_TIPO_CONTRDIA)    Then SYS_TIPO_CONTRDIA    ="G" EndIf

If SYS_CHAPA_USUARIO<>"9999"
   Then Verifica_CtDia_Modulo("REQUISICAO")
EndIf   
     
;---- Mtodo p/ Localizar o Item -----------------------------------------------
If IsFile(PrivDir()+"RQCABECA.ini")
   Then LeiaINI(PrivDir()+"RQCABECA.ini","LOCALIZA_CODIGO.S.null")
EndIf
If Not IsAssigned(LOCALIZA_CODIGO) Then LOCALIZA_CODIGO=""  EndIf
ModoLocalizarItem("","","")

LimpaFiltro()
TabelaTemp      = ""             
TabelaPrincipal = "RqCabeca"

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

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

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
