;** 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: 20/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Monta_Opcoes()... p/ Empresas

;*******************************************************************************
;* Rotina para Localizar Registro Cabeca                                       *
;*******************************************************************************
Proc CHAVEC()
CHAVEF=0
INICIO_PAGINA=True
While True
   Moveto [Numero do Lancamento]
   End
   LANCTO=[Numero do Lancamento]

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

   SetaCorRegistro("Editar")
   While True
      VCITENS=0

  TECLA=""
  AguardaTeclasPadrao()

    Switch
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F3":
           If OPCAO_FORM=OPCAO_FORM_REL
              Then OPCAO_FORM=OPCAO_FORM_MAN
              Else OPCAO_FORM=OPCAO_FORM_REL
           EndIf
           Del
           CHAVEC=5
           Return
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           Del
           While True
             VCITENS=0
             
             If OPCAO_FORM=OPCAO_FORM_REL
                Then PAGINA("RqCabeca","MR")
                Else PAGINA("RqCabeca","MT")
             EndIf 
             LANCTO=[Numero do Lancamento]
             Switch
               Case EDITAR="S":
                    If OPCAO_FORM=OPCAO_FORM_REL
                       Then PickForm OPCAO_FORM_MAN
                    EndIf
                    Echo Normal
                    Echo Off
                    If Checa_Controle([Numero_Controle_Dia])
                       Then CHAVEC=0
                            Controla_EdicaoC()
                       Else UnLockRecord
                    EndIf
               Case EXCLUIR="S":
                    If OPCAO_FORM=OPCAO_FORM_REL
                       Then PickForm OPCAO_FORM_MAN
                    EndIf
                    Echo Normal
                    Echo Off                   
                    If Checa_Controle([Numero_Controle_Dia])
                       Then If QuerExcluir("")
                               Then If Checa_Supervisor()
                                       Then EXCLUSAO("Cabeca")
                                    EndIf        
                            EndIf  
                       Else UnLockRecord           
                    EndIf      
               OtherWise: QuitLoop
             EndSwitch
             If OPCAO_FORM=OPCAO_FORM_REL
                Then PickForm OPCAO_FORM_REL
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC":
           CHAVEC=9
           Del
           Return
      Case Retval="ENTER":
           If IsBlank([])
              Then If IsBlank(LANCTO)
                      Then LANCTO="1"
                      Else LANCTO=StrVal(NumVal(LANCTO)+1)
                   EndIf
                   []=LANCTO
           EndIf
           []=ALINH()
           LANCTO=[]
           Del
           If OPCAO_FORM=OPCAO_FORM_REL
              Then PickForm OPCAO_FORM_MAN
           EndIf
           Locate LANCTO
           If Retval
              Then CHAVEC=0
              Else CHAVEC=1
                   End PgDn
                   Moveto [Numero do Lancamento]
                   []=LANCTO
           EndIf
           If Not IsLockRecord()
              Then Echo Normal
                   Echo Off
                   If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                      (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
                      Then Return
                   EndIf
           EndIf
           If CHAVEC=1
              Then Del
           EndIf
           If OPCAO_FORM=OPCAO_FORM_REL
              Then PickForm OPCAO_FORM_REL
           EndIf
           QuitLoop
      EndSwitch
   EndWhile
EndWhile
EndProc  ; (ChaveC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()
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]
        INICIO_PAGINA=False
   Else 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
[Sequencia do Item]=BlankNum()

While True

      TECLA=" Esc=Retornar  "

      If Field()="Codigo da Empresa"         Or
         Field()="Codigo da Empresa Destino" Or
         Field()="Codigo do Documento"       Or
         Field()="Requisitante"              Or
         Field()="Tipo de Movimento"         Or 
         Field()="Tipo de Operacao"
         Then TECLA=TECLA+"F1=Tabelas  "
         Else TECLA=TECLA+"            "
      EndIf
      If CHAVEC=0
         Then TECLA=TECLA+"F8/=Itens  Del=Excluir  "
      EndIf

    ;  If Field()="Codigo da Empresa"    Then Monta_Opcoes("Empresas","")  EndIf

      Prompt TECLA
      SetaCorRegistro("Editando")
      Wait Field
           Until "F1","ESC","ENTER","F8","DEL","FIELDVIEW","F35","DOWN"

      Switch
      Case RetVal="F1":
           If Field()="Codigo da Empresa"         
              Then Seleciona_Opcoes("Empresas","CR")
           Endif

           If Field()="Codigo da Empresa Destino" Or
              Field()="Codigo do Documento"       Or
              Field()="Requisitante"
              Then CONSULTAF1()
           EndIf
           
           If Field()="Codigo da Empresa Destino"
              Then Ativa_Lookup()
                   Moveto [Codigo da Empresa]
                   Locate [RqCabeca->Codigo da Empresa Destino]
                   If RetVal
                      Then NOME_FANTASIA_EMP_DEST=[Nome Fantasia Empresa]
                   EndIf
                   KeyPress "Esc"
                   [Nome Fantasia Empresa Trf]=NOME_FANTASIA_EMP_DEST
           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
                     "~P~roduo      " : " Produo      " : "PRODUCAO"  
                   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 Del
                        CHAVEC=9
                        QuitLoop
                EndIf
           Case Field()="Tipo de Movimento":
                Moveto [Codigo da Empresa  ]
           Case Field()="Tipo de Operacao":
                Moveto [Tipo de Movimento  ]
                
           Case Field()="Codigo da Empresa Destino":
                Moveto [Tipo de Operacao]
           Case Field()="Numero do Documento":
                Moveto [Codigo do Documento]
           Case Field()="Codigo do Documento":
                Moveto [Tipo de Operacao]     
           Case Field()="Requisitante":
                If CHAVEC=0
                   Then If QuerDesfazer("")
                           Then Undo
                                CHAVEC=9
                                QuitLoop
                        EndIf
                   Else Left
                EndIf
           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 EXCLUSAO("Cabeca")
                                   CHAVEC=9
                                   QuitLoop
                           EndIf        
                   EndIf
           EndIf
      Case Retval="ENTER":
           Switch
           Case Field()="Codigo da Empresa":
debug    ;            If Not Checa_Opcoes("Empresas",[])
         ;          Then Mensagem("Empresa inv lida !")
         ;               Loop
         ;       EndIf
                If Not IsBlank([])
                   Then If Not Carrega_Parametros()
                           Then Loop
                        EndIf
                        Moveto [Tipo de Movimento]
                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 []<>"P" 
                           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 []="C" : [Descricao da Operacao]="CONSUMO"
                  Case []="T" : [Descricao da Operacao]="TRANSFERENCIA"
                  Case []="D" : [Descricao da Operacao]="DEVOLUCAO"
                  Case []="O" : [Descricao da Operacao]="OUTRAS"
                EndSwitch                 
                If []="T" And [Tipo de Movimento]="S"
                   Then Moveto [Codigo da Empresa Destino]
                   Else Moveto [Codigo do Documento]
                        [Codigo da Empresa Destino]="" 
                        Resynckey
                EndIf
           Case Field()="Codigo da Empresa Destino":
                If []<>[Codigo da Empresa] And Not IsBlank([])
                   Then Moveto [Codigo do Documento]
                        Resynckey
                   Else FastMsg("Empresa destino inv lida !")
                EndIf
           Case Field()="Codigo do Documento":
                If Not IsBlank([])
                   Then Moveto [Numero do Documento]
                EndIf
           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 IntervaloData([Data de Ocorrencia])
                   Then Loop
                EndIf

                Moveto [Requisitante]
           Case Field()="Requisitante":
                CHAVEF=0
                QuitLoop
           EndSwitch
      EndSwitch
EndWhile
EndProc   ; (DigitaC)

;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc CHAVEI()
While True
  Moveto "Rqitem"
  Moveto [Sequencia do Lancamento]  VCITENS =ImageCCount()
  Moveto [Custo Total            ]  TOTVALOR=ImageCSum()
  Moveto [Quantidade             ]  QUANTTOT=ImageCSum()

  Moveto "Rqcabeca"
  [Valor Total     ]=TOTVALOR
  [Quantidade Total]=QUANTTOT

  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
                 
  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",
                  "F9  ~A~tiva CDBarras      " : " Ativa Leitura Codigo de Barras           " : "F9",
                  "~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="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 da Empresa Destino]
           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
             CHAVEI=9
             CHAVEF=8
             Return
        Case Retval="ESC":
             Del
             Moveto [Sequencia do Lancamento]
             If RecordStatus("New")=True
                Then CHAVEF=9
                Else CHAVEF=8 
             EndIf
             CHAVEI=9 
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               Moveto [Sequencia do Lancamento]  VCITENS =ImageCCount()
               Moveto [Custo Total            ]  TOTVALOR=ImageCSum()
               Moveto [Quantidade             ]  QUANTTOT=ImageCSum()

               Moveto "Rqcabeca"
               [Valor Total     ]=TOTVALOR
               [Quantidade Total]=QUANTTOT
               Moveto "Rqitem"
               Moveto [Sequencia do Lancamento]

               PAGINA("RqItem","MR")
               ITEM = [Sequencia do Lancamento]
               If EDITAR="S"
                  Then CHAVEI=0
                       Controla_EdicaoI()
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then If Checa_Supervisor()
                                          Then EXCLUSAO("Item")
                                               Moveto "RqItem"
                                       EndIf
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
               
               QuitLoop
             EndWhile
             QuitLoop
        Case Retval="ENTER":
             If Not Seta_Sequencia(ITEM,True)
                Then Del
                     QuitLoop
             EndIf
             ITEM=[]
             Del
             
             If Item<>1
                Then FastMsg(" permitido apenas 1 produto !")
                     QuitLoop
             EndIf        
             
             Locate LANCTO,ITEM
             If Retval
                Then CHAVEI=0
                Else CHAVEI=1
                     End Down
                     [Numero do Lancamento   ] = LANCTO
                     [Sequencia do Lancamento] = ITEM
                     Locate LANCTO,ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)

