;** RqCabecg *******************************************************************
;*  Digitacao de Requisicao de Estoque (Grade) Ver.Estoque/Explosao Mat.Prima  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido em : 17/01/2006 por Anivel Augusto Rodrigues
;Ultima Alteracao: 24/08/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 23/05/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle Mouse
;Ultima Alteracao: 22/06/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Ultimo custo
;Ultima Alteracao: 21/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Referencia+Cor
;Ultima Alteracao: 19/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Venus/Referencia
;Ultima Alteracao: 01/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 31/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes 0003,0200
;Ultima Alteracao: 27/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Monta_Array_Grade()
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 15/01/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ordem consulta cores             
;Ultima Alteracao: 24/05/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado Funoes (ProgramaÆo do Corte)
;Ultima Alteracao: 14/06/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_RqI()     
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha 
;Ultima Alteracao: 15/09/2010 por Karina Andrade
;Motivo Alteracao: Ajustes codigo cliente confecÆo
;Ultima Alteracao: 24/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mesnagem formula nÆo encontrada
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas       
;Ultima Alteracao: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;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: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova CodificaÆo
;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: 23/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir cores em ordem Alfabetica               
;Ultima Alteracao: 25/05/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado Rotina para C¢digo de Barras
;Ultima Alteracao: 07/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir cores em ordem sequencia lupus         
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 21/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Monta_array com Valida                        
;Ultima Alteracao: 22/07/2011 por Karina Andrade
;Motivo Alteracao: Ajustes                   
;Ultima Alteracao: 30/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CUSTO=0->CUSTO=[Ultimo Custo Total]
;Motivo Alteracao: Add ShowPopup "Movimento" e "OperaÆo", InclusÆo "Nome Fantasia 
;                  Empresa Trf" e excluido do form "Nome Fantasia"   
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() nÆo usar imagecsum()
;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: 31/05/2013 por Kamila Gomes
;Motivo Alteracao: Add PARAM_QTD_CDBAR 
;Ultima Alteracao: 16/09/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Codigo do Documento" e "Codigo da Empresa" Monta_Opcoes()
;Ultima Alteracao: 02/04/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes para quando informar requisitante diferente "Producao" ou "Corte"
;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: 15/09/2014 por Kamila Gomes
;Motivo Alteracao: Adicionado VerificaÆo Controle dia por m¢dulo requisiÆo
;Ultima Alteracao: 16/10/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado nova rotina para verificaÆo do Numero do Lancamento
;Ultima Alteracao: 29/10/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes inclusÆo de registro em intervalo de data
;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: 06/04/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado Monta_Array_Grade() -> Array_Monta_Grade() e adicionado-o na Bib_Proc
;Ultima Alteracao: 06/04/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando nÆo existir item na proc Gera_RqI()
;Ultima Alteracao: 30/09/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado "Codigo da Empresa Destino" - > "Codigo"
;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: 11/04/2016 por Bruno Carvalho  
;Motivo Alteracao: Ajustado rotina p/ permitir apenas lanamentos de grade [Sistema Gerador]="MG"/"PC"/"PF"/"RF" ** MG = MANUAL GRADE **
;Ultima Alteracao: 12/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado MontaRodapeSD() p/ padronizaÆo
;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: 24/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ buscar c¢digo de barra na "Iten_Bar" -> Codigo_Barras2() 
;Ultima Alteracao: 16/08/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ bloq ediÆo qd [Sistema Gerador]="PC","PF","RF" ou "CO" -> alterando CodItem de 03 p/ 02 no rqitem se editado
;Ultima Alteracao: 09/01/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes CORTE
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 31/05/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no processo para localizar codbar da proc CDBarras()
;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"

;*******************************************************************************
;* Rotina para Localizar Registro Cabeca                                       *
;*******************************************************************************
Proc CHAVEC()
CHAVEF=0 

While True

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

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

   SetaCorRegistro("Editar")
   While True
    
    MSGCAMPO=""
    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="3"
              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
             If OPCAO_FORM="F"
                Then PAGINA(TabelaControle,"MR") ;FILTRO
                Else PAGINA(TabelaControle,"MT") ;FILTRO
             EndIf
             LANCTO          = [Numero do Lancamento]
             SISTEMA_GERADOR = Sistema_Gerador()
             CopyToArray REG_CABECA
             Switch
               Case EDITAR="S":
                    If PegaRegistroControle("Numero do Lancamento",LANCTO) ;FILTRO
                       Then PickForm "4"
                            Echo Normal
                            Echo Off
                            If Checa_Controle([Numero_Controle_Dia])
                               Then CHAVEC=0
                                    Controla_EdicaoC()
                               Else UnLockRecord
                            EndIf
                       Else UnLockRecord
                            Mensagem("Somente lanamento Entrada de Produo/Industrializao ou//lanamentos da Confeco/Produo!")
                    EndIf
               Case EXCLUIR="S":
                    If [Tipo de Movimento]="E"                              And
                       ([Tipo de Operacao ]="P" Or [Tipo de Operacao ]="I") And
                       PegaRegistroControle("Numero do Lancamento",LANCTO) ;FILTRO
                       Then PickForm "4"
                            Echo Normal
                            Echo Off
                            If Checa_Controle([Numero_Controle_Dia])
                               Then OK="N"
                                    Moveto "RqItemG"
                                    Moveto [Sequencia do Lancamento]
                                    If RecordStatus("New")=True
                                       Then Moveto "RqItem"
                                            Moveto [Numero do Lancamento]
                                            Locate REG_CABECA["Numero do Lancamento"]
                                            If RetVal
                                               Then MSG="O Lanamento deve ter pelo menos 1(um) Item Ok !////"
                                                    MSG=MSG+"Verificar o Lanamento pela digitao padro Ok !"
                                                    Mensagem(MSG)
                                                    OK="N"
                                               Else If QuerExcluir("")
                                                       Then OK="S"
                                                    EndIf
                                            EndIf
                                       Else If QuerExcluir("")
                                               Then OK="S"
                                            EndIf   
                                    EndIf
                                    Moveto "RqCabeca"
                                    If OK="S"
                                       Then If Checa_Supervisor()
                                               Then GRAVA_LOG=True
                                                    EXCLUSAO("Cabeca")
                                                    AtualizaRegistroControle("Numero do Lancamento",LANCTO,MODOPAGINA) 
                                            EndIf   
                                       Else UnLockRecord
                                    EndIf
                               Else UnLockRecord
                            EndIf
                       Else UnLockRecord
                            Mensagem("Somente lanamento Entrada de Produo/Industrializao ou//lanamentos da Confeco/Produo!")
                    EndIf
               OtherWise: QuitLoop
             EndSwitch
             
             FormKey
             Moveto TabelaControle
             
             If OPCAO_FORM="3"
                Then PickForm "4"
                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 "4"    
                 Moveto [Numero do Lancamento]       
              OtherWise:
                 If Not VerificaRegistroTemp("Lanamento no encontrado !") 
                    Then QuitLoop
                 EndIf   
                 LANCTO=IncluiRegistroControle("Numero do Lancamento")   
                 PickForm "4"    
                 Moveto [Numero do Lancamento]
                 []=LANCTO
           EndSwitch
           If PROXIMO_LANCTO_REG_ACHOU
              Then CHAVEC=0
                   STATUSFILTRO    = "UPDATE"
                   If Checa_Controle([Numero_Controle_Dia])
                      Then Return
                   EndIf
              Else CHAVEC=1
                   STATUSFILTRO         = "INSERT"
                   [Sistema Gerador   ] = "MG"
                   [Lancamento Gerador] = LANCTO
                   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)


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

