;**********************************************************************
;*  Controle de Ocorrencias                                                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 17/01/2017 por Rafael Matos
;Ultima Alteracao: 16/03/2017 por Bruno Carvalho 
;Motivo Alteracao: Adicionado processo p/ gera‡Æo autom tica de requisi‡Æo para itens LD
;Ultima Alteracao: 28/03/2017 por Bruno/Rafael 
;Motivo Alteracao: Ajustes REQUISICAO() ao adicionar o item da requisi‡Æo, localizando registro pai incorretamente
;Ultima Alteracao: 28/03/2017 por Rafael Matos
;Motivo Alteracao: Ajustes para ao digitar ocorrencia nÆo deixar passar LD se nÆo tiver item 04
;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: 23/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem qtde fracionada    
;Ultima Alteracao: 20/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 14/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 31/10/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado IntervaloData()

;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Expedicao                           *
;*******************************************************************************
Proc CHAVEC()

FACA_DIGITAC=True
FACA_CHAVEI =True
INICIO_PAGINA=True

While True
  Moveto "CprobC"
  Moveto [Numero do Lancamento]
  End
  LANCTO=[Numero do Lancamento]

  If OPCAO_FORM="F"
    Then Down
    Else PgDn 
  EndIf
  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()

  Switch
    Case RetVal=-33 : SemFuncoes()
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM="F"
            Then OPCAO_FORM="1"
            Else OPCAO_FORM="F"
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         MODOPAGINA = True  
         Del
         While True
           If OPCAO_FORM="F"
              Then PAGINA("CprobC","MR")
              Else PAGINA("CprobC","MT")
           EndIf
           INICIO_PAGINA=True
           Switch
             Case EDITAR="S":
                  PickForm "1"
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia])
                     Then CHAVEC=0
                          FACA_DIGITAC=True
                          FACA_CHAVEI =True
                          INICIO_PAGINA=True
                          Controla_EdicaoC()
                     Else UnLockRecord
                  EndIf
             Case EXCLUIR="S":
                  If IsAssigned(PRODUCAO_CORTE) and PRODUCAO_CORTE=true and IsBlank([CprobC->Numero_ProducaoCorte])
                     Then Mensagem("Este Lan‡amento foi criado atrav‚s da Rotina de Fac‡„o > 59. Lan‡amento de Ocorrˆncias - Int/Ext")
                          UnlockRecord
                          Loop
                  EndIf
                  If Not IsAssigned(PRODUCAO_CORTE) and IsBlank([CprobC->Numero_ProducaoIE])
                     Then Mensagem("Este Lan‡amento foi criado atrav‚s da Rotina de Fac‡„o > 61. Lan‡amento de Ocorrˆncias - Corte")
                          UnlockRecord
                          Loop
                  EndIf                  
                  PickForm "1"
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia])
                     Then If QuerExcluir("") and Checa_Supervisor()
                             Then 
                                  
                              
                             EXCLUSAO_C()
                             Else UnLockRecord
                          EndIf
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM="1"
              Then PickForm "1"
              Else PickForm "F"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER":
         If Numero_Lancamento("","F")
            Then LANCTO = PROXLANCTO_NLANC
                 Release Vars PROXLANCTO_NLANC    
            Else QuitLoop
         EndIf
         PickForm "1"
         Moveto [Numero do Lancamento]
         If PROXIMO_LANCTO_REG_ACHOU
            Then CHAVEC=0
                 If Checa_Controle([Numero_Controle_Dia])
                    Then Return
                 EndIf
            Else CHAVEC=1
                 If Checa_Controle(SYS_CONTROLE_DIA)
                    Then Return
                    Else OPCAO_FORM="F" 
                 EndIf
         EndIf  
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM="F"
            Then PickForm "F"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile

EndProc   ; (ChaveC)
                                                                                
;*******************************************************************************
;* Atualizacao Requisicao                                                      *
;*******************************************************************************
Proc REQUISICAO(Tipo)

Aguarde("Verificando itens LD")
                                                                
If IsAssigned(CHAVEC) And CHAVEC=0 And Not IsAssigned(REG_PROBLEMA)
  Then Mensagem("Variavel de sistema REG_PROBLEMA n„o localizada!")
       Return False     
EndIf 

CODEMP       = [CprobC->Codigo da Empresa]
NLANCTO      = [CprobC->Numero do Lancamento]
DOCTO_CODIGO = "PROD"
DOCTO_TIPO   = "PROD"
DOCTO_SERIE  = ""
NOMDEST      = "LEVES DEFEITOS"

If CHAVEC=0
   Then DATA            = REG_PROBLEMA["Data_Ocorrencia"]
        DOCTO_NUMERO    = REG_PROBLEMA["Numero_ProducaoIE"]
   Else DATA            = [CprobC->Data_Ocorrencia]
        DOCTO_NUMERO    = [CprobC->Numero_ProducaoIE]
EndIf
            
Moveto "CprobC"
UnLockRecord
FormKey

Moveto "\\Sistemas\\Estoque\\Requisit"
Moveto [Descricao Requisitante]
Locate NOMDEST
If RetVal
   Then COD_DESTINO = [Codigo do Requisitante]
   Else COD_DESTINO = ""  
EndIf  

AUX_SISTEMA_GERADOR = ""               
ACHOU_REQ           = False
NUMEROL             = ""

Moveto "\\Sistemas\\Estoque\\RQCabeca"
Moveto [Lancamento Gerador]
Locate NLANCTO
If RetVal
   Then While True
          If [Lancamento Gerador    ] = NLANCTO         And
             [Codigo do Documento   ] = DOCTO_CODIGO    And  
             [Tipo do Documento     ] = DOCTO_TIPO      And
             [Serie do Documento    ] = DOCTO_SERIE     And
             [Codigo da empresa     ] = CODEMP          And
             [Data de Ocorrencia    ] = DATA            And
             [Sistema Gerador       ] = "PR"
             Then AUX_SISTEMA_GERADOR=[Sistema Gerador]
                  ACHOU_REQ = True
                  NUMEROL = [Numero do Lancamento]
                  QuitLoop
          EndIf           
          Skip
          If Eot() Then QuitLoop EndIf
          Locate Next NLANCTO
          If Not RetVal
             Then QuitLoop
          EndIf     
        EndWhile