;*******************************************************************************
;* Rotina para Localizar Registro materia prima                                *
;*******************************************************************************
Proc CHAVEM()
While True
  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
                 
  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While true
        Moveto "Rqmatpri"
        Moveto [Sequencia Materia Prima]

        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
                  "F5  C~o~nsulta            " : " Consultar Tabela Preo                   " : "F5",
                  "~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="F3":
             Del
             Moveto [Sequencia Materia Prima]
             If RecordStatus("New")
                Then MENSAGEM("Sem Item p/ ver !")
                     QuitLoop
             EndIf
             Opcao_Ver=True
             CHAVEM=0
             Home
             ITEM=[Sequencia Materia Prima]
             Inicia_Registro()
             DigitaI()
             QuitLoop
        Case Retval="F5":
        TABANT=Table()
        
        COD_EMPRESA=[RqCabeca->Codigo da Empresa]
        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 "Rqmatpri"        
                       
       If Sw_Item_Pesquisado="" Then QuitLoop EndIf
       
        While True
          Moveto [Sequencia Materia Prima]
          End
          NITEM = [Sequencia Materia Prima]
          Down
          Moveto [Sequencia Materia Prima]
          Seta_Sequencia(NITEM,False)
          If IsLockRecord()
             Then Del
                  Loop
          EndIf
          QuitLoop
         EndWhile           
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf

         SEQIT=[Sequencia Materia Prima]
         CHAVEM=1
         [Numero do Lancamento   ]=LANCTO
         [Sequencia Materia Prima]=SEQIT
         [Codigo do Item         ]=Sw_Item_Pesquisado
         Item_Ins_Consulta=True
           
         ITEM = [Sequencia Materia Prima]

         Return
                      
        Case RetVal="PGDN":   
             Del
             Moveto [Sequencia Materia Prima]
             If RecordStatus("New")=True
                Then MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item Ok !")
                     QuitLoop
             EndIf
             CHAVEM=7
             CHAVEF=8
             Return
        Case Retval="ESC":
             Del
             Moveto [Sequencia Materia Prima]
             If RecordStatus("New")=True
                Then CHAVEF=9
                Else CHAVEF=8 
             EndIf
             CHAVEM=9 
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               Moveto "Rqmatpri"
               Moveto [Sequencia Materia Prima]

               PAGINA("Rqmatpri","MR")
               ITEM = [Sequencia Materia Prima]
               If EDITAR="S"
                  Then CHAVEM=0
                       Controla_EdicaoI()
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then If Checa_Supervisor()
                                          Then EXCLUSAO("Item")
                                               Moveto "Rqmatpri"
                                       EndIf
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ENTER":
             If Not Seta_Sequencia(ITEM,True)
                Then Del
                     QuitLoop
             EndIf
             ITEM=[]
             Del
             Locate LANCTO,ITEM
             If Retval
                Then CHAVEM=0
                Else CHAVEM=1
                     End Down
                     [Numero do Lancamento   ] = LANCTO
                     [Sequencia Materia Prima] = ITEM
                     Locate LANCTO,ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveM)

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