If CHAVEC=1
   Then If Not IsBlank(SYS_EMPRESA_DEFAULT)
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf
        Moveto [Codigo da Empresa]
        [Tipo de Movimento     ]="E"
        [Descricao do Movimento]="ENTRADA"
        [Sistema Gerador       ]="MG"
        [Lancamento Gerador    ]=LANCTO
        SISTEMA_GERADOR = Sistema_Gerador()
   Else If ([Sistema Gerador]<>"MA" And [Sistema Gerador]<>"RR") And
           ([Sistema Gerador]<>"PC" And [Sistema Gerador]<>"PF" And
            [Sistema Gerador]<>"RF" And [Sistema Gerador]<>"RR" And [Sistema Gerador]<>"CO") And
           (([Tipo de Movimento]="S" And ([Tipo de Operacao ]="C")) Or
           ([Tipo de Movimento]="E" And ([Tipo de Operacao ]="P" Or [Tipo de Operacao ]="I")) Or
           ([Tipo de Movimento]="E" And ([Tipo de Operacao ]="D")))
           Then Moveto "RqItemG"
                Moveto [Sequencia do Lancamento]
                If RecordStatus("New")=True
                   Then Moveto "RqItem"
                        Moveto [Numero do Lancamento]
                        Locate [RqCabeca->Numero do Lancamento]
                        If RetVal
                           Then MSG="O Lanamento deve ter pelo menos 1(um) Item Ok !////"
                                MSG=MSG+"Verificar o Lanamento pela digitao padro Ok !"
                                Mensagem(MSG)
                                Moveto "RqCabeca"
                                CHAVEC=9
                                Return
                        EndIf
                EndIf
                Moveto "RqCabeca" 
                If Not IsBlank([Codigo da Empresa])
                   Then If Not Carrega_Parametros()
                           Then If CHAVEC=1
                                   Then Del
                                EndIf
                                CHAVEC=9
                                Return
                        EndIf
                EndIf
                CHAVEF=0
                Return
           Else If [Sistema Gerador]="PC" Or 
                   [Sistema Gerador]="PF" Or
                   [Sistema Gerador]="RF" Or
                   [Sistema Gerador]="CO"
                   Then Mensagem(Completa("Lanamentos de requisies gerados a partir da CONFECCAO/PRODUCAO:",71," ")+"//"+
                                 Completa("04. Produo do Corte;",71," ")+"//"+
                                 Completa("02. Programao Interna/Externa;",71," ")+"//"+
                                 Completa("03. Produo Interna/Externa;",71," ")+"////"+
                                 Completa("No pode ser editado, caso tenha necessidade de realizar alteraes,",71," ")+"//"+
                                 Completa("execute a rotina espec¡fica do lanamento.",71," "))
                   Else Mensagem("Somente lanamento Entrada de Produo/Industrializao!")
                EndIf   
                Moveto "RqCabeca"
                CHAVEC=9
                Return   
        EndIf
EndIf

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

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 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","RQ")
      EndIf
      
      If Field()="Codigo da Empresa"      
         Then Monta_Opcoes("Empresas","RQ")     
      EndIf 
        
      MSGCAMPO=Field()  
        
      Prompt TECLA
      SetaCorRegistro("Editando")
      Wait Field
           Until "ESC","ENTER","F8","DEL","FIELDVIEW","F35", "DOWN","F1"

      Switch
      Case RetVal="F1":
           If Field()="Numero do Corte"             Or
              Field()="Codigo"                      Or
              Field()="Requisitante"
              Then CONSULTAF1()
           EndIf                  
           
           If Field()="Tipo de Operacao" And [Tipo de Movimento]="E"
              Then Echo Normal
                   Echo Off
              
                   ShowPopup " Tipo de Operacao " @ 5,16
                     "~P~roduo        " : " Produo/Pr¢pria         " : "PRODUCAO",
                     "~I~ndustrializao" : " Industrializao/Terceiro" : "INDUSTRIALIZADO"
                   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()="Codigo do Documento"
              Then Seleciona_Opcoes("Codigo do Documento","CD")
           EndIf    
           
          If Field()="Codigo da Empresa"         
             Then Seleciona_Opcoes("Empresas","CR")
          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"
                  OtherWise                                               : VSDG_TITULO = ""
                EndSwitch    
                Moveto [Codigo da Empresa]
           Case Field()="Codigo":
                Moveto [Tipo de Operacao]
           Case Field()="Numero do Documento":
                Moveto [Codigo do Documento]
           Case Field()="Codigo do Documento":
                Moveto [Codigo da Empresa  ]
           Case Field()="Numero do Documento":
                Moveto [Codigo do Documento]         
           Case Field()="Requisitante":
                If CHAVEC=0
                   Then If QuerDesfazer("")
                           Then Undo
                                CHAVEC=9
                                QuitLoop
                        EndIf
                   Else Moveto [Data de Ocorrencia]
                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 CONFGERAL("Exclui Requisio")
                   If OK="S"
                      Then GRAVA_LOG=True
                           EXCLUSAO("Cabeca")
                           CHAVEC=9
                           QuitLoop
                   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     
                        Moveto [Tipo de Operacao]
                EndIf   
           Case Field()="Tipo de Movimento":
                If [] <> "E"
                   Then FastMsg("Movimento inv lido !")
                        Loop
                EndIf
                Switch
                  Case []="E" : [Descricao do Movimento]="ENTRADA"
                EndSwitch  
                Moveto [Tipo de Operacao]
           Case Field()="Tipo de Operacao":
                If [Tipo de Movimento]="E"
                   Then If []<>"P" And []<>"I" 
                           Then FastMsg("OperaÆo inv lida, somente operao de (P)Produo/(I)Industrializao !")
                                Loop
                        EndIf
                   Else FastMsg("Movimento inv lido !")
                        Loop     
                EndIf                
                Switch
                  Case []="P" : [Descricao da Operacao]="PRODUCAO"
                  Case []="I" : [Descricao da Operacao]="INDUSTRIALIZACAO"
                EndSwitch
                 Switch
                  Case [Tipo de Movimento]="E" And [Tipo de Operacao]="I" : VSDG_TITULO = "Industrializado pelo Fornecedor"
                  OtherWise                                               : VSDG_TITULO = ""
                EndSwitch
                If []="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]="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                     
                        Release Vars REG_DESTINAT
                   Else Switch
                          Case [Tipo de Movimento]="E" And [Tipo de Operacao]="I" : FastMsg("Fornecedor no informado !")
                        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
                        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 
                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] = "MN" : AUX = "MANUAL -> NE"
  Case [Sistema Gerador] = "MG" : AUX = "MANUAL GRADE"
  Case [Sistema Gerador] = "PC" : AUX = "PROD CORTE"
  Case [Sistema Gerador] = "PF" : AUX = "PROG INT_EXT"
  Case [Sistema Gerador] = "RF" : AUX = "PROD INT_EXT"
  Case [Sistema Gerador] = "RR" : AUX = "PROD INT_EXT"
  Case [Sistema Gerador] = "CO" : AUX = "CORTE"
  Case [Sistema Gerador] = "IX" : AUX = "IMP. XML"
  Case [Sistema Gerador] = "RM" : AUX = "REQ. MERC."
  Case [Sistema Gerador] = "NE" : AUX = "NOTA ENTRADA"
  Case [Sistema Gerador] = "NX" : AUX = "IMP->NotaEnt"
  Case [Sistema Gerador] = "DC" : AUX = "PROG. FUND"
  Case [Sistema Gerador] = "IM" : AUX = "IMPORTADO"       ;ImportaÆo de um sistema para outro TransfRQ   
  Otherwise                     : AUX = ""  