EndIf  

GetRecord "\\Sistemas\\Cadastro\\Empresas" CODEMP To REG_EMP
If RetVal
   Then NOME_EMPRESA = REG_EMP["Nome Fantasia Empresa"]
   Else NOME_EMPRESA = ""
EndIf

;---- Estorno da Requisi‡Æo p/ Nota de Entrada ---------------------------------
If NUMEROL <> ""
   Then Moveto "\\Sistemas\\Estoque\\RqItem"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then While [Numero do Lancamento]=NUMEROL
                  CODIGO_ITEM = [Codigo do Item]
                  QTD_ITEM    = [Quantidade    ]
                  CUSTO_TOTAL = [Custo Total   ]
                  CTO_ITEM    = [Custo Unitario]
                  
                  ESTOQUE("ESTORNAR","S",[\Sistemas\Estoque\RqCabeca->Data de Ocorrencia],[\Sistemas\Estoque\RqCabeca->Codigo da Empresa],CODIGO_ITEM, QTD_ITEM, CTO_ITEM)
                  
                  Moveto "\\Sistemas\\Estoque\\RqItem"
                  Del
                EndWhile
        EndIf
EndIf                        

If Tipo = "Exclusao"
    Then Moveto "\\Sistemas\\Estoque\\RqCabeca"
         If [Numero do Lancamento]=NUMEROL Then Del EndIf 
         Return True
EndIf

Moveto "\\Sistemas\\Estoque\\RQCabeca"
Moveto [Numero do Lancamento]
If NUMEROL = ""
   Then
        While True
          End
          Moveto [Numero do Lancamento]
          If Numero_Lancamento("Interno","Locked_Down")
             Then NUMEROL = PROXLANCTO_NLANC
                  Release Vars PROXLANCTO_NLANC
                  quitloop
          EndIf    
        EndWhile

       ;While True
       ;  End
       ;  If Numero_Lancamento("Interno","")
       ;     Then NUMEROL = PROXLANCTO_NLANC
       ;          Release Vars PROXLANCTO_NLANC 
       ;  EndIf
       ;  Down
       ;  [Numero do Lancamento]=NUMEROL
       ;  If Not IsLockRecord()
       ;     Then QuitLoop
       ;     Else Del
       ;  EndIf
       ;EndWhile
       
   Else
        For i From 1 To 10
          Aguarde("Bloqueando registro: "+NUMEROL+" -> "+StrVal(i)+" de 10")
          If Not IsLockRecord()
             Then QuitLoop
          EndIf
        EndFor     
EndIf     
Aguarde("Verificando itens LD")

;---- Itens --------------------------------------------------------------------
Aguarde("Aguarde, inserindo item na requisi‡ao ")

Moveto "CprobC"
CoeditKey
FormKey

AUX_CONTA_ITENS = 0
DynArray AUX_ITENS[]
Moveto "CprobI"
Home
Scan
  If Rtrim([Tipo_Ocorrencia])="LD"
     Then AUX_CONTA_ITENS = AUX_CONTA_ITENS + 1
          AUX_ITENS[AUX_CONTA_ITENS] = [Sequencia do Lancamento]
  EndIf
EndScan
AUX_CONTADOR = DynArraySize(AUX_ITENS)

If AUX_CONTA_ITENS = 0
   Then Moveto "CprobC"
        UnLockRecord
        FormKey
   
        Moveto "\\Sistemas\\Estoque\\RQCabeca"
        Moveto [Numero do Lancamento]
        Del
        
        Moveto "CprobC"
        CoeditKey
        FormKey
        Return False   
EndIf        

Moveto "CprobC"
UnLockRecord
FormKey

If Not ACHOU_REQ        
   Then ;---- Cabe‡a -----------------------------------------------------------
        Moveto "\\Sistemas\\Estoque\\RqCabeca"
        [Codigo da Empresa     ]=[CprobC->Codigo da Empresa]
        [Data de Ocorrencia    ]=DATA          
        [Tipo de Movimento     ]="E"
        [Descricao do Movimento]="ENTRADA"
        [Tipo de Operacao      ]="P"
        [Descricao da Operacao ]="PRODUCAO"
        [Codigo do Documento   ]="PROD"
        [Tipo do Documento     ]="PROD"
        [Serie do Documento    ]=""
        [Numero do Documento   ]=[CprobC->Numero_ProducaoIE]
        [Lancamento Gerador    ]=NLANCTO
        [Requisitante          ]=COD_DESTINO
        [Descricao Requisitante]=NOMDEST
        [Sistema Gerador       ]="PR"
        [Lancamento Gerador    ]=NLANCTO
        [Codigo                ]=CODEMP
        [Nome Fantasia EmitDest]=NOME_EMPRESA
        Controle_Dia()
        SaveTables                                          
   Else ;---- Cabe‡a - Atualizando Dados ---------------------------------------
        Moveto "\\Sistemas\\Estoque\\RqCabeca"
        [Numero do Documento   ] = [CprobC->Numero_ProducaoIE]
        [Data de Ocorrencia    ] = [CprobC->Data_Ocorrencia]
        Controle_Dia()
        SaveTables
EndIf