If INICIO_DIALOG
   Then If CHAVEI=0
           Then Campo="I_Quantidade"
           Else Campo="I_Codigo_Item"
        EndIf
        INICIO_DIALOG=False
EndIf

If 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"] = -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

                    ConsultaF1()
                    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   ]
                            Campo="I_Codigo_Item"
                    EndIf

                    If Campo="I_CCusto"
                       Then VSD_I_CCusto          =[Codigo CCusto   ]
                            VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                            Campo="I_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 Moveto [Codigo do Item]
                          Ativa_Lookup()
                          If Len(ControlValue("I_Codigo_Item"))<=10
                             Then Moveto [Codigo do Item]
                                  Locate ALINHM(ControlValue("I_Codigo_Item"),10)
                             Else Moveto [Codigo de Barras]
                                  Locate IndexOrder by "cod_barras" ControlValue("I_Codigo_Item")
                          EndIf

                          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 !")
                                          KeyPress "ESC"
                                     Else KeyPress "ESC"
                                          [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 da Empresa Destino],
                                                         [RqItem->Codigo do Item], ANO, MES
                                                  If Not RetVal
                                                     Then If Not Cria_Ficha([RqCabeca->Codigo da Empresa Destino],[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 ]="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)
                                          Moveto [Quantidade]

                                          Campo="I_Quantidade"
                                  EndIf
                             Else Mensagem("Item no Cadastrado !")
                                  VSD_I_Codigo_Item   =""
                                  VSD_I_Descricao_Item=""
                                  VSD_I_UN_Item       =""
                                  VSD_I_CF_Item       =""
                                  VSD_I_CST_Item      =""
                                  VSD_I_Tipo_Item     =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_Quantidade":
                  VSD_I_Quantidade=ControlValue("I_Quantidade")
                  [Quantidade]=VSD_I_Quantidade
                  If CHECA_ESTOQUE()
                     Then Campo="I_Custo_Unitario"
                  EndIf
             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"  : AcceptDialog

           EndSwitch
           RefreshDialog Registro_Item("Gravar")
           Temp=False
   EndSwitch
EndIf
SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item" Or
   Campo="I_CCusto"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="I_Codigo_Item":
       MSGCAMPO="Codigo do Item"
  Case Campo="I_Descricao_Item":
       MSGCAMPO="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"
  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))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog
Return TEMP
EndProc  ; (Item_Dialog)

;*******************************************************************************
;* 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 Digitacao Item                                                  *
;*******************************************************************************
Proc DIGITAI()
Showdialog "Dados do Item [     ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 12,08 height 08 width 63

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

   Label  @ 00,01 "Codigo Item" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,15 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,15 Width 33 "A30" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,49 "TI" For "I_Tipo_Item"
   Accept @ 01,49 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   Label  @ 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 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 Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro
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          ]

EndSwitch
EndProc  ; (Registro_Item)

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO(TIPO)
Private TIPO
Switch
Case TIPO="Cabeca":
     Moveto "RqItem"
     While RecordStatus("New")=False
           ITEM=[Sequencia do Lancamento]
           ESTOQUE("Exclusao")
           If [RqCabeca->Tipo de Movimento]="E" And
              [RqCabeca->Tipo de Operacao ]="P"
              Then EXCLUIMAT()
           Endif
           Moveto "RqItem"
           Del
     EndWhile
     Moveto "RqCabeca"
     Del
Case TIPO="Item":
     ESTOQUE("Exclusao")
     If [RqCabeca->Tipo de Movimento]="E" And
        [RqCabeca->Tipo de Operacao ]="P"
        Then EXCLUIMAT()
     Endif
     Moveto "RqItem"
     Del