EndSwitch

Return AUX

EndProc ;Sistema_Gerador()

;*******************************************************************************
;* Rotina para Lanar Numero de Corte                                          *
;*******************************************************************************
Proc CORTE()

Del
Moveto "Rqcabeca"
UnLockRecord
KeyPress "F7"

VSD_CORTE = [RqCabeca->Numero do Corte]
;Echo Normal
;Echo Off

While True
  Ok=false
  Showdialog "Informe o Lanamento do Corte:" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea"
  @ 09,19 height 07 width 40

  Label  @ 1,03 "Informe o Lanamento:" for "TG_CORTE"
  Accept @ 1,26  Width 9 "A6" picture "#*#" Tag "TG_CORTE" to VSD_CORTE

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

  Enddialog
  If Not Retval Then QuitLoop EndIf 
  
  VSD_CORTE=AlinhM(VSD_CORTE,6)
  If VSD_CORTE <> [RqCabeca->Numero do Corte]
       Then MENSAGEM("O corte "+VSD_CORTE+"  diferente do informado na requisio!")
            Loop  
  EndIf
   
  Moveto "\\Sistemas\\Faccao\\Cfacrig"    
  Moveto [Numero_Corte]
  Locate VSD_CORTE
  If RetVal
     Then ok=true
     Else MENSAGEM("Programao do corte no encontrada!")
  EndIf
  QuitLoop
EndWhile     

If ok
   Then Num_Corte()
Endif

Moveto "Rqcabeca"
UnLockRecord
KeyPress "F7"
Moveto "RqitemG"

Echo Normal        
EndProc ;Corte()

;*******************************************************************************
;* Rotina Locliza Registro Numero Corte                                        *
;*******************************************************************************
Proc Num_Corte()

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

SEQLAN=ITEM

Moveto "\\Sistemas\\Faccao\\Cfacrig"     
Moveto [Numero_Corte]
Locate VSD_Corte
If RetVal
   Then While [Numero_Corte]=VSD_Corte 
              Moveto "Itens"
              Moveto [Referencia]
              Locate IndexOrder by "refcor_01" [\Sistemas\Faccao\Cfacrig->Referencia], "P", [\Sistemas\Faccao\Cfacrig->Codigo da Cor_Tecido]
              If RetVal
                 Then Moveto "SdEstq"
                      Moveto [Codigo da Empresa]
                      Locate [RqCabeca->Codigo da Empresa],
                             [Itens->Codigo do Item], ANO, MES
                            
                      If Not RetVal
                         Then Cria_Ficha([RqCabeca->Codigo da Empresa],[Itens->Codigo do Item],False)
                      EndIf
                      
                      CUSTOMEDIO=[Preco de Custo]
                                   NDecimal(CUSTOMEDIO,5)
                               
                      Moveto "RqItemg"                      
                      End Down
                      [Codigo do Item         ]=[Itens->Codigo do Item                            ]
                      [Numero do Lancamento   ]=[Rqcabeca->Numero do Lancamento                   ]
                      [Sequencia do Lancamento]=SEQLAN + 1
                      ; Tive que colocar soma, pois a variavel ITEM recebe " " e portanto a sequencia estava sendo feita errada.
                      [Codigo da Empresa      ]=[Rqcabeca->Codigo da Empresa                      ]
                      [Tipo do Item           ]=[Itens->Tipo do Item                              ]
                      [Referencia             ]=[\Sistemas\Faccao\Cfacrig->Referencia             ]
                      [Descricao do Item      ]=[Itens->Descricao do Item                         ]                           
                      [Qtd1                   ]=[\Sistemas\Faccao\Cfacrig->Qtd1                   ]
                      [Qtd2                   ]=[\Sistemas\Faccao\Cfacrig->Qtd2                   ]
                      [Qtd3                   ]=[\Sistemas\Faccao\Cfacrig->Qtd3                   ]
                      [Qtd4                   ]=[\Sistemas\Faccao\Cfacrig->Qtd4                   ]
                      [Qtd5                   ]=[\Sistemas\Faccao\Cfacrig->Qtd5                   ]
                      [Qtd6                   ]=[\Sistemas\Faccao\Cfacrig->Qtd6                   ]
                      [Qtd7                   ]=[\Sistemas\Faccao\Cfacrig->Qtd7                   ]
                      [Qtd8                   ]=[\Sistemas\Faccao\Cfacrig->Qtd8                   ]
                      [Qtd9                   ]=[\Sistemas\Faccao\Cfacrig->Qtd9                   ]
                      [Qtd10                  ]=[\Sistemas\Faccao\Cfacrig->Qtd10                  ]
                      [Qtd11                  ]=[\Sistemas\Faccao\Cfacrig->Qtd11                  ]
                      [Qtd12                  ]=[\Sistemas\Faccao\Cfacrig->Qtd12                  ]           
                      [Quantidade             ]=[\Sistemas\Faccao\Cfacrig->Quantidade Programada  ]
                      [Unidade Interna        ]=[\Sistemas\Faccao\Cfacrig->Unidade Interna        ]
                      [Custo Unitario         ]=CUSTOMEDIO
                      [Custo Total            ]=NDecimal(([Quantidade]*[Custo Unitario]),5)   
                      [Codigo da Grade        ]=[\Sistemas\Faccao\Cfacrig->Codigo da Grade        ]
                      [Codigo da Cor_Tecido   ]=[\Sistemas\Faccao\Cfacrig->Codigo da Cor_Tecido   ]
                      [Descricao da Cor_Tecido]=[\Sistemas\Faccao\Cfacrig->Descricao da Cor_Tecido]
                      UnLockRecord
    
                      SEQLAN=SEQLAN+1
              EndIf              
              Moveto "\\Sistemas\\Faccao\\Cfacrig"
              Skip                           
              If EOT() Then QuitLoop EndIf
         EndWhile   
EndIf   

EndProc ;Num_Corte()

;*******************************************************************************
;* Rotina para ConsultaF1()                                                    *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
    
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_CORTE"          : Campo="NO" 
            Case Campo="YES" Or Campo="NO" : Campo="TG_CORTE"
          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
          Switch
             Case Campo="TG_CORTE" : VSD_CORTE=ControlValue("TG_CORTE")
                                     Campo="YES" 
             Case Campo="YES"      : FIM_SHOWDIALOG=True
                                     LimpaRodape(0)
                                     KeyDisable -24
                                     AcceptDialog
             Case Campo="NO"       : FIM_SHOWDIALOG=True
                                     LimpaRodape(0)
                                     KeyDisable -24
                                     CancelDialog                        
          EndSwitch          
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="TG_CORTE":
     MSG_CAMPO="F1=Tabelas  "
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog()