SEQ     = 0
QTDTOT  = 0
For ki From 1 To AUX_CONTADOR
  GetRecord "\\Sistemas\\Faccao\\CprobI" NLANCTO,AUX_ITENS[ki] To REG_CPROBI
  If RetVal
     Then CODIGO_ITEM = PegaCodigoRaiz(REG_CPROBI["Codigo do Item"])
          CODIGO_ITEM = "04"+SubStr(CODIGO_ITEM,3,8)  
          QTD_ITEM    = REG_CPROBI["Quantidade"] 
          QTDTOT      = QTDTOT + QTD_ITEM        
          
          CUSTOMEDIO  = REG_CPROBI["Custo Unitario"]
          QTD_TOTAL   = REG_CPROBI["Quantidade"]  
          
          CUSTO_TOTAL = CUSTOMEDIO * QTD_TOTAL 
     Else Mensagem("Sequˆncia "+StrVal(AUX_ITENS[ki])+" n„o localizado no lan‡amento "+NLANCTO+"!")
          Moveto "CprobC"
          UnLockRecord
          FormKey
          Return False
  EndIf

  GetRecord "\\Sistemas\\Estoque\\Itens" CODIGO_ITEM To REG_ITEM 
  If RetVal
     Then WS_TITEM = REG_ITEM["Tipo do Item"]
          WS_DITEM = REG_ITEM["Descricao do Item"]
          WS_UNI   = REG_ITEM["Unidade Interna"]
     Else Mensagem("Item "+CODIGO_ITEM+" n„o localizado no cadastro de itens!")
          WS_TITEM = ""
          WS_DITEM = ""
          WS_UNI   = ""
  EndIf

  If WS_TITEM<>""
     Then ACHOU_ITEM = False
          Moveto "\\Sistemas\\Estoque\\RqItem"
          Moveto [Numero do Lancamento]
          Locate NUMEROL
          If RetVal
             Then While [Numero do Lancamento] = NUMEROL
                    If [Codigo do Item] = CODIGO_ITEM
                       Then ACHOU_ITEM = True
                            QuitLoop
                    EndIf
                    Skip
                    If Eot() Then QuitLoop EndIf
                  EndWhile          
          EndIf
          
          If Not ACHOU_ITEM
             Then SEQ = SEQ + 1
                  End Down
                  [Numero do Lancamento   ]=NUMEROL
                  [Sequencia do Lancamento]=SEQ
                  [Codigo da Empresa      ]=CODEMP
                  [Tipo do Item           ]=WS_TITEM
                  [Codigo do Item         ]=CODIGO_ITEM
                  [Descricao do Item      ]=WS_DITEM
                  [Unidade Interna        ]=WS_UNI
          EndIf
          [Quantidade    ] = [Quantidade ] + QTD_ITEM
          [Custo Total   ] = [Custo Total] + CUSTO_TOTAL  
          [Custo Unitario] = NDecimal([Custo Total]/[Quantidade],5)
          UnLockrecord
  EndIf          
  
  Moveto "\\Sistemas\\Estoque\\RqItem"
  Moveto [Numero do Lancamento]
  Locate NUMEROL, SEQ
            
  ESTOQUE("ATUALIZAR","E",[CprobC->Data_Ocorrencia],[CprobC->Codigo da Empresa], CODIGO_ITEM,QTD_ITEM,0)
EndFor  

;---- Complementos da Cabe‡a ---------------------------------------------------
Moveto "\\Sistemas\\Estoque\\RqCabeca"
Moveto [Numero do Lancamento]
Locate NUMEROL
If RetVal 
   Then [Quantidade Total]=QTDTOT
EndIf
UnLockrecord

Moveto "CprobC"
[Lancamento RQCabeca_Prob] = NUMEROL
UnLockRecord
FormKey

LimpAguarde()

Return True

EndProc ;REQUISICAO()

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

Moveto "\\Sistemas\\Estoque\\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 "\\Sistemas\\Estoque\\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 Baixa Materia Prima                                                  *
;*******************************************************************************
Proc ESTOQUE(OPERACAO, TPMOV, DTREF, COD_EMPRESA, COD_ITEM, QTDE, CTTOT)
Private OPERACAO, TPMOV, DTREF, COD_EMPRESA, COD_ITEM, ANO, MES, QTDE, CTTOT, Tabela

Tabela=Table()

MES=ALINHM(StrVal(Month(DTREF)),2)
ANO=ALINHM(StrVal(Year(DTREF)),4)

Moveto "\\Sistemas\\Estoque\\SdEstq"
Moveto [Codigo da Empresa]
Locate COD_EMPRESA, COD_ITEM, ANO, MES
If Not RetVal
   Then Cria_Ficha(COD_EMPRESA,COD_ITEM,ANO,MES,False)
EndIf
While True
  If IsLockRecord()
     Then Loop
  EndIf
  If OPERACAO="ATUALIZAR"
     Then CUSTOMEDIO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
          If CUSTOMEDIO=0
             Then CUSTOMEDIO=[Ultimo Custo Atual]
          EndIf
          CTTOT=NDecimal(QTDE*CUSTOMEDIO,2)
  EndIf

  Switch
    Case TPMOV="S":
         [Saldo Atual      ]=NDecimal([Saldo Atual      ]-QTDE,3)
         [Custo Total Atual]=NDecimal([Custo Total Atual]-CTTOT,2)
    Case TPMOV="E":
         [Saldo Atual      ]=NDecimal([Saldo Atual      ]+QTDE,3)
         [Custo Total Atual]=NDecimal([Custo Total Atual]+CTTOT,2)
  EndSwitch

  If OPERACAO="ATUALIZAR" Or
     OPERACAO="ESTORNAR" 
     Then If ([Custo Total Atual]/[Saldo Atual])>0
              Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
          EndIf
          UnLockRecord
  EndIf
  QuitLoop
EndWhile

If OPERACAO="ATUALIZAR" And TPMOV="S"
   Then While True
          Moveto "\\Sistemas\\Estoque\\EstqPrm"
          Moveto [Codigo da Empresa]
          Locate COD_EMPRESA, COD_ITEM
          If Not RetVal
             Then End Down
                  [Codigo da Empresa   ]=COD_EMPRESA
                  [Codigo do Item      ]=COD_ITEM
                  UnLockRecord
                  Loop
          EndIf
          If IsLockRecord()
             Then Loop
          EndIf
          If DTREF>[Data da Ultima Saida]
             Then [Data da Ultima Saida]=DTREF
          EndIf
          UnLockRecord

          QuitLoop
        EndWhile
EndIf
Moveto Tabela
EndProc  ;  (Estoque)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()
Moveto "CprobC"

If CHAVEC=0 and IsAssigned(PRODUCAO_CORTE) and PRODUCAO_CORTE=true and IsBlank([CprobC->Numero_ProducaoCorte])
   Then Mensagem("Este Lan‡amento foi criado atrav‚s da Rotina de Fac‡„o > 59. Lan‡amento de Ocorrˆncias - Int/Ext")
        CHAVEC=9
        Return
EndIf

If CHAVEC=0 and Not IsAssigned(PRODUCAO_CORTE) and IsBlank([CprobC->Numero_ProducaoIE])
   Then Mensagem("Este Lan‡amento foi criado atrav‚s da Rotina de Fac‡„o > 61. Lan‡amento de Ocorrˆncias - Corte")
        CHAVEC=9
        Return