EndSwitch
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

         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->Custo Unitario]<>[Preco de Custo]               And
            [RqItem->Quantidade]=BlankNum() Or [RqItem->Quantidade]=0 
            Then If ([Custo Total Atual]/[Saldo Atual])>0
                     Then [Data do Preco de Custo]=[RqCabeca->Data de Ocorrencia]
                          [Preco de Custo        ]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                  EndIf 
         EndIf
         
        ;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 ]="O") And
        ;   [RqItem->Custo Unitario]>0 And             
        ;   [RqItem->Custo Unitario]<>[Preco de Custo] And
        ;   [RqItem->Quantidade]>0 
        ;   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
        ;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 da Empresa Destino]
          If TPMOV="E"
             Then TPMOV="S"
             Else TPMOV="E"
          EndIf
     Else QuitLoop
  EndIf

EndFor
Moveto "RqItem"
EndProc  ; (Estoque)

;*******************************************************************************
;* 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()
Moveto "RqMatPri"
While RecordStatus("New")=False
   ESTOQUEMAT("VOLTA")
   Del
EndWhile
EndProc   ; (ExcluiMat)

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

If IsEmpty("P_Requis")
   Then Mensagem("No esta Configurado os Parametros para Digitao !")
        Result=False
   Else 
        UnLockRecord
        KeyPress "F7"
        While True
          If Not IsLockRecord()
             Then QuitLoop
          EndIf
        EndWhile

        Moveto "P_Requis"
        Moveto [Codigo_Empresa]
        Locate [RqCabeca->Codigo da Empresa]
        If Not RetVal
           Then Mensagem("Parametros no Cadastrado para esta Empresa !")
                Result=False
           Else     
                PARAM_EMPRESA         = [Codigo_Empresa           ]
                PARAM_BLOQUEIA_NEG    = [Bloqueia_Estoque_Negativo]
                PARAM_EXPLODE_MATPRIMA= [Explosao_Materia_Prima   ]

                Result=True
        EndIf
EndIf

Moveto "RqCabeca"
KeyPress "F7"

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 para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()

Moveto [Sequencia do Lancamento]  VCITENS =ImageCCount()
Moveto [Custo Total            ]  TOTVALOR=ImageCSum()
Moveto [Quantidade             ]  QUANTTOT=ImageCSum()