;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc CHAVEI()

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

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While true
        Moveto "RqitemG"
        Moveto [Sequencia do Lancamento]
        VCITENS =ImageCCount()
        Moveto [Custo Total]
        TOTVALOR = ImageCSum()
        Moveto [Quantidade]
        QUANTTOT = ImageCSum()
        Moveto "Rqcabeca"
        [Valor Total     ]=TOTVALOR
        [Quantidade Total]=QUANTTOT

        Moveto "RqitemG"
        Moveto [Sequencia do Lancamento]

        MSGCAMPO=""
        If [Rqcabeca->Descricao Requisitante]="PRODUCAO"  
           Then Prompt " Esc=Retornar  F3=Ver Ficha  Alt+F=Funes  F7=Paginar  PgDn/PgUp  "
           Else Prompt " Esc=Retornar  F3=Ver Ficha  F7=Paginar  PgDn/PgUp  "
        EndIF

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

        If RetVal=-33
           Then If [Rqcabeca->Descricao Requisitante]="PRODUCAO" 
             Then Echo Normal
                  Echo Off
                  ShowPopup " Funes " CENTERED
                    "F5  ~P~rogramao do Corte " : " Insere a Programao do Corte   " : "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
                     Else Retval=MENUVAR
                  EndIf
           EndIf      
        EndIf
        
        Switch
        Case Retval="F5":
           If [Rqcabeca->Descricao Requisitante]="PRODUCAO" 
              Then Corte()
                   Quitloop
           EndIf
        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="F9":
             Del
             OPCHAVEI="CDB"
             CHAVEI=7
             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="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 "RqitemG"
               Moveto [Sequencia do Lancamento]

               PAGINA("RqItemG","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 GRAVA_LOG=True
                                               EXCLUSAO("Item")
                                               Moveto "RqItemG"
                                       EndIf
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             CHAVEI=9
             CHAVEF=9
             Del
             Return
        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 Down
                     [Numero do Lancamento   ] = LANCTO
                     [Sequencia do Lancamento] = ITEM
                     Locate LANCTO,ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)

;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()

Moveto [Custo Total            ]   VSVRMERC=ImageCSum()
Moveto [Quantidade             ]   VSQTDE  =ImageCSum()
Moveto [Sequencia do Lancamento]   VCITENS =ImageCCount()

While True

  Moveto [Sequencia do Lancamento]
  End
  NITEM = [Sequencia do Lancamento]
  Down Down
  Moveto [Sequencia do Lancamento]

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

  Opcao_Ver = False  
  SetaCorRegistro("Editar")
  While True
    Item_Ins_Consulta=False
    MSGCAMPO=""

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

EndProc ;ChaveCdBar()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private Item, ItemNovo, Refer, Cor, Coluna

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 CopyToArray REG_BUSCA_LOOKUP
       KeyPress "ESC"
       If REG_BUSCA_LOOKUP["Inativo"]="S"                       
          Then Mensagem("Este item: //"+REG_BUSCA_LOOKUP["Codigo do Item"]+"//"+REG_BUSCA_LOOKUP["Descricao do Item"]+"// // esta inativo !")
               ITOK=False         
       EndIf
       [Quantidade]=Dados_QTD             
       CODIGO_BARRA=Dados_Item              
EndIf

If Not ITOK
   Then KeyPress "ESC"
        Del
        Return
EndIf

Item  = REG_BUSCA_LOOKUP["Codigo do Item"]
Refer = REG_BUSCA_LOOKUP["Referencia"]
Cor   = REG_BUSCA_LOOKUP["Codigo da Cor_Tecido"]

[Codigo do Item] = REG_BUSCA_LOOKUP["Codigo do Item"]
If Not Array_Monta_Grade("Valida")
  Then Del
       Return
EndIf
Del
ItemNovo=True

Scan
 If [Referencia          ]=Refer   And
    [Codigo da Cor_Tecido]=Cor
    Then ItemNovo=False
         QuitLoop
 EndIf        
EndScan

If Not ItemNovo
   Then CHAVEI=0
        VSVRMERC=VSVRMERC-[Custo Total   ]
        VSQTDE  =VSQTDE  -[Quantidade    ]
   Else While True
         End
         NITEM =[Sequencia do Lancamento]
         Down Down
         Moveto [Sequencia do Lancamento]
       
         Seta_Sequencia(NITEM,False)
         If IsLockRecord()
            Then Del
                 Loop
         EndIf
         SEQIT=[]
         QuitLoop             
       EndWhile
                  
       CHAVEI=1
       VCITENS =VCITENS +1

       [Codigo do Item  ]=Item
       VSD_I_Codigo_Item =[Codigo do Item]
       
       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],
              [RqItemg->Codigo do Item], ANO, MES
       If Not RetVal
          Then Cria_Ficha([RqCabeca->Codigo da Empresa],[RqItemg->Codigo do Item],False)
       EndIf
       
       CUSTOMEDIO=[Preco de Custo]
      
       Moveto "RqItemg"
       [Custo Unitario]    =NDecimal(CUSTOMEDIO,5)
       VSD_I_Custo_Unitario=NDecimal(CUSTOMEDIO,5)
    
EndIf        
         
Coluna=0       
For i from 1 to 12
 If Len(RTrim(SubStr(Array_TM[i],4,2)))=1
    Then If SubStr(Item,10,1)=SubStr(Array_TM[i],4,1)
            Then Coluna=i
                 QuitLoop
         EndIf
    Else If SubStr(Item,9,2)=SubStr(Array_TM[i],4,2)
            Then Coluna=i
                 QuitLoop
         EndIf
 EndIf
EndFor
    
Switch
 Case Coluna=0 : [Qtd1  ]=[Qtd1  ]+Dados_QTD
 Case Coluna=1 : [Qtd1  ]=[Qtd1  ]+Dados_QTD
 Case Coluna=2 : [Qtd2  ]=[Qtd2  ]+Dados_QTD
 Case Coluna=3 : [Qtd3  ]=[Qtd3  ]+Dados_QTD
 Case Coluna=4 : [Qtd4  ]=[Qtd4  ]+Dados_QTD
 Case Coluna=5 : [Qtd5  ]=[Qtd5  ]+Dados_QTD
 Case Coluna=6 : [Qtd6  ]=[Qtd6  ]+Dados_QTD
 Case Coluna=7 : [Qtd7  ]=[Qtd7  ]+Dados_QTD
 Case Coluna=8 : [Qtd8  ]=[Qtd8  ]+Dados_QTD
 Case Coluna=9 : [Qtd9  ]=[Qtd9  ]+Dados_QTD
 Case Coluna=10: [Qtd10 ]=[Qtd10 ]+Dados_QTD
 Case Coluna=11: [Qtd11 ]=[Qtd11 ]+Dados_QTD
 Case Coluna=12: [Qtd12 ]=[Qtd12 ]+Dados_QTD
EndSwitch
[Quantidade]=[Quantidade]+Dados_QTD
Registro_Item("Ler")

VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
Registro_Item("Gravar")

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

Sound 400 400

EndProc