EndIf         

If IsAssigned(PRODUCAO_CORTE) and PRODUCAO_CORTE=true
   Then Moveto [Numero_ProducaoCorte]
   Else Moveto [Numero_ProducaoIE]
EndIf   

FACA_CHAVEI=True
INICIO_PAGINA=False

While True
  
  TECLA=" Esc=Retornar  "
  If Field()="Numero_ProducaoCorte"   Or       
     Field()="Numero_ProducaoIE"    Or
     Field()="Codigo da Empresa"         
     Then TECLA=TECLA + "F1=Tabelas  "
  EndIf  
  
  MSGCAMPO=Field()

  Prompt TECLA
  Wait Field
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F8","F35","Down"
  
  Switch
  Case RetVal="F1":
       If Field()="Numero_ProducaoCorte"   Or       
          Field()="Numero_ProducaoIE"    Or
          Field()="Codigo da Empresa"      
          Then CONSULTAF1()
       EndIf
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="Down":
       If CHAVEC=0
          Then QuitLoop
       EndIf
  Case Retval="DEL":
       If CHAVEC=0
          Then If QuerExcluir("")
                  Then EXCLUSAO_C()
                       CHAVEC=9
                       QuitLoop
               EndIf
       EndIf
  Case Retval="ESC"                         :
       Switch
       Case Field()="Numero_ProducaoCorte"  :   
            If QuerDesfazer("")
               Then If CHAVEC=1
                       Then EXCLUSAO_C()
                            CHAVEC=9
                            QuitLoop
                       Else Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf             
            Endif
            
       Case Field()="Numero_ProducaoIE"  :   
            If QuerDesfazer("")
               Then If CHAVEC=1
                       Then EXCLUSAO_C()
                            CHAVEC=9
                            QuitLoop
                       Else Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf             
            Endif
       Case Field()="Data_Ocorrencia"       :  
            If IsBlank([Numero_ProducaoIE])
               Then Moveto [Numero_ProducaoCorte]
               Else Moveto [Numero_ProducaoIE]
            EndIf   
       OtherWise                            : Left
       EndSwitch
       
  Case Retval="ENTER":
       Switch
       Case Field()="Numero_ProducaoCorte" :
            If IsBlank([Numero_ProducaoCorte])
               Then Loop
               Else Moveto [Data_Ocorrencia]
            EndIf   
       Case Field()="Numero_ProducaoIE"    :
            If IsBlank([Numero_ProducaoIE])
               Then Loop
               Else Moveto [Data_Ocorrencia]
            EndIf   
       Case Field()="Data_Ocorrencia"      :
            If IsBlank([])
               Then []=Today()         
            EndIf
            If Not IntervaloData([Data_Ocorrencia])
               Then Loop
            EndIf   
            SetaCorRegistro("Padrao")
            QuitLoop               
       OtherWise                           : Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc CHAVEI()
While True
  Moveto "CprobI"
  Moveto [Sequencia do Lancamento]
  End
  ITEM = [Sequencia do Lancamento]
  Down
  Moveto [Sequencia do Lancamento]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
                 
  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True
        Moveto "CprobI"
        Moveto [Sequencia do Lancamento]

        MSGCAMPO=""
        Tecla=""
        AguardaTeclasPadraoIt2()
        
        If Retval = -33
           Then Echo Normal
                Echo Off
                ShowPopup " Fun‡”es " CENTERED
                  "F3  ~V~er Ficha           " : " Ver itens modo Ficha             " : "F3",
                  "F9  ~A~tiva CDBarras      " : " Ativa Leitura Codigo de Barras   " : "F9",
                  Separator,
                  "F6  ~O~bserva‡äes         " : " Observa‡”es                      " : "F6",
                  Separator,
                  "~C~ancelar                " : " Cancelar a Opera‡„o                         " : "CANCELAR"
                EndMenu
                To MenuVar
                echo off
                If MenuVar="CANCELAR" or MenuVar="Esc"
                   Then Loop
                EndIf
            
                RetVal=MenuVar
        EndIf        
                     
        Switch
        Case Retval="F9":
             del
             CDBarras()
             QuitLoop            
        Case RetVal="F3" : 
             Del
             Moveto [Sequencia do Lancamento]
             If RecordStatus("New")
                Then MENSAGEM("Sem Item p/ ver !")
                     QuitLoop
             EndIf
             Opcao_Ver=True
             CHAVEI=0
             Home
             ITEM=[Sequencia do Lancamento]
             Inicia_Registro()
             CHAVEI=1
             DigitaI()
             QuitLoop
         
        Case RetVal="F6":
             Moveto "CprobC"
             Edita_Memo("Observacoes",15,01,06,78,"Observa‡Æo Ocorrˆncia")     
                      
        Case RetVal="PGDN":   
             Del
             Moveto [Codigo do Item]
             If RecordStatus("New")=True
                Then MENSAGEM("O Lan‡amento deve ter pelo menos 1(um) Item Ok !")
                     Loop
             EndIf
             Requisicao("Inclusao")
             FACA_CHAVEI =False
             FACA_DIGITAC=False
             CHAVEI=9
             Return
        Case Retval="ESC": 
             Del
             Moveto [Codigo do Item]
             If RecordStatus("New")=True
                Then If QuerExcluir("")
                        Then FACA_CHAVEI =False
                             FACA_DIGITAC=False
                             CHAVEC=8
                        Else Loop
                     EndIf         
             EndIf   
             CHAVEI=9
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               Moveto "CprobI"
               Moveto [Sequencia do Lancamento]
               
               PAGINA_ESPECIAL("CprobI","MR")
               ITEM = [Sequencia do Lancamento]
               Switch                                   
                 Case EDITAR="S"  : CHAVEI=0
                                    Controla_EdicaoI()
                 Case EXCLUIR="S" : If QuerExcluir("")
                                       Then If Checa_Supervisor()
                                                Then EXCLUSAO_I()
                                                     Moveto "CprobI"
                                            EndIf
                                       Else UnLockRecord
                                     EndIf
                 OtherWise        : QuitLoop
               EndSwitch
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ENTER": 
             If Not Seta_Sequencia(ITEM,True)
                Then Del
                     QuitLoop
             EndIf
             ITEM=[]
             Del
             Locate LANCTO,ITEM
             If Retval
                Then CHAVEI=0
                Else CHAVEI=1
                     End Down
                     [Sequencia do Lancamento] = ITEM
                     Moveto [Sequencia do Lancamento]
                     Locate ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)

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