While True
   
  Moveto "Rqitem"
  End
  Down

  If Not Ler_CDBarras(22,00)
     Then Return False
  EndIf

  ITOK=True 

  If Len(Dados_Item)>0
     Then CODIT=Dados_Item

         While True
          ITOk =True

          Moveto [Codigo do Item]
          Ativa_Lookup()
          Switch
            Case SYS_CODIGO_CLIENTE="0304":
                  Moveto [Codigo de Barras]
                  Locate IndexOrder by "cod_barras" CODIT
            OtherWise:        
                  If Len(CODIT)<=10
                    Then Moveto [Codigo do Item]
                         Locate ALINHM(CODIT,10)
                    Else Moveto [Codigo de Barras]
                         Locate IndexOrder by "cod_barras" CODIT
                  EndIf        
          EndSwitch       

          
          
          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"

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

                  TOTVALOR=TOTVALOR-[Custo Total   ]
                  QUANTTOT=QUANTTOT-[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 da Empresa Destino],
                                 [RqItem->Codigo do Item], ANO, MES
                          If Not RetVal
                             Then If Not Cria_Ficha([RqCabeca->Codigo da Empresa Destino],[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 ]="E" Or
                     [RqCabeca->Tipo de Operacao ]="R"
                     Then CUSTOMEDIO=[Preco de Custo]
                  EndIf

                  Moveto "RqItem"
                  VSD_I_Custo_Unitario=NDecimal(CUSTOMEDIO,5)
          EndIf
          VSD_I_Quantidade =VSD_I_Quantidade+Dados_QTD
          If Not CHECA_ESTOQUE() And Not CHECA_FORMULA()
             Then If CHAVEI=1
                     Then Del
                          Loop
                     Else UnLockRecord
                          QuitLoop
                  EndIf
          EndIf
          VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
          Moveto [Quantidade]
          Registro_Item("Gravar")

          If CHAVEI=1
             Then VCITENS =VCITENS +1
          EndIf   
          TOTVALOR=TOTVALOR+[Custo Total   ]
          QUANTTOT=QUANTTOT+[Quantidade    ]

          UnlockRecord

          ESTOQUE("IncAlt")
          If [RqCabeca->Tipo de Movimento]="E" And
             [RqCabeca->Tipo de Operacao] ="P" And
             PARAM_EXPLODE_MATPRIMA="S"
             Then EXCLUIMAT()
                  FORMULA()
          Endif
          UnlockRecord
          
          Moveto "Rqcabeca"
          [Valor Total     ]=TOTVALOR
          [Quantidade Total]=QUANTTOT
        
          Moveto "RqItem"

          QuitLoop
         EndWhile
  EndIf
EndWhile

EndProc

;*******************************************************************************
;* Rotina para Recalcular consumo da formula                                   *
;*******************************************************************************
Proc Recalc_Consumo()
Private Ok, custo
debug
ok=False
If [RqCabeca->Tipo de Movimento]="E" And
   [RqCabeca->Tipo de Operacao] ="P"
   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 do custo do item conforme consumo ?")
   Then Return
EndIf        

Moveto "RqItem"
Home

Moveto "RqCabeca"
[Sequencia do Item]=[RqItem->Sequencia do Lancamento]

custo=0
Moveto "Rqmatpri"
NR = NImageRecords()
Scan

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

 custo=custo+[Custo Total]
EndScan
Moveto "RqItem"
QUANTANT=[RqItem->Quantidade ]
CUSTOANT=[RqItem->Custo Total]

[Custo Total   ]=custo
[Custo Unitario]=NDecimal([Custo Total]/[Quantidade],5)

ESTOQUE("IncAlt")

Moveto "RqCabeca"
[Sequencia do Item]=BlankNum()

Moveto "RqItem"

Mensagem("Processo finalizado !")
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
DIGITAI()
If CHAVEI=1 Or CHAVEI=0
   Then ESTOQUE("IncAlt")
   
        Moveto "RqCabeca"
        [Sequencia do Item]=[RqItem->Sequencia do Lancamento]
        Moveto "Rqmatpri"
        While True
          CHAVEM()          
          If CHAVEM=9 Then QuitLoop EndIf
          Controla_EdicaoI()
        EndWhile
        SetaCorRegistro("Padrao")

        Moveto "RqItem"
EndIf
SetaCorRegistro("Padrao")
EndProc
 
;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
While True
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1 Then Controle_Dia() EndIf
  SetaCorRegistro("Padrao")
  Moveto "RqItem"
  While True
    CHAVEI()          
    If CHAVEI=9 Then QuitLoop EndIf
    Controla_EdicaoI()
  EndWhile                          
  Moveto "RqCabeca"
  If CHAVEF=8 Then QuitLoop EndIf
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM=OPCAO_FORM_REL
   Then PickForm OPCAO_FORM_REL   
EndIf
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""   EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO=""     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

View NOWINDOW "Itens"
View NOWINDOW "SdEstq"
View NOWINDOW "EstqPrm"
View NoWindow "P_Requis"
CoEdit NoWindow "RqCabeca"
          
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return             
EndIf

OPCAO_FORM_REL="F"
OPCAO_FORM_MAN="5"
OPCAO_FORM    =OPCAO_FORM_REL

PickForm OPCAO_FORM_MAN
Moveto "\\Sistemas\\Producao\\FormulaC" SetaCorRegistro("Invisivel")
Moveto "\\Sistemas\\Producao\\FormulaI" SetaCorRegistro("Invisivel")
Moveto "SdEstq"   SetaCorRegistro("Invisivel")
Moveto "EstqPrm"  SetaCorRegistro("Invisivel")
Moveto "RqItem"   SetaCorRegistro("Padrao")
Moveto "RqMatPri" SetaCorRegistro("Padrao")

Moveto "RqCabeca"
PickForm OPCAO_FORM
If NRecords("Rqcabeca")>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
                   
While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then PickForm OPCAO_FORM
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