;*******************************************************************************
;* 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=AvancaCampo("I_Qtd0")
           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 Up
                      EndIf
                 Case Evento["KeyCode"] = -81:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else Down 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_Codigo_Cor_Tecido" Or
               Campo="I_CCusto"
               Then If Campo="I_Codigo_Cor_Tecido"  
                       Then Monta_Opcoes("Codigo da Cor_Tecido",VSD_I_Codigo_Item)
                            Seleciona_Opcoes("Codigo da Cor_Tecido","")
                            Moveto [Codigo da Cor_Tecido ]
                       Else
                            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
                    EndIf

                    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_Cor_Tecido"
                       Then VSD_I_Codigo_Cor_Tecido   =[Codigo da Cor_Tecido   ]
                            VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]  
                    EndIf

                    If Campo="I_CCusto"
                       Then VSD_I_CCusto          =[Codigo CCusto   ]
                            VSD_I_Descricao_CCusto=LTrim([Descricao CCusto])
                    Endif

                    Moveto "RqitemG"
                    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_Codigo_Cor_Tecido"   :
                  Campo="I_Codigo_Item"
                  VSD_I_Codigo_Item   =""
                  VSD_I_Descricao_Item=""
                  VSD_I_UN_Item       =""
                  VSD_I_CF_Item       =""
                  VSD_I_CST_Item      =""
                  VSD_I_Tipo_Item     =""
                  VSD_I_Modelo_Item   =""
             Case SubStr(Campo,1,5)="I_Qtd": Campo=VoltaCampo(Campo)

             Case Campo="I_Custo_Unitario" : Campo=VoltaCampo("I_Qtd13")

             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_REFERENCIA  =ControlValue("I_Codigo_Item")
                  Moveto [Codigo do Item]
                  Ativa_Lookup()

                  If PARAM_COR_TECIDO="S" 
                     Then tpitemref="D"
                     Else tpitemref=""
                          If [RQCabeca->Descricao Requisitante]="PRODUCAO"
                             Then tpitemref="P"
                          EndIf
                          If [RQCabeca->Descricao Requisitante]="CORTE"
                             Then tpitemref="S"
                          EndIf
                  EndIf   

                  Moveto [Referencia]
                  Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, tpitemref
                  If RetVal
                     Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                          KeyPress "ESC"
                          [Codigo do Item       ]=VSD_I_Codigo_Item
                          [Referencia           ]=VSD_I_REFERENCIA
                          
                          If Array_Monta_Grade("Valida")
                             Then Registro_Item("Ler")
                                  If PARAM_COR_TECIDO="S"
                                     Then Monta_Opcoes("Codigo da Cor_Tecido",VSD_I_Codigo_Item)
                                          Campo="I_Codigo_Cor_Tecido"
                                          Moveto "Rqitemg"
                                     Else 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],[RqItemg->Codigo do Item], ANO, MES
                                                  If Not RetVal
                                                     Then If Not Cria_Ficha([RqCabeca->Codigo],[RqItemg->Codigo do Item],False)
                                                             Then Moveto "RqItemg"
                                                                  Temp=False
                                                                  Return TEMP
                                                          EndIf
                                                  EndIf
                                          EndIf
        
                                          Locate [RqCabeca->Codigo da Empresa],
                                                 [RqItemg->Codigo do Item], ANO, MES
                                          If Not RetVal
                                             Then If Not Cria_Ficha([RqCabeca->Codigo da Empresa],[RqItemg->Codigo do Item],False)
                                                     Then Moveto "RqItemg"
                                                          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]="C" Or
                                          ;;   [RqCabeca->Tipo de Operacao]="T" Or
                                          ;;   [RqCabeca->Tipo de Operacao]="V"
                                          ;;   Then CUSTOMEDIO=[Custo Total Atual]/[Saldo Atual]
                                          ;;   Else CUSTOMEDIO=BlankNum()
                                          ;;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 "RqItemg"
                                          [Custo Unitario]    =NDecimal(CUSTOMEDIO,5)
                                          VSD_I_Custo_Unitario=NDecimal(CUSTOMEDIO,5)
        ;                                         Moveto [Quantidade]
        
                                          Moveto "Rqitemg"
                                          Campo=Avancacampo("I_Qtd0")
                                  Endif
                                  RefreshDialog
                             Else Campo="I_Codigo_Item"
                                  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
                     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
            Case Campo="I_Codigo_Cor_Tecido": 
                 VSD_I_Codigo_Cor_Tecido=AlinhM(ControlValue("I_Codigo_Cor_Tecido"),4)
                 If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                    Then If Checa_Opcoes("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido)
                            Then Moveto "RqItemG"
                                 [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]

                                 Moveto [Codigo do Item]
                                 Ativa_Lookup()

                                 tpitemref=""
                                 If [RQCabeca->Descricao Requisitante]="PRODUCAO"
                                    Then tpitemref="P"
                                 EndIf
                                 If [RQCabeca->Descricao Requisitante]="CORTE"
                                    Then tpitemref="S"
                                 EndIf                                                                                         
                                 
                                 Moveto [Referencia]
                                 Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, tpitemref, VSD_I_Codigo_Cor_Tecido
                                 If RetVal
                                    Then VSD_I_Codigo_Item   =[Codigo do Item   ]

                                         KeyPress "ESC"
                                         [Codigo do Item       ]=VSD_I_Codigo_Item
                                         [Referencia           ]=VSD_I_REFERENCIA
  
                                         If Array_Monta_Grade("Valida")
                                            Then 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],[RqItemg->Codigo do Item], ANO, MES
                                                         If Not RetVal
                                                            Then If Not Cria_Ficha([RqCabeca->Codigo],[RqItemg->Codigo do Item],False)
                                                                    Then Moveto "RqItemg"
                                                                         Temp=False
                                                                         Return TEMP
                                                                 EndIf
                                                         EndIf
                                                 EndIf
          
                                                 Locate [RqCabeca->Codigo da Empresa],
                                                        [RqItemg->Codigo do Item], ANO, MES
                                                 If Not RetVal
                                                    Then If Not Cria_Ficha([RqCabeca->Codigo da Empresa],[RqItemg->Codigo do Item],False)
                                                            Then Moveto "RqItemg"
                                                                 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]="C" Or
                                                 ;;   [RqCabeca->Tipo de Operacao]="T" Or
                                                 ;;   [RqCabeca->Tipo de Operacao]="V"
                                                 ;;   Then CUSTOMEDIO=[Custo Total Atual]/[Saldo Atual]
                                                 ;;   Else CUSTOMEDIO=BlankNum()
                                                 ;;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 "RqItemg"
                                                 [Custo Unitario]    =NDecimal(CUSTOMEDIO,5)
                                                 VSD_I_Custo_Unitario=NDecimal(CUSTOMEDIO,5)
                                                ;Moveto [Quantidade]
          
                                                 Moveto "Rqitemg"
          
                                                 If ([RQCabeca->Descricao Requisitante]="PRODUCAO" And [Tipo do Item]="P") Or
                                                    ([RQCabeca->Descricao Requisitante]="CORTE"    And [Tipo do Item]="S")
                                                    Then Campo=Avancacampo("I_Qtd0")
                                                    Else Mensagem("Tipo do item inv lido para o Requisitante !")
                                                 EndIf
                                            Else Campo="I_Codigo_Item"
                                                 VSD_I_Codigo_Cor_Tecido=""
                                                 VSD_I_Descricao_Cor_Tecido=""
                                                 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
                                    Else Mensagem("Referncia no cadastrada,//verifique o requisitante informado!")
                                         KeyPress "ESC"
                                 EndIf
                            Else Mensagem("Cor/Tecido no cadastrado para esta referencia !")
                                 VSD_I_Codigo_Cor_Tecido   =""
                                 VSD_I_Descricao_Cor_Tecido=""
                                 KeyPress "ESC"
                         EndIf
                 EndIf
                 Echo Off

             Case SubStr(Campo,1,5)="I_Qtd" : Campo=AvancaCampo(Campo)

             Case Campo="I_Custo_Unitario":
                  VSD_I_Custo_Unitario=ControlValue("I_Custo_Unitario")
                  If VSD_I_Quantidade>0 and VSD_I_Custo_Unitario>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_Codigo_Cor_Tecido" 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 SubStr(Campo,1,5)="I_Qtd" :
       MSGCAMPO="Quantidade ["+SubStr(Array_TM[NumVal( RTrim( SubStr(Campo,6,2) ) )],2,2)+"] "
  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_Cor_Tecido":
       MSGCAMPO="Codigo da Cor"
  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 para AvancaCampo                                                      *