SEMREGISTRO=False

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

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

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

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

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

FIELD_LOCATE=Field()

ImageRights ReadOnly
SetaCorRegistro("Paginar")

msgcampo =""
prompt TEXTO_LOCATE

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

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

If Table()<>TABIDA
   Then Moveto TABIDA
EndIf   

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

EndProc

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DIGITAI()

If CHAVEI=1
   Then VSD_I_Descricao_Etapa=""
EndIf  

ModoLocalizarItem("","","")
Showdialog "Dados do Item [     ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","F7","ClearArea","HOME","END","PGDN","PGUP"
     @ 10,04 height 09 width 70  

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

   @ 00,03 ?? LOCALIZAR_POR

   Label  @ 00,01 ">" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "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  @ 00,54 "Tipo" For "I_Tipo_Ocorrencia"
   Accept @ 01,54 Width 13 "A10" picture "LD,PERDA,RECICLAGEM" Tag "I_Tipo_Ocorrencia" to VSD_I_Tipo_Ocorrencia

   Label  @ 02,00 "Quantidade" For "I_Quantidade"
   Accept @ 03,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 02,15 "UN" For "I_UN_Item"
   Accept @ 03,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   
   Label  @ 02,21 "Etapa" For "I_Etapa"
   Accept @ 03,21 Width 10 "A8" picture "###.###" Tag "I_Etapa" to VSD_I_Etapa
   Accept @ 03,32 Width 26 "A25" picture "!*!" Tag "I_Descricao_Etapa" to VSD_I_Descricao_Etapa
   
   Label  @ 04,00 "Problema" For "I_Problema"
   Accept @ 05,01 Width 4 "A4" picture "#*#" Tag "I_Problema" to VSD_I_Problema
   Accept @ 05,06 Width 28 "A25" picture "!*!" Tag "I_Descricao_Problema" to VSD_I_Descricao_Problema
   
   Label  @ 04,35 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 05,35 Width 12 "N" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 04,48 "Ct.Total" For "I_Custo_Total"
   Accept @ 05,48 Width 12 "$" picture "#*#.[##]" Tag "I_Custo_Total" to VSD_I_Custo_Total
   
   Accept @ 05,63 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 de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5
TECLA="Esc=Retornar  "
MSG_CAMPO=""
Temp=True

If Not IsAssigned(PARAM_F1) Then PARAM_F1 = False EndIf 
                     
If INICIO_DIALOG
   Then If CHAVEI=0
           Then If IsAssigned(PRODUCAO_CORTE) and PRODUCAO_CORTE=true
                   Then Campo="I_Quantidade" 
                   Else Campo="I_Tipo_Ocorrencia"
                EndIf           
           Else Campo="I_Codigo_Item"
        EndIf              
        INICIO_DIALOG=False
EndIf 