;*******************************************************************************
Proc AvancaCampo(Campo)
VSD_I_Qtd1 =ControlValue("I_Qtd1")
VSD_I_Qtd2 =ControlValue("I_Qtd2")
VSD_I_Qtd3 =ControlValue("I_Qtd3")
VSD_I_Qtd4 =ControlValue("I_Qtd4")
VSD_I_Qtd5 =ControlValue("I_Qtd5")
VSD_I_Qtd6 =ControlValue("I_Qtd6")
VSD_I_Qtd7 =ControlValue("I_Qtd7")
VSD_I_Qtd8 =ControlValue("I_Qtd8")
VSD_I_Qtd9 =ControlValue("I_Qtd9")
VSD_I_Qtd10=ControlValue("I_Qtd10")
VSD_I_Qtd11=ControlValue("I_Qtd11")
VSD_I_Qtd12=ControlValue("I_Qtd12")

VSD_I_Quantidade=VSD_I_QTD1+VSD_I_QTD2+VSD_I_QTD3+VSD_I_QTD4+
                 VSD_I_QTD5+VSD_I_QTD6+VSD_I_QTD7+VSD_I_QTD8+
                 VSD_I_QTD9+VSD_I_QTD10+VSD_I_QTD11+VSD_I_QTD12
[Quantidade]=VSD_I_Quantidade
If VSD_I_Quantidade>0 and VSD_I_Custo_Unitario>0
   Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
EndIf
indice=NumVal(RTrim(SubStr(Campo,6,2)))
For i From indice To 12
  If (i+1)=13
     Then Campo="I_Custo_Unitario"
          QuitLoop
     Else If (i+1) > NumVal(SubStr(Campo,6,2)) And
             SubStr(Array_TM[i+1],1,1)="T"
             Then Campo=SubStr(Campo,1,5)+StrVal(i+1)
                  QuitLoop
          EndIf

  EndIf
EndFor

Return Campo
EndProc

;*******************************************************************************
;* Rotina para VoltaCampo                                                      *
;*******************************************************************************
Proc VoltaCampo(Campo)
For i From 12 to 0 Step -1
  If i=0
     Then If CHAVEI=1
             Then Campo="I_Codigo_Item"
                  VSD_I_Codigo_Item   =""
                  VSD_I_Descricao_Item=""
                  VSD_I_UN_Item       =""
                  VSD_I_CF_Item       =""
                  VSD_I_CST_Item      =""
                  VSD_I_Tipo_Item     =""
                  VSD_I_Modelo_Item   =""
                  VSD_I_Codigo_Cor_Tecido   =""
                  VSD_I_Descricao_Cor_Tecido=""
             Else CHAVEI=9
                  CopyFromArray RegItem
                  CancelDialog
          EndIf
          QuitLoop
     Else If i < NumVal(SubStr(Campo,6,2)) And
             SubStr(Array_TM[i],1,1)="T"
             Then Campo=SubStr(Campo,1,5)+StrVal(i)
                  QuitLoop
          EndIf
  EndIf
EndFor

If Campo="I_Qtd13" Then Campo="I_Custo_Unitario" EndIf

Return Campo
EndProc

;*******************************************************************************
;* 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")
Array_Monta_Grade("Valida")

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"
     @ 09,01 height 12 width 78

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

   Label  @ 00,01 "Codigo Item" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A10" 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,02 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 03,07 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Label  @ 02,15 "Descricao Cor/Tecido" For "I_Descricao_Cor_Tecido"
   Accept @ 03,15 Width 22 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido

   @ 04,01 ?? "Req"
   @ 04,06 ?? SubStr(Array_TM[1],2,2)
   @ 04,11 ?? SubStr(Array_TM[2],2,2)
   @ 04,16 ?? SubStr(Array_TM[3],2,2)
   @ 04,21 ?? SubStr(Array_TM[4],2,2)
   @ 04,26 ?? SubStr(Array_TM[5],2,2)
   @ 04,31 ?? SubStr(Array_TM[6],2,2)
   @ 04,36 ?? SubStr(Array_TM[7],2,2)
   @ 04,41 ?? SubStr(Array_TM[8],2,2)
   @ 04,46 ?? SubStr(Array_TM[9],2,2)
   @ 04,51 ?? SubStr(Array_TM[10],2,2)
   @ 04,56 ?? SubStr(Array_TM[11],2,2)
   @ 04,61 ?? SubStr(Array_TM[12],2,2)

   Accept @ 05,05 Width 05 "S" Tag "I_Qtd1"  to VSD_I_Qtd1
   Accept @ 05,10 Width 05 "S" Tag "I_Qtd2"  to VSD_I_Qtd2
   Accept @ 05,15 Width 05 "S" Tag "I_Qtd3"  to VSD_I_Qtd3
   Accept @ 05,20 Width 05 "S" Tag "I_Qtd4"  to VSD_I_Qtd4
   Accept @ 05,25 Width 05 "S" Tag "I_Qtd5"  to VSD_I_Qtd5
   Accept @ 05,30 Width 05 "S" Tag "I_Qtd6"  to VSD_I_Qtd6
   Accept @ 05,35 Width 05 "S" Tag "I_Qtd7"  to VSD_I_Qtd7
   Accept @ 05,40 Width 05 "S" Tag "I_Qtd8"  to VSD_I_Qtd8
   Accept @ 05,45 Width 05 "S" Tag "I_Qtd9"  to VSD_I_Qtd9
   Accept @ 05,50 Width 05 "S" Tag "I_Qtd10" to VSD_I_Qtd10
   Accept @ 05,55 Width 05 "S" Tag "I_Qtd11" to VSD_I_Qtd11
   Accept @ 05,60 Width 05 "S" Tag "I_Qtd12" to VSD_I_Qtd12


   Label  @ 04,69 "Total" For "I_Quantidade"
   Accept @ 05,66 Width 09 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade

   Label  @ 06,00 "UN" For "I_UN_Item"
   Accept @ 07,01 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
              
   Label  @ 06,07 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 07,07 Width 12 "N" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 06,20 "Ct.Total" For "I_Custo_Total"
   Accept @ 07,20 Width 12 "$" picture "#*#.[##]" Tag "I_Custo_Total" to VSD_I_Custo_Total

   Label  @ 08,00 "Centro Custo" For "I_CCusto"
   Accept @ 09,01 Width 10 "A7" picture "###.###" Tag "I_CCusto" to VSD_I_CCusto
   Accept @ 09,11 Width 31 "A25" picture "!*!" Tag "I_Descricao_CCusto" to VSD_I_Descricao_CCusto
   Accept @ 09,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

       [Qtd1                      ]=VSD_I_Qtd1
       [Qtd2                      ]=VSD_I_Qtd2
       [Qtd3                      ]=VSD_I_Qtd3
       [Qtd4                      ]=VSD_I_Qtd4
       [Qtd5                      ]=VSD_I_Qtd5
       [Qtd6                      ]=VSD_I_Qtd6
       [Qtd7                      ]=VSD_I_Qtd7
       [Qtd8                      ]=VSD_I_Qtd8
       [Qtd9                      ]=VSD_I_Qtd9
       [Qtd10                     ]=VSD_I_Qtd10
       [Qtd11                     ]=VSD_I_Qtd11
       [Qtd12                     ]=VSD_I_Qtd12

       [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

       [Referencia                ]=VSD_I_Referencia

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

  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]
       If CHAVEI=1
          Then VSD_I_Descricao_Item=TiraTamanhoDescricaoItem(VSD_I_Descricao_Item)
       EndIf   
       VSD_I_Qtd1                   =[Qtd1                      ]
       VSD_I_Qtd2                   =[Qtd2                      ]
       VSD_I_Qtd3                   =[Qtd3                      ]
       VSD_I_Qtd4                   =[Qtd4                      ]
       VSD_I_Qtd5                   =[Qtd5                      ]
       VSD_I_Qtd6                   =[Qtd6                      ]
       VSD_I_Qtd7                   =[Qtd7                      ]
       VSD_I_Qtd8                   =[Qtd8                      ]
       VSD_I_Qtd9                   =[Qtd9                      ]
       VSD_I_Qtd10                  =[Qtd10                     ]
       VSD_I_Qtd11                  =[Qtd11                     ]
       VSD_I_Qtd12                  =[Qtd12                     ]

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

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