If Opcao_Ver=True Then Campo="I_Seq" EndIf
If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Opcao_Ver=True:
           Temp=False
           Switch
             Case Evento["KeyCode"] =  27:
                  CancelDialog
             OtherWise:
               Mover_Reg=True
               Switch
                 Case Evento["KeyCode"] = -71:
                      If AtFirst()
                         Then Mover_Reg=False Beep
                         Else Home
                      EndIf
                 Case Evento["KeyCode"] = -79:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else End
                      EndIf
                 Case Evento["KeyCode"] = -73:
                      If AtFirst()
                         Then Mover_Reg=False Beep
                         Else Up
                      EndIf
                 Case Evento["KeyCode"] = -81:
                      If AtLast()
                         Then Mover_Reg=False Beep
                         Else Down
                      EndIf
               EndSwitch
               If Mover_Reg=True
                  Then ITEM=[Sequencia do Lancamento]
                       Inicia_Registro()
               EndIf
           EndSwitch
       Case Evento["KeyCode"] = 9 Or
            Evento["KeyCode"] = -15:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEI=0
               Then If QuerExcluir("")
                       Then CHAVEI=8
                            CancelDialog
                    EndIf
            EndIf
                            
     Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
          ModoLocalizarItem("SELECAO","","CPROBC")
                     
     Case Evento["KeyCode"] = -59:
           If Campo="I_Problema" 
              Then If Seleciona_Opcoes("Problema","")   
                      Then  VSD_I_Problema           = Registro_F1["Sequencia"         ]
                            VSD_I_Descricao_Problema = Registro_F1["Descricao_Problema"]
                   EndIf                 
           EndIf
           If Campo="I_Codigo_Item" Or
              Campo="I_Etapa"
              Then 
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="I_Codigo_Item" Then Moveto [Codigo do Item ] EndIf
                    If Campo="I_Etapa"        Then Moveto [Codigo_Etapa  ] EndIf

                    If ConsultaF1()
                       Then PARAM_F1 = True
                    EndIf
                    
                    Window Select JANELA
                    WinArray5["FLOATING"]=True
                    Window SetAttributes JANELA From WinArray5

                    Echo Normal
                    Echo Off                                                
                    
                    If Campo="I_Codigo_Item"
                       Then VSD_I_Codigo_Item    = [Codigo do Item    ]
                            VSD_I_Descricao_Item = [Descricao do Item ]
                            VSD_I_Tipo_Item      = [Tipo do Item      ]
                            VSD_I_UN_Item        = [Unidade Interna   ]
                    EndIf
                              
                    If Campo="I_Etapa"
                       Then VSD_I_Etapa           = [Codigo_Etapa   ]
                            VSD_I_Descricao_Etapa = LTrim([Descricao_Etapa])
                    Endif
                    Moveto "CprobI"
                    
           EndIf
           If Campo="I_Tipo_Ocorrencia"
              Then ShowPopup " Tipos de Ocorrencia " CENTERED
                   "~1~=LD                     " : ""                        : "LD",
                   "~2~=PERDA                  " : ""                        : "PERDA",
                   "~3~=RECICLAGEM             " : ""                        : "RECICLAGEM",
                   "~C~ancelar                 " : " Cancelar a Opera‡„o"    : "CANCELAR"                                                                       
                   EndMenu
                   To MenuVar
                   If MenuVar="CANCELAR" or MenuVar="Esc"
                      Then Return
                      Else VSD_I_Tipo_Ocorrencia=MenuVar
                   EndIf  
           EndIf 
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="I_Codigo_Item":
                  If QuerDesfazer("")
                     Then CHAVEI=9
                          Del
                          CancelDialog
                  EndIf
             
             Case Campo="I_Tipo_Ocorrencia":
                  If CHAVEI=1
                     Then Campo="I_Codigo_Item"
                     Else If QuerDesfazer("")
                             Then CHAVEI=9
                                  CopyFromArray RegItem
                                  CancelDialog
                                  UnlockRecord
                          EndIf
                  Endif
             Case Campo="I_Quantidade"      : 
             If IsAssigned(PRODUCAO_CORTE) and PRODUCAO_CORTE=true
                Then If CHAVEI=1
                        Then Campo="I_Codigo_Item"
                        Else If QuerDesfazer("")
                             Then CHAVEI=9
                                  CopyFromArray RegItem
                                  CancelDialog
                                  UnlockRecord
                             EndIf
                     EndIf
                Else Campo="I_Tipo_Ocorrencia"
             EndIf        
             Case Campo="I_Etapa"           : Campo="I_Quantidade"
             Case Campo="I_Problema"        : Campo="I_Etapa"
             Case Campo="I_Custo_Unitario"  : Campo="I_Problema"  
             Case Campo="I_Flag"            : Campo="I_Custo_Unitario"    
             
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="I_Codigo_Item":  
                  VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                  If Not IsBlank(VSD_I_Codigo_Item)
                     Then MSG="Item n„o localizado no cadastro de itens!"
                          FAZ_ROTINA = False
                          VSD_I_Codigo_Item = Item_Localizador(VSD_I_Codigo_Item)
                          Moveto [Codigo do Item]
                          Ativa_Lookup()
                          ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item,"")
                          If RetVal
                             Then VSD_I_Codigo_Item=[Codigo do Item]
                                  KeyPress "ESC"
                                  GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To REG_ITEM
                                  If RetVal
                                     Then FAZ_ROTINA = True
                                          VSD_I_Descricao_Item = REG_ITEM["Descricao do Item"]
                                          VSD_I_Tipo_Item      = REG_ITEM["Tipo do Item"]
                                          VSD_I_UN_Item        = REG_ITEM["Unidade Interna"]
                                          While True

                                            If REG_ITEM["Inativo"]="S"
                                               Then FAZ_ROTINA = False
                                                    MSG="Este item: //"+REG_ITEM["Codigo do Item"]+"//"+
                                                         REG_ITEM["Descricao do Item"]+"// // esta inativo !"
                                                    QuitLoop
                                            EndIf
                                            
                                            If IsBlank([CprobC->Numero_ProducaoCorte])
                                               Then NPROD=[CprobC->Numero_ProducaoIE]
                                                    GetRecord "\\Sistemas\\Faccao\\Rfacri" NPROD, VSD_I_Codigo_Item To REG_PROD
                                                    If Not Retval
                                                       Then Mensagem("Este Item nÆo consta na produ‡Æo informada !")
                                                            QuitLoop
                                                    EndIf
                                               Else NPROD=[CprobC->Numero_ProducaoCorte]
                                               GetRecord "\\Sistemas\\Faccao\\Pcfacri" NPROD, VSD_I_Codigo_Item To REG_PROD
                                                    If Not Retval
                                                       Then Mensagem("Este Item nÆo consta na produ‡Æo informada !")
                                                            QuitLoop
                                                    EndIf                     
                                            EndIf
                                            [Codigo do Item]=VSD_I_Codigo_Item
                                            Registro_Item("Ler")
                                            
                                            If IsAssigned(PRODUCAO_CORTE) and PRODUCAO_CORTE=true
                                               Then VSD_I_Tipo_Ocorrencia=ControlValue("I_Tipo_Ocorrencia")
                                                    VSD_I_Tipo_Ocorrencia="PERDA"
                                                    [Tipo_Ocorrencia]=VSD_I_Tipo_Ocorrencia
                                                    Campo="I_Quantidade"
                                               Else Campo="I_Tipo_Ocorrencia"
                                            EndIf   
                                            QuitLoop
                                          EndWhile
                                  EndIf
                             Else KeyPress "ESC"      
                           EndIf
                           If Not FAZ_ROTINA
                              Then Mensagem(MSG)
                                   VSD_I_Codigo_Item   =""
                                   VSD_I_Descricao_Item=""
                                   VSD_I_UN_Item       =""
                                   VSD_I_CF_Item       =""
                                   VSD_I_CST_Item      =""
                                   VSD_I_Tipo_Item     =""
                                   VSD_I_Descricao_Etapa=""
                           EndIf
                           Echo Off
                  EndIf
             Case Campo="I_Tipo_Ocorrencia":
                  VSD_I_Tipo_Ocorrencia=ControlValue("I_Tipo_Ocorrencia")
                  If IsBlank(VSD_I_Tipo_Ocorrencia)
                     Then Campo="I_Tipo_Ocorrencia"
                     Else If VSD_I_Tipo_Ocorrencia="LD"
                             Then CODIGOITEM = PegaCodigoRaiz(VSD_I_Codigo_Item)
                                  CODIGOITEM = "04"+SubStr(CODIGOITEM,3,8)
                                  GetRecord "\\Sistemas\\Estoque\\Itens" CODIGOITEM To REG_ITEM 
                                  If RetVal
                                     Then Campo="I_Quantidade"
                                          [Tipo_Ocorrencia]=VSD_I_Tipo_Ocorrencia
                                     Else Mensagem("Item LD "+CODIGOITEM+" n„o localizado no cadastro de itens!")
                                          Campo="I_Tipo_Ocorrencia"
                                  EndIf
                             Else Campo="I_Quantidade"  
                                  [Tipo_Ocorrencia]=VSD_I_Tipo_Ocorrencia
                          EndIf
                  EndIf                                      
             Case Campo="I_Quantidade": 
                  VSD_I_Quantidade=ControlValue("I_Quantidade")
                  If IsBlank(VSD_I_Quantidade) Then FastMsg("Valor Invalido !")
                     Else
                         GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To FRACIONADO
                         If RetVal
                            Then If FRACIONADO["Fracionado"]="N" And (VSD_I_Quantidade-Int(VSD_I_Quantidade))<>0
                                    Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                                    Else [Quantidade]=VSD_I_Quantidade
                                         Campo="I_Etapa"
                                 EndIf
                         EndIf
                         Release Vars FRACIONADO
                  EndIf
             Case Campo="I_Etapa"             :
                  VSD_I_Etapa=ControlValue("I_Etapa")
                  If Not IsBlank(VSD_I_Etapa)
                     Then If Substr(VSD_I_Etapa,5,7) = "000"
                             Then FastMsg("Etapa Inv lida !")
                                  VSD_I_Etapa=""
                                  VSD_I_Descricao_Etapa=""
                             Else 
                                  Moveto [Codigo_Etapa]
                                  If Busca_Lookup("Codigo_Etapa",VSD_I_Etapa,"Etapa nÆo Cadastrada !")
                                     Then 
                                        VSD_I_Etapa          =REG_BUSCA_LOOKUP["Codigo_Etapa"]
                                        VSD_I_Descricao_Etapa=REG_BUSCA_LOOKUP["Descricao_Etapa"]
                                        Monta_Opcoes("Problema",substr(VSD_I_Etapa,1,4)+"000")
                                        Campo="I_Problema"
                                  EndIf
                          EndIf        
                  EndIf
             Case Campo="I_Problema":
                  VSD_I_Problema=ControlValue("I_Problema")
                  If Not IsBlank(VSD_I_Problema)
                     Then VSD_I_Problema=Ltrim(Rtrim(VSD_I_Problema))
                         If Checa_Opcoes("Problema",VSD_I_Problema)
                            Then VSD_I_Descricao_Problema = Registro_F1["Descricao_Problema"]
                                 Pega_Preco()
                                 Campo="I_Custo_Unitario"
                            Else FastMsg("Valor Invalido !")
                         EndIf
                     Else FastMsg("Valor Invalido !")       
                  EndIf                                                           
             Case Campo="I_Custo_Unitario":
                  VSD_I_Custo_Unitario=ControlValue("I_Custo_Unitario")
                  If IsBlank(VSD_I_Custo_Unitario)
                     Then Return
                  EndIf   
                  If VSD_I_Quantidade>0
                     Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
                     Else If VSD_I_Custo_Unitario>0
                             Then VSD_I_Custo_Total=VSD_I_Custo_Unitario
                          EndIf
                  EndIf
                  Campo="I_Flag"
             Case Campo="I_Flag"  :  
                  RefreshDialog 
                  Registro_Item("Gravar")
                  AcceptDialog                               
           EndSwitch
           Temp=False
   EndSwitch
EndIf
SelectControl Campo
TECLA="Esc=Retornar  "

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

Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="I_Descricao_Item":
       MSGCAMPO="Descri‡„o do Item"
  Case Campo="I_Tipo_Item":
       MSGCAMPO="Tipo do Item"
  Case Campo="I_Quantidade":
       MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item":
       MSGCAMPO="Unidade Fiscal"
  Case Campo="I_Custo_Unitario":
       MSGCAMPO="Custo Unitario"
  Case Campo="I_Custo_Total":
       MSGCAMPO="Custo Total"
  Case Campo="I_CCusto":
       MSGCAMPO="Centro de Custo"
  Case Campo="I_Tipo_Ocorrencia":
       MSGCAMPO="[F1]Consultar tabela"
  Case Campo="I_Etapa":
       MSGCAMPO="Etapa"
  Case Campo="I_Problema":
       MSGCAMPO="Problema"               
  Case Campo="I_Codigo_Item" : 
       MSGCAMPO=LOCALIZAR_POR +", [F1]Consultar tabela  [F7]Alterar modo localizar"
  OtherWise:
       MSGCAMPO=""
EndSwitch

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

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

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

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

While True

  while true
  
    Moveto [Sequencia do Lancamento]
    End
    ITEM = [Sequencia do Lancamento]
    Down
    Moveto [Sequencia do Lancamento]
    Seta_Sequencia(ITEM,False)
    If IsLockRecord()
       Then Del
            Loop
    EndIf
    quitloop
  endwhile

  If Not Ler_CDBarras(22,00)
     Then del
          Return False
  EndIf
                         
  Achou_Item=False                       
  CODIT=Dados_Item
  ITOK=True
  
  Moveto [Codigo do Item]
  Ativa_Lookup()
  Moveto [Codigo de Barras]
  Locate IndexOrder by "cod_barras" CODIT
  If Not RetVal
     Then KeyPress "ESC"
          If Codigo_Barras2(CODIT,"S")
             Then CODIT = CODIGO_BARRA2
                  Moveto [Codigo do Item]
                  Ativa_Lookup()
                  Moveto [Codigo do Item]
                  Locate CODIT
             Else RetVal = False
                  ITOK   =  False
          EndIf
  EndIf
  
  If Retval
     Then CopyToArray REG_BUSCA_LOOKUP
          CODIT =[Codigo do Item   ]
          DESCIT=[Descricao do Item]
          Keypress "ESC"
          
          If REG_BUSCA_LOOKUP["Inativo"]="S"
             Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo !")
                  ITOK=False
             Else If IsBlank([CprobC->Numero_ProducaoCorte])
                     Then NPROD=[CprobC->Numero_ProducaoIE]
                          GetRecord "\\Sistemas\\Faccao\\Rfacri" NPROD, CODIT To REG_PROD
                          If Not Retval
                             Then Mensagem("Este Item nÆo consta na produ‡Æo informada !")
                                  ITOK=False
                          EndIf
                     Else NPROD=[CprobC->Numero_ProducaoCorte]
                          GetRecord "\\Sistemas\\Faccao\\Pcfacri" NPROD, CODIT To REG_PROD
                          If Not Retval
                             Then Mensagem("Este Item nÆo consta na produ‡Æo informada !")
                                  ITOK=False
                          EndIf                     
                  EndIf                
          EndIf
  EndIf
  Moveto "CprobI"
  
  If ITOK
     Then [Codigo do Item   ]    = CODIT
          [Quantidade       ]    = Dados_QTD
          [Descricao do Item]    = DESCIT   
          ITEM=[Sequencia do Lancamento]
          Inicia_Registro()
          CHAVEI=1
          DigitaI()
     Else del            
  EndIf