EndSwitch

EndProc  ; (Registro_Item)

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO(TIPO)
Private TIPO

If Not IsAssigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

Switch
Case TIPO="Cabeca":
     Moveto "RqItem"
     Moveto [Numero do Lancamento]
     Locate [RqCabeca->Numero do Lancamento]
     If RetVal
        Then While [Numero do Lancamento]=[RQCabeca->Numero do Lancamento]
               ITEM=[Sequencia do Lancamento]
               ESTOQUE("Exclusao")
               EXCLUIMAT()
               Moveto "RqItem"
               If GRAVA_LOG Then Grava_LogEx("RqItem") EndIf
               Del
             EndWhile
     EndIf

     Moveto "RqItemG"
     While RecordStatus("New")=False
       If GRAVA_LOG Then Grava_LogEx("RqItemG") EndIf
       Del
     EndWhile

     Moveto "RqCabeca"
     If GRAVA_LOG Then Grava_LogEx("Requisicao Grade") EndIf
     Del
     STATUSFILTRO="DEL"
Case TIPO="Item":
     Moveto "RqItemG"
     If GRAVA_LOG Then Grava_LogEx("RqItemG") 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([RqCabeca->Codigo da 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 ]="P" Or [RqCabeca->Tipo de Operacao ]="I") And
            [RqItem->Custo Unitario]>0                                              
            Then If [RqItem->Custo Unitario]<>[Preco de Custo]
                    Then MSG = "O Custo Unit rio informado do Item "+[RqItem->Codigo do 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]
                    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

  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)

;*******************************************************************************
;* Verifica Formula de Materia Prima                                           *
;*******************************************************************************
Proc FORMULA()

Moveto "\\Sistemas\\Producao\\FormulaC"
Moveto [Codigo do Produto]
Locate [\Sistemas\Estoque\RqItem->Codigo do Item],"",""
If Not RetVal
  Then MSG=    "NÆo existe f¢rmula cadastrada para o item:// //"
       MSG=MSG+[\Sistemas\Estoque\RqItem->Codigo do Item]+" - "
       MSG=MSG+[\Sistemas\Estoque\RqItem->Descricao do Item]+"// //"
       MSG=MSG+"Consumo para este item nÆo foi realizada,//"
       MSG=MSG+"e o estoque no ser  atualizado devidamente !// //"
       MSG=MSG+"Verificar a f¢rmula e depois,//confirmar novamente esta entrada de produÆo !"
       Mensagem(MSG)
       Moveto "RqItem"
       Return
EndIf

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

Moveto "\\Sistemas\\Producao\\FormulaI"
Moveto [Codigo do Produto]
Locate [\Sistemas\Estoque\RqItem->Codigo do Item],"",""
If RetVal
   Then While [Codigo do Produto]=[\Sistemas\Estoque\RqItem->Codigo do Item]
          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  ]=[RqCabeca->Codigo da Empresa]
                  [Codigo do Item     ]=[\Sistemas\Producao\FormulaI->Codigo do Material]
                  ESTOQUEMAT("VOLTA")
                  UNIDADE=([RqItem->Quantidade]/[\Sistemas\Producao\Formulac->Quantidade Produzida])
                  [Quantidade         ]=NDecimal(UNIDADE*[\Sistemas\Producao\FormulaI->Quantidade],3)
                  [Custo Unitario     ]=CUSTOMEDIO_MATPRIMA
                  [Custo Total        ]=Round([Quantidade]*[Custo Unitario],2)
                  [Codigo CCusto      ]=[\Sistemas\Estoque\RqItem->Codigo CCusto]
                  ESTOQUEMAT("BAIXA")
                  UnLockRecord
                  Moveto "\\Sistemas\\Producao\\FormulaI"
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
  Else MSG=    "NÆo existem itens a consumir na f¢rmula do item://"
       MSG=MSG+[\Sistemas\Estoque\RqItem->Codigo do Item]+" - "
       MSG=MSG+[\Sistemas\Estoque\RqItem->Descricao do Item]+"// //"
       MSG=MSG+"Consumo para este item nÆo foi realizada,//"
       MSG=MSG+"e o estoque no ser  atualizado devidamente !// //"
       MSG=MSG+"Verificar a f¢rmula e depois,//confirmar novamente esta entrada de produÆo !"
       Mensagem(MSG)
EndIf
Moveto "RqItem"
EndProc  ;  (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()
Moveto "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
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],
       [RqitemG->Codigo do Item], ANO, MES
If Not RetVal
   Then Cria_Ficha([RqCabeca->Codigo da Empresa],[RqItemG->Codigo do Item],False)
EndIf

NOVOSALDO=-1
Switch
  Case CHAVEI=1:
       NOVOSALDO=NDecimal([Saldo Atual]-[RqItemG->Quantidade],3)
  Case CHAVEI=0:
       NOVOSALDO=NDecimal((([Saldo Atual]+QUANTANT)-[RqItemG->Quantidade]),3)
EndSwitch
UnLockRecord

Moveto "RqItemG"
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"
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
        UnLockRecord
EndIf

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 Gera Tabela RqItemIG                                                 *
;*******************************************************************************
Proc Gera_RqI()

Aguarde("Convertendo requisio modo padro")
Moveto "RqItem"
Moveto [Numero do Lancamento]
Locate [RqCabeca->Numero do Lancamento]
If RetVal
   Then While [Numero do Lancamento]=[RQCabeca->Numero do Lancamento]
          ITEM=[Sequencia do Lancamento]
          ESTOQUE("Exclusao")
          GRAVA_LOG=False
          EXCLUIMAT()
          Moveto "RqItem"
          Del
        EndWhile
EndIf

refant="****"

Seq=0
Moveto "RqItemG"
NR = NIMAGERECORDS()
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo requisio modo padro "+BARRA_STRING)

  CopyToArray RegRq
	If RegRq["Referencia"]<>refant
	   Then Array_Monta_Grade("")
	        refant=[Referencia]
	EndIf        

  For ic From 1 to 12
    Aguarde("Convertendo requisio modo padro")

    Qtd=0
    TM=RTrim(SubStr(Array_TM[ic],4,2))
    Switch
      Case ic=1:  Qtd=RegRq["Qtd1"]  
      Case ic=2:  Qtd=RegRq["Qtd2"]  
      Case ic=3:  Qtd=RegRq["Qtd3"]  
      Case ic=4:  Qtd=RegRq["Qtd4"]  
      Case ic=5:  Qtd=RegRq["Qtd5"]  
      Case ic=6:  Qtd=RegRq["Qtd6"]  
      Case ic=7:  Qtd=RegRq["Qtd7"]  
      Case ic=8:  Qtd=RegRq["Qtd8"]  
      Case ic=9:  Qtd=RegRq["Qtd9"]  
      Case ic=10: Qtd=RegRq["Qtd10"] 
      Case ic=11: Qtd=RegRq["Qtd11"] 
      Case ic=12: Qtd=RegRq["Qtd12"] 
    EndSwitch

    If Qtd>0
       Then If Len(TM)=1
               Then Item=SubStr(RegRq["Codigo do Item"],1,9)+TM
               Else item=SubStr(RegRq["Codigo do Item"],1,8)+TM
            EndIf
            ;---- Verifica existncia do item ----------------------------------
            GetRecord "\\Sistemas\\Estoque\\Itens" item To REG_BUSCA_LOOKUP
            If Not RetVal
               Then Mensagem("Item "+item+" no localizado no cadastro de itens!")
                    Loop
               Else Release Vars REG_BUSCA_LOOKUP
            EndIf   
            
            Moveto "RqItem"
            End Down
            Seq=Seq+1
            [Numero do Lancamento     ]=RegRq["Numero do Lancamento"]
            [Sequencia do Lancamento  ]=Seq
            [Codigo da Empresa        ]=RegRq["Codigo da Empresa"]
            [Codigo do Item           ]=Item
            [Quantidade               ]=Qtd
            [Custo Unitario           ]=RegRq["Custo Unitario"]
            [Custo Total OM           ]=RegRq["Custo Total OM"]
            [Aplicacao                ]=RegRq["Aplicacao"]
            [Descricao Aplicacao      ]=RegRq["Descricao Aplicacao"]
            [Codigo CCusto            ]=RegRq["Codigo CCusto"]
            [Descricao CCusto         ]=RegRq["Descricao CCusto"]

            If [Quantidade]>0
               Then [Custo Total]=[Quantidade]*[Custo Unitario]
            EndIf

            CHAVEI  =1
            ITEM    =[Sequencia do Lancamento]
            QUANTANT=0
            CUSTOANT=0
            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 FORMULA()
            Endif

            Moveto "RqItem"
            UnlockRecord
    EndIf
  EndFor
  Moveto "RqItemG"
EndScan
CHAVEF=8
LimpAguarde()
EndProc

;*******************************************************************************
;* 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() 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 17 Width 65

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

    Label  @ 02,00 "Tipo do Documento"  For "TG_TPDOCTO"
    Accept @ 03,01 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
    Accept @ 03,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO
    
    Label  @ 04,00 "Requisitante"  For "TG_REQUISIT"
    Accept @ 05,01 Width 13 "A10" Picture "#*#" Tag "TG_REQUISIT"  To VSDGREQUISIT
    Accept @ 05,15 Width 37 "A35" Picture "!*!" Tag "TG_NOMREQUI" To VSDGNOMREQUI

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

    Label  @ 08,00 "Tipo de Operao" For "TG_TPOPE"
    Accept @ 09,01 Width 04 "A1"   Picture "C,P,T,O,D,I" Tag "TG_TPOPE" To VSDGTPOPE
    Accept @ 09,06 Width 33 "A30"  Picture "!*!" Tag "TG_NOMTPOPE" To VSDGNOMTPOPE
    
    Label  @ 10,00  "Per¡odo Referente" For "TG_DTINI"
    Label  @ 11,00  "de" For "TG_DTINI"
    Accept @ 11,01  Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 11,14  "at" For "TG_DTFIM"
    Accept @ 11,19  Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Pushbutton @ 13,19 width 11 "~O~k"      OK     Default Value "Ok"  Tag "YES" To BottonValue
    Pushbutton @ 13,33 width 11 "~C~ancela" CANCEL                     Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  AGUARDE("Filtrando dados")
  SelecionaFiltro()

  Result=True

  QuitLoop
EndWhile

SDFILTRO_ATIVO=False

Return Result
EndProc

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

View NoWindow "\\Sistemas\\Cadastro\\Destinat"
  
View NoWindow "\\Sistemas\\Faccao\\Cfacrig"
View NoWindow "\\Sistemas\\Faccao\\CFACC"
View NoWindow "Itens"
View NoWindow "Estqprm"
View NoWindow "Sdestq"
View NoWindow "Rqitemg"
View NoWindow "P_Requis"

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
EndIf

PickForm "4"
Moveto "\\Sistemas\\Producao\\FormulaC" SetHighLight Current Record 51 Field 51
Moveto "\\Sistemas\\Producao\\FormulaI" SetHighLight Current Record 51 Field 51
Moveto "RqItem"   SetHighLight Current Record 51 Field 51
Moveto "RqMatPri" SetHighLight Current Record 51 Field 51
Moveto "SdEstq"   SetHighLight Current Record 51 Field 51
Moveto "EstqPrm"  SetHighLight Current Record 51 Field 51

Moveto TabelaControle
PickForm "F"
CONT=0
DYNARRAY VETOR[]
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("Rqitemg")
   Then COR_MENSAGEM="1"
        Mensagem(MSG_TABELA)
        Release Vars COR_MENSAGEM,MSG_TABELA
   Else Release Vars MSG_TABELA     
EndIf

Return True
EndProc

;*******************************************************************************
;* 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"]
                PARAM_COR_TECIDO      = EMPRESA["Cor_Tecido"]
                PARAM_QTD_CDBAR       = EMPRESA["Qtd_CDBAR"]

                Result=True
        EndIf
EndIf

Return Result

EndProc ; (Carrega_Parametros)

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

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

OPCHAVEI=""
While True
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1 
     Then Controle_Dia()
  EndIf
  SetaCorRegistro("Padrao")
   
  Moveto "RqItemG"
  
  While True
    If OPCHAVEI="CDB"
       Then CHAVECDBAR()
            If CHAVEI=9 Then Quitloop EndIf
            If CHAVEI=7 Then     Loop EndIf
       Else CHAVEI()
            If CHAVEI=9 Then QuitLoop EndIf
            If CHAVEI=7 Then     Loop EndIf
            Controla_EdicaoI()
    EndIf
  EndWhile

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

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

EndProc

;*******************************************************************************
;* 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=""         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(NOMEMPRESA)           Then NOMEMPRESA=""               EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)   Then SYS_CLIENTE_CONFEC=""       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   

Array Array_TM[12]

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 "4"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
DeletaTabelaControle() ; FILTRO
Release Vars All
Release Procs All