EndWhile

Return ITOK  

EndProc
;*******************************************************************************
;* Rotina para Tabela de Preco                                                 *
;*******************************************************************************
Proc Pega_Preco()
Private TABPR, CodItem, Registro_TabPreco_Item, PesqOk, CodEtapa, SeqProb, Registro_Problema

CodEtapa = Substr(VSD_I_Etapa,1,4)+"000"
SeqProb  = NumVal(VSD_I_Problema)
CodItem  = [Codigo do Item]
PesqOk   = False

GetRecord "\\Sistemas\\Faccao\\Tbetapap" CodEtapa, SeqProb To Registro_Problema
If Retval
   Then If Registro_Problema["Utiliza_Custo_Formula"]="S"
           Then GetRecord "\\Sistemas\\Producao\\FormulaC" Coditem To Registro_TabPreco_Item
                If Retval
                   Then VSD_I_Custo_Unitario=Registro_TabPreco_Item["Custo Unitario"]
                        PesqOk=true
                Endif
           Else CodItem=PegaCodigoRaiz(CodItem)
                TABPR=Registro_Problema["Codigo da Tabela"]
                GetRecord "\\Sistemas\\Vendas\\Tbprite" TABPR, CodItem  To Registro_TabPreco_Item
                If Retval
                   Then VSD_I_Custo_Unitario=Registro_TabPreco_Item["Preco Unitario"]
                        PesqOK=true
                EndIf
        EndIf
EndIf                           

If PesqOK=false and CHAVEI=1
   Then VSD_I_Custo_Unitario=BlankNum()
EndIf

Return True
EndProc ;(Pega_Preco)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro

Moveto "CprobI"

Switch
  Case Funcao_Registro="Gravar":    
       [Codigo do Item       ]=VSD_I_Codigo_Item
       [Descricao do Item    ]=VSD_I_Descricao_Item
       [Tipo do Item         ]=VSD_I_Tipo_Item

       [Quantidade           ]=VSD_I_Quantidade
       [Unidade Interna      ]=VSD_I_UN_Item
       [Custo Unitario       ]=VSD_I_Custo_Unitario
       [Custo Total          ]=Round(VSD_I_Custo_Total,2)
       
       [Tipo_Ocorrencia      ]=VSD_I_Tipo_Ocorrencia
       [Codigo_Etapa         ]=VSD_I_Etapa
       [Descricao_Etapa      ]=VSD_I_Descricao_Etapa     
       
       [Sequencia_Problema   ]=Numval(VSD_I_Problema)
       [Descricao_Problema   ]=VSD_I_Descricao_Problema

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

       VSD_I_Tipo_Item              =[Tipo do Item              ]
       
       VSD_I_Codigo_Item            =[Codigo do Item            ]
       VSD_I_Descricao_Item         =[Descricao do Item         ]
       VSD_I_Quantidade             =[Quantidade                ]
               
       
       VSD_I_UN_Item                =[Unidade Interna           ]
       VSD_I_Custo_Unitario         =[Custo Unitario            ]
       VSD_I_Custo_Total            =Round([Custo Total               ],2)
       
       VSD_I_Tipo_Ocorrencia        =[Tipo_Ocorrencia           ]
       VSD_I_Etapa                  =[Codigo_Etapa              ]
       VSD_I_Descricao_Etapa        =[Descricao_Etapa           ]
       
       VSD_I_Problema               =[Sequencia_Problema        ]
       VSD_I_Descricao_Problema     =[Descricao_Problema        ]

       VSD_I_Quantidade_Aux         =VSD_I_Quantidade

EndSwitch
EndProc  ; (Registro_Item)

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


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

INICIA_REGISTRO()
DIGITAI()
If CHAVEI=1 Or CHAVEI=0
   Then UnlockRecord
        Moveto "CprobI"
EndIf
SetaCorRegistro("Padrao")

EndProc

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

Echo Normal
Echo Off

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

EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO_C()

Moveto "CprobC"
CopyToArray REG_PROBLEMA  

Moveto "CprobI"
While RecordStatus("New")=False
  EXCLUSAO_I()
EndWhile

Requisicao("Exclusao")

Moveto "CprobC"
Del
EndProc   ; (Exclusao_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc EXCLUSAO_I()
Moveto "CprobI"
CODIT=[Codigo do Item]
Del
EndProc  ; (Exclusao_I)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
Private TAB_ANT
FACA_DIGITAC=True

CopyToArray REG_PROBLEMA

While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1
     Then TAB_ANT = Table()
          Moveto "CprobC"
          Controle_Dia()
          Moveto TAB_ANT
  EndIf
  While FACA_CHAVEI
    While True
      CHAVEI()
      If CHAVEI=9 Then QuitLoop EndIf
      Controla_EdicaoI()
    EndWhile
  EndWhile
EndWhile
Moveto "CprobC" 
If CHAVEC=8 Then EXCLUSAO_C() EndIf

If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

SaveTables
EndProc

;*******************************************************************************
;* Rotina Principal Controle de Ocorrencias                                    *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Vendas\\Bib_Bal,\\Sistemas\\Cadastro\\Bib_Bloq"
SYS_VALOR()
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""  EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""   EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""   EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA  =""   EndIf
If Not IsAssigned(NOMEMPRESA)          Then NOMEMPRESA=""           EndIf

;***** Verificar se o Cliente tem acesso a esta rotina *****
If Bloqueia_Rotina("PROBLEMAS")
   Then Return
EndIf

If Not IsAssigned(LOCALIZA_CODIGO) Then LOCALIZA_CODIGO=""  EndIf

View NoWindow "\\Sistemas\\Estoque\\RQCabeca"
View NoWindow "\\Sistemas\\Estoque\\RQitem"
View NoWindow "\\Sistemas\\Estoque\\Requisit"
View NoWindow "\\Sistemas\\Estoque\\EstqPrm"
View NoWindow "\\Sistemas\\Estoque\\SdEstq"


Coedit NoWindow "Cprobc"
PickForm "F"
OPCAO_FORM = "F"

While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
