;** RqTRF **********************************************************************
;*  Digitacao de Transferˆncia de Produtos                                     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)                        
;Desenvolvido em : 06/07/2016 por Bruno Carvalho             
;Ultima Alteracao: 13/07/2016 por Bruno Carvalho                         
;Motivo Alteracao: Novas implementa‡äes                                                
;Ultima Alteracao: 20/07/2016 por Bruno Carvalho                         
;Motivo Alteracao: Adicionado op‡Æo de "F4" e "F5" p/ escolher forma de visualiza‡Æo por codigo do item ou barra 
;Ultima Alteracao: 01/08/2016 por Bruno Carvalho                         
;Motivo Alteracao: Adicionado campo de observa‡Æo e vari vel LOCALIZACAO_ITEM no FORM
;Ultima Alteracao: 15/08/2016 por Bruno Carvalho                         
;Motivo Alteracao: Adicionado Avaria -> Empresa 0002
;Ultima Alteracao: 30/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem e restri‡äes         
;Ultima Alteracao: 11/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes permitir cancelar solicita‡Æo para devolu‡Æo
;Ultima Alteracao: 30/11/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ Controlar por Usu rio a Transferˆncia de Produto e add processo para digitar a quantidade por c¢digo de barras
;Ultima Alteracao: 02/12/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ Controlar por Usu rio a Devolu‡Æo e Avaria de Produto e add processo para digitar a quantidade por c¢digo de barras 
;Ultima Alteracao: 06/12/2016 por Bruno Carvalho
;Motivo Alteracao: Adiconado senha no controle de usu rio 
;Ultima Alteracao: 06/12/2016 por Bruno Carvalho
;Motivo Alteracao: CDBarras() -> #0294# Permitir apenas c¢digo de barras
;Ultima Alteracao: 26/12/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes Ler_CDBarras() -> Quando nÆo informa quantidade, a vari vel Dados_QTD receber  o total da [Quantidade]
;Ultima Alteracao: 04/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes fastmsg
;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: 28/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle de lista usuario e senha
;Ultima Alteracao: 12/03/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado 2 novos tipos de movimento "Etiqueta" e "Procura"
;Ultima Alteracao: 14/03/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes [Tipode Movimento] = "D" -> [Tipode Movimento] = "DEV" 
;Ultima Alteracao: 14/03/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes [Tipode Movimento] = "A" -> [Tipode Movimento] = "AVA"
                                                                                                   
;*******************************************************************************
;* Rotina para Controlar Chave                                                 *
;*******************************************************************************
Proc CHAVEC()

FACA_DIGITAC  = True
INICIO_PAGINA = True                    

While True
  Moveto "Rqtrf"
  End
  Moveto [Numero do Lancamento]
  LANCTO=[Numero do Lancamento]
     
  If OPCAO_FORM_ESCOLHA="F" Or OPCAO_FORM_ESCOLHA="1"
     Then Down
     Else PgDn PgDn
  EndIf
  Moveto [Numero do Lancamento]

  SetaCorRegistro("Editar")
  While True
  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao() 
  
  If RetVal=-33 
     Then Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
            "[F4] Visualizar a rela‡„o por codigo de ~b~arras" : " Visualizar a rela‡„o por codigo de barras " : "F4",
            "[F5] Visualizar a rela‡„o por codigo do ~i~tem"   : " Visualizar a rela‡„o por codigo do item   " : "F5",
            Separator,
            "~S~air"                        : " Ignorar Op‡äes"                :"CANCELAR"
          EndMenu
          To MenuVar
          Echo Off
          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Loop
          EndIf
          RetVal=MenuVar
   EndIf
   
   Switch
        Case RetVal="F4": OPCAO_FORM="F"
                          OPCAO_FORM_ESCOLHA="F"
                          Do_it!
                          ClearAll
                          FileWrite PrivDir()+"RQTRF.INI" From GravaExpressao("OPCAO_FORM_ESCOLHA","S",OPCAO_FORM_ESCOLHA)    
                          Abre_Tabelas()
                          QuitLoop
        Case RetVal="F5": OPCAO_FORM="1"
                          OPCAO_FORM_ESCOLHA="1"
                          Do_it!
                          ClearAll
                          FileWrite PrivDir()+"RQTRF.INI" From GravaExpressao("OPCAO_FORM_ESCOLHA","S",OPCAO_FORM_ESCOLHA)
                          Abre_Tabelas()
                          QuitLoop
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F3":
             If OPCAO_FORM_ESCOLHA="F" Or OPCAO_FORM_ESCOLHA="1" 
                Then OPCAO_FORM="2"
                Else OPCAO_FORM=OPCAO_FORM_ESCOLHA
             EndIf
             Del                    
             CHAVEC=5
             Return

        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               FACA_DIGITAC  = True
               INICIO_PAGINA = True

               If OPCAO_FORM_ESCOLHA="F" Or OPCAO_FORM_ESCOLHA="1"
                  Then PAGINA("Rqtrf","MR")
                  Else PAGINA("Rqtrf","MT")
               EndIf
               LANCTO=[Numero do Lancamento]
               Switch
                 Case EDITAR="S": 
                      PickForm "2"
                      Echo Normal
                      Echo Off
                      If Checa_Controle([Numero_Controle_Dia])
                         Then CHAVEC=0
                              Controla_EdicaoC()
                         Else UnLockRecord
                      EndIf
                 Case EXCLUIR="S":
                      PickForm "2"
                      Echo Normal
                      Echo Off
                      If [Status]<>""
                         Then Mensagem("N„o ‚ poss¡vel excluir a solicita‡„o com o status de "+[Status]+"!")
                         Else If Checa_Controle([Numero_Controle_Dia]) And Checa_Supervisor()
                                 Then ;---- Processo para CANCELAR o lan‡amento ao inv‚s de excluir ---------------
                                      MSG = "Esta solicita‡„o n„o pode ser excluida, somente CANCELADA.//"+
                                            "Deseja cancelar esta solicita‡„o ?"
                                      ConfGeral(MSG)
                                      If Ok="S"
                                         Then While True
                                                Edita_Memo("Justificativa",08,01,15,76,"Justificativa")
                                                If RetVal
                                                   Then If [Justificativa]=""
                                                           Then Mensagem("Informe uma justificativa para cancelar esta solicita‡„o!")
                                                           Else Controle_Dia_Rqtrf("TRANSFERENCIA")
                                                                [Status]="CANCELADO"
                                                                QuitLoop
                                                        EndIf
                                                   Else QuitLoop
                                                EndIf
                                             EndWhile   
                                      EndIf
                                 ;---- Processo para excluir o lan‡amento --------------
                                 ;Then If [Rqtrf->Lancamento RqCabeca_Rqtrf]<>""
                                 ;        Then MSG = "A Requisi‡„o "+[Rqtrf->Lancamento RqCabeca_Rqtrf]+" foi gerada a partir desta solicita‡„o.//"+
                                 ;                   "A exclus„o deste lan‡amento ir  desfazer esta  requisi‡„o.//"+
                                 ;                   "Deseja realmente excluir esta solicita‡„o de tranferˆncia?"
                                 ;       Else MSG = "Este lan‡amento ainda n„o foi transferido!   //"+
                                 ;                   "Deseja realmente excluir esta solicita‡„o de tranferˆncia?"
                                 ;     EndIf
                                 ;     ConfGeral(MSG)
                                 ;     If Ok="S" 
                                 ;        Then EXCLUSAO_C()
                                 ;        Else UnLockRecord
                                 ;     EndIf
                                 Else UnLockRecord
                              EndIf
                      EndIf
                 OtherWise: QuitLoop
               EndSwitch
               If OPCAO_FORM="2"
                  Then PickForm "2"
                  Else PickForm OPCAO_FORM_ESCOLHA
               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 "2"    
             Moveto [Numero do Lancamento]
             If PROXIMO_LANCTO_REG_ACHOU
                Then CHAVEC=0
                     If Checa_Controle([Numero_Controle_Dia])
                        Then Return
                     EndIf
                Else CHAVEC=1
                     OPCAO_FORM=OPCAO_FORM_ESCOLHA
                     Mensagem("N„o ‚ poss¡vel criar solicita‡„o!")         
             EndIf         
             If CHAVEC=1
                Then Del
             EndIf
             If OPCAO_FORM_ESCOLHA="F" Or OPCAO_FORM_ESCOLHA="1"
                Then PickForm OPCAO_FORM_ESCOLHA
             EndIf
             QuitLoop
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)  
                               
;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()

Moveto "Rqtrf"
GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM 
If RetVal
   Then LOCALIZACAO_ITEM = REG_ITEM["Localizacao"]
   Else LOCALIZACAO_ITEM = ""
EndIf
Release Vars REG_ITEM

if [Status]<>""
   then FastMSg("Solicita‡Æo [ "+[Status]+" ] !")
EndIf

If [Tipo de Movimento]="DEV" And UTILIZA_CODIGO_BARRA
   Then [QuantidadeTrf]=[Quantidade]
EndIf

If [Tipo de Movimento]="DEV"  Or 
   [Tipo de Movimento]="NOT"  Or 
   [Tipo de Movimento]="CX"   Or
   [Tipo de Movimento]="PROC" Or
   [Tipo de Movimento]="ETQ"  Or
   UTILIZA_CODIGO_BARRA       Or 
   [Status]<>""
   Then Moveto [Flag]
   Else Moveto [QuantidadeTrf]
EndIf

While True
  TECLA=" Esc=Retornar  "
  ;If CHAVEC=0
  ;   Then TECLA=TECLA+"Del=Excluir  "
  ;   Else TECLA=TECLA+"             "
  ;EndIf
  If ([Tipo de Movimento]="TRA" or [Tipo de Movimento]="AVA" or [Tipo de Movimento]="DEV" Or
      [Tipo de Movimento]="CX" Or [Tipo de Movimento]="ETQ") And [Status]="" 
     Then TECLA=TECLA+"Alt+F=Fun‡”es  PgDn=Finalizar/Sair  "
     Else TECLA=TECLA+"               PgDn=Finalizar/Sair  "
  EndIf
   
  Prompt TECLA
  MSGCAMPO=Field()
  Switch
    Case Field()="QuantidadeTrf"             : MSGCAMPO="Quantidade a confirmar na opera‡Æo !"
    Case Field()="Flag"                      : If [Tipo de Movimento]="NOT"  Or 
                                                  [Tipo de Movimento]="PROC" Or
                                                  Not UTILIZA_CODIGO_BARRA   Or 
                                                  [Status]<>""
                                                  Then MSGCAMPO="Pausa para conferir dados !"
                                                  Else Switch
                                                         Case [Tipo de Movimento]="DEV" :
                                                              MSGCAMPO="Enter/F7=Ativa Leitura Codigo de Barras !"
                                                         Case [Tipo de Movimento]="CX" :
                                                              MSGCAMPO="F6=Confirma solicita‡„o de caixa"
                                                         Case [Tipo de Movimento]="ETQ" :
                                                              MSGCAMPO="F5=Confirma solicita‡„o de etiqueta"     
                                                         OtherWise : 
                                                              MSGCAMPO="Enter/F9=Ativa Leitura Codigo de Barras !"
                                                       EndSwitch
                                               EndIf  
  EndSwitch
                     
  Wait Field
   Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F3","F4","F5","F6","F7","F9",-33
 
  If RetVal=-33 and [Status]=""
     Then Switch
            case [Tipo de Movimento]="DEV":
              Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                "[F3] ~C~ancelar Solicita‡„o"   : " Cancela a Solicita‡„o                        " : "F3",
                "[F7] ~D~evolu‡„o Requisi‡„o"   : " Devolve o Produto para a empresa de destino  " : "F7",
                Separator,
                "~S~air"                        : " Ignorar Op‡äes"                :"CANCELAR"
              EndMenu
              To MenuVar
              Echo Off
              If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
              EndIf
              RetVal=MenuVar
            
            case [Tipo de Movimento]="AVA":
              Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                "[F3] ~C~ancelar Solicita‡„o"   : " Cancela a Solicita‡„o                        " : "F3",
                "[F9] ~T~ransferir o Produto"   : " Transferir o Produto para a empresa informada" : "F9",
                Separator,
                "~S~air"                        : " Ignorar Op‡äes"                :"CANCELAR"
              EndMenu
              To MenuVar
              Echo Off
              If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
              EndIf
              RetVal=MenuVar
            
            case [Tipo de Movimento]="TRA":
              Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                 "[F3] ~C~ancelar Solicita‡„o"   : " Cancela a Solicita‡„o                        " : "F3",
                 "[F4] ~E~stoque Insuficiente"   : " Estoque Insuficiente do Produto              " : "F4",
                 "[F9] ~T~ransferir o Produto"   : " Transferir o Produto para a empresa informada" : "F9",
                 Separator,
                 "~S~air"                        : " Ignorar Op‡äes"                :"CANCELAR"
              EndMenu
              To MenuVar
              Echo Off
              If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
              EndIf
              RetVal=MenuVar
              
         case [Tipo de Movimento]="ETQ" :
              Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                "[F3] ~C~ancelar Solicita‡„o"   : " Cancela a solicita‡„o             " : "F3",
                "[F5] ~S~olicita Etiqueta"      : " Confirma solicita‡„o de etiqueta  " : "F5",
                Separator,
                "~S~air"                        : " Ignorar Op‡äes"                :"CANCELAR"
              EndMenu
              To MenuVar
              Echo Off
              If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
              EndIf
              RetVal=MenuVar
              
          case [Tipo de Movimento]="CX" :
              Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                "[F3] ~C~ancelar Solicita‡„o" : " Cancela a solicita‡„o          " : "F3",
                "[F6] ~S~olicita Caixa      " : " Confirma solicita‡„o de caixa  " : "F6",
                Separator,
                "~S~air"                        : " Ignorar Op‡äes"                :"CANCELAR"
              EndMenu
              To MenuVar
              Echo Off
              If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
              EndIf
              RetVal=MenuVar
          EndSwitch
          
          
   EndIf

   Switch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()     
      Case RetVal="F1":
           If Field()="Codigo da EmpresaTrf"
              Then CONSULTAF1()
           EndIf
           
      Case RetVal="F3" : ;CANCELAR
           Switch
             Case [Status]<>""                : FastMsg("Opera‡Æo nÆo permitida, j  "+[Status])                  Loop
             Case [Tipo de Movimento]="NOT"   : FastMsg("Opera‡Æo nÆo permitida, Notifica‡„o!")                  Loop
             Case [Tipo de Movimento]="PROC"  : FastMsg("Opera‡Æo nÆo permitida, registro do item sem estoque!") Loop
           EndSwitch
                   
           MSG = "Deseja cancelar esta solicita‡„o ?"
           ConfGeral(MSG)
           If Ok="S"
              Then If Checa_Supervisor()
                      Then CampoAnt=Field()
                           While True
                             Edita_Memo("Justificativa",08,01,15,76,"Justificativa")
                             If RetVal
                                Then If [Justificativa]=""
                                        Then MSG = "Informe uma justificativa para cancelar esta solicita‡„o!"
                                             Mensagem(MSG) 
                                        Else [Status]="CANCELADO"
                                             if [Tipo de Movimento]="DEV"
                                                then Controle_Dia_Rqtrf("DEVOLUCAO")   
                                                else Controle_Dia_Rqtrf("TRANSFERENCIA")
                                             endif      
        
                                             CHAVEC=9
                                             Return
                                     EndIf
                                Else QuitLoop        
                             EndIf
                           EndWhile
                           Moveto Field CampoAnt
                   EndIf
           EndIf  
           
      Case RetVal="F4" : ;ESTOQUE INSUFICIENTE
           Switch
             Case [Status]<>""                : FastMsg("Opera‡Æo nÆo permitida, j  "+[Status])                  Loop
           
             Case [Tipo de Movimento]="AVA"   : FastMsg("Opera‡Æo nÆo permitida, Avaria!")                       Loop
             Case [Tipo de Movimento]="DEV"   : FastMsg("Opera‡Æo nÆo permitida, Devolu‡„o!")                    Loop
             Case [Tipo de Movimento]="NOT"   : FastMsg("Opera‡Æo nÆo permitida, Notifica‡„o!")                  Loop
             Case [Tipo de Movimento]="CX"    : FastMsg("Opera‡Æo nÆo permitida, Caixa!")                        Loop
             Case [Tipo de Movimento]="PROC"  : FastMsg("Opera‡Æo nÆo permitida, registro do item sem estoque!") Loop
             Case [Tipo de Movimento]="ETQ"   : FastMsg("Opera‡Æo nÆo permitida, Etiqueta!")                     Loop
           EndSwitch
              
           MSG = "Deseja informar que este produto esta com estoque insuficiente ?"
           ConfGeral(MSG)
           If Ok="S"
              Then If Checa_Supervisor()
                      Then CampoAnt=Field()
                           While True
                             Edita_Memo("Justificativa",08,01,15,76,"Justificativa")
                             If RetVal
                                Then If [Justificativa]=""
                                        Then MSG = "Informe uma justificativa para o produto insuficiente!"
                                             Mensagem(MSG) 
                                        Else [Status]="INSUFICIENTE"
                                             Controle_Dia_Rqtrf("TRANSFERENCIA")
                                             CHAVEC=9
                                             Return
                                     EndIf
                                Else QuitLoop        
                             EndIf
                           EndWhile
                           Moveto Field CampoAnt
                   EndIf
           EndIf  
           
      Case RetVal="F5" : ;ETIQUETA
           Switch
             Case [Status]<>""                : FastMsg("Opera‡Æo nÆo permitida, j  "+[Status])                  Loop
             Case [Tipo de Movimento]="TRA"   : FastMsg("Opera‡Æo nÆo permitida, Requisi‡„o!")                   Loop
             Case [Tipo de Movimento]="AVA"   : FastMsg("Opera‡Æo nÆo permitida, Avaria!")                       Loop
             Case [Tipo de Movimento]="DEV"   : FastMsg("Opera‡Æo nÆo permitida, Devolu‡„o!")                    Loop
             Case [Tipo de Movimento]="NOT"   : FastMsg("Opera‡Æo nÆo permitida, Notifica‡„o!")                  Loop
             Case [Tipo de Movimento]="CX"    : FastMsg("Opera‡Æo nÆo permitida, Caixa!")                        Loop
             Case [Tipo de Movimento]="PROC"  : FastMsg("Opera‡Æo nÆo permitida, registro do item sem estoque!") Loop
           EndSwitch
              
           MSG = "Deseja confirmar a confec‡Æo de etiqueta para a loja ?"
           ConfGeral(MSG)
           If Ok="S"
              Then If Checa_Supervisor()
                      Then CampoAnt=Field()
                           [Status]="SOLICITADO"
                           Controle_Dia_Rqtrf("TRANSFERENCIA")
                           CHAVEC=9
                           Return
                   EndIf
           EndIf
    
      Case RetVal="F6" : ;CAIXA
           Switch
             Case [Status]<>""                : FastMsg("Opera‡Æo nÆo permitida, j  "+[Status])                  Loop
             Case [Tipo de Movimento]="TRA"   : FastMsg("Opera‡Æo nÆo permitida, Requisi‡„o!")                   Loop
             Case [Tipo de Movimento]="AVA"   : FastMsg("Opera‡Æo nÆo permitida, Avaria!")                       Loop
             Case [Tipo de Movimento]="DEV"   : FastMsg("Opera‡Æo nÆo permitida, Devolu‡„o!")                    Loop
             Case [Tipo de Movimento]="NOT"   : FastMsg("Opera‡Æo nÆo permitida, Notifica‡„o!")                  Loop
             Case [Tipo de Movimento]="ETQ"   : FastMsg("Opera‡Æo nÆo permitida, Etiqueta!")                     Loop
             Case [Tipo de Movimento]="PROC"  : FastMsg("Opera‡Æo nÆo permitida, registro do item sem estoque!") Loop
           EndSwitch
              
           MSG = "Deseja solicitar a caixa ?"
           ConfGeral(MSG)
           If Ok="S"
              Then If Checa_Supervisor()
                      Then CampoAnt=Field()
                           [Status]="SOLICITADO"
                           Controle_Dia_Rqtrf("TRANSFERENCIA")
                           CHAVEC=9
                           Return
                   EndIf
           EndIf              
            
      Case RetVal="F7" : ; DEVOLUCAO        
           Switch
             Case [Status]<>""               : FastMsg("Opera‡Æo nÆo permitida, j  "+[Status])                  Loop

             Case [Tipo de Movimento]="AVA"  : FastMsg("Opera‡Æo nÆo permitida, Avaria!")                       Loop
             Case [Tipo de Movimento]="NOT"  : FastMsg("Opera‡Æo nÆo permitida, Notifica‡„o!")                  Loop
             Case [Tipo de Movimento]="CX"   : FastMsg("Opera‡Æo nÆo permitida, Caixa!")                        Loop
             Case [Tipo de Movimento]="TRA"  : FastMsg("Opera‡Æo nÆo permitida, Transferˆncia!")                Loop
             Case [Tipo de Movimento]="PROC" : FastMsg("Opera‡Æo nÆo permitida, registro do item sem estoque!") Loop
             Case [Tipo de Movimento]="ETQ"  : FastMsg("Opera‡Æo nÆo permitida, Etiqueta!")                     Loop
             OtherWise                       : If Not Devolucao() 
                                                  Then Loop 
                                                  Else QuitLoop 
                                               EndIf
           EndSwitch
           
      Case RetVal="F9" : ;TRANSFERIR
           Switch
             Case [Status]<>""               : FastMsg("Opera‡Æo nÆo permitida, j  "+[Status])                  Loop
             Case [Tipo de Movimento]="DEV"  : FastMsg("Opera‡Æo nÆo permitida, Devolu‡„o!")                    Loop
             Case [Tipo de Movimento]="NOT"  : FastMsg("Opera‡Æo nÆo permitida, Notifica‡„o!")                  Loop
             Case [Tipo de Movimento]="CX"   : FastMsg("Opera‡Æo nÆo permitida, Caixa!")                        Loop
             Case [Tipo de Movimento]="PROC" : FastMsg("Opera‡Æo nÆo permitida, registro do item sem estoque!") Loop
             Case [Tipo de Movimento]="ETQ"  : FastMsg("Opera‡Æo nÆo permitida, Etiqueta!")                     Loop
             Case Not UTILIZA_CODIGO_BARRA And
                  ([QuantidadeTrf]=0 Or 
                   [QuantidadeTrf]=BlankNum())
                                          :  
               Mensagem("N„o h  quantidade a ser transferida para a empresa "+[Codigo da EmpresaTrf]) Loop
             OtherWise                    : If Not Transferir_Quantidade() 
                                               Then Moveto [Flag]
                                                    Loop 
                                            EndIf
           EndSwitch
           CHAVEC=9
           Return

      Case RetVal="PGDN":
           Switch
             Case [Tipo de Movimento]="NOT"    Or
                  [Tipo de Movimento]="CX"     Or
                  [Tipo de Movimento]="DEV"    Or
                  [Tipo de Movimento]="PROC"   Or
                  [Tipo de Movimento]="ETQ"    Or           
                  [Status]<>""                  : CHAVEC=9
                                                  QuitLoop
                                                
             Case Not UTILIZA_CODIGO_BARRA And                      
                  ([QuantidadeTrf]=0        Or  
                   [QuantidadeTrf]=BlankNum()):
                   
               Mensagem("N„o h  quantidade a ser transferida para a empresa "+[Codigo da EmpresaTrf]) Loop
             
             Otherwise                        : If Not Transferir_Quantidade() 
                                                   Then Moveto [Flag]
                                                        Loop
                                                EndIf
                
           EndSwitch
           CHAVEC=9
           Return

      Case Retval="ESC":
           Switch
           Case Field()="QuantidadeTrf": 
                If QuerDesfazer("")
                   Then undo
                        CHAVEC=9
                        QuitLoop
                EndIf
           Case Field()="Flag" : []=""
                                 Switch
                                   Case [Tipo de Movimento]= "NOT"  Or
                                        [Tipo de Movimento]= "CX"   Or
                                        [Tipo de Movimento]= "DEV"  Or
                                        [Tipo de Movimento]= "PROC" Or
                                        [Tipo de Movimento]= "ETQ"  Or
                                        [Status]<>""                 : CHAVEC=9
                                                                       QuitLoop
                                   Otherwise                         : If UTILIZA_CODIGO_BARRA
                                                                          Then If QuerDesfazer("")
                                                                                  Then Undo
                                                                                       CHAVEC=9
                                                                                       QuitLoop
                                                                               EndIf
                                                                          Else Moveto [QuantidadeTrf]
                                                                       EndIF   
                                 EndSwitch   
           OtherWise:
                Left
           EndSwitch

      Case Retval="ENTER": 
           If IsBlank([])
              Then If Field()="QuantidadeTrf" And Not UTILIZA_CODIGO_BARRA     
                      Then Loop
                   EndIf
           EndIf

           Switch
             Case Field()="QuantidadeTrf" :  
                  If []>0              
                     Then Moveto [Flag] 
                  EndIf
            
             Case Field()="Flag"  : []=""
                                    Switch
                                      Case [Status]="" And ([Tipo de Movimento]="AVA" Or [Tipo de Movimento]="TRA") And Not Transferir_Quantidade() : 
                                           Moveto [Flag] 
                                           Loop
                                      Case [Status]="" And [Tipo de Movimento]="DEV" And UTILIZA_CODIGO_BARRA : 
                                           If Not Devolucao()                  
                                              Then Moveto [Flag] 
                                                   Loop
                                              Else QuitLoop
                                           EndIf        
                                    EndSwitch
                                    CHAVEC=9
                                    Return
           EndSwitch
                  
      EndSwitch
EndWhile

EndProc  ;DIGITAC()

;*******************************************************************************
;* Rotina p/ Transferir Dados                                                  *
;*******************************************************************************
Proc Transferir_Quantidade()

If UTILIZA_CODIGO_BARRA
   Then If Not CDBarras()
           Then Return False
        EndIf    
EndIf        
      
If [Status]<>"" Or ([Tipo de Movimento]<>"AVA" And [Tipo de Movimento]<>"TRA")
   Then Return False
EndIf
      
Switch
  Case [Quantidade]  > [QuantidadeTrf] : AUX_MSG = Completa("Quantidade a transferir ‚ MENOR que a quantidade pedida.",65," ")+"//"
  Case [Quantidade]  < [QuantidadeTrf] : AUX_MSG = Completa("Quantidade a transferir ‚ MAIOR que a quantidade pedida.",65," ")+"//"
  OtherWise                            : AUX_MSG = ""
EndSwitch    

COR_MENSAGEM="ALERTA"
MSG = AUX_MSG + "Deseja continuar a transferir esta quantidade para a empresa "+[Codigo da EmpresaTrf]+"?"
ConfGeral(MSG)
If Ok = "S"
  Then Controle_Dia_Rqtrf("TRANSFERENCIA")
       If REQUISICAO("TRANSFERENCIA")
          Then If AUX_MSG<>""
                  Then While True
                         Edita_Memo("Justificativa",08,01,15,76,"Justificativa")
                         If RetVal
                            Then If [Justificativa]=""
                                    Then Mensagem(Completa("Informe uma justificativa para continuar com a transferˆncia  do",64," ")+"//"+
                                                  Completa("produto que est  com a quantidade pedida diferente da quantidade",64," ")+"//"+
                                                  Completa("a ser transferida!",64," "))
                                    Else [Status]="TRANSFERIDO"
                                          FastMsg("Processo TRANSFERIDO!")
                                          QuitLoop
                                 EndIf
                            Else [QuantidadeTrf]=BlankNum()
                                 QuitLoop
                         EndIf
                       EndWhile
                  Else [Status]="TRANSFERIDO"
                       FastMsg("Processo TRANSFERIDO!")
               EndIf   
       EndIf
       Release Vars NUMDOC,CODEMP,DATA,NOMDEST,MSG_REQUISICAO,NUMEROL_ORIGEM,
                    NUMEROL,COD_DESTINO,ACHOU_REQ,COD_EMP,NOME_EMPRESA,CODIGO_ITEM,QTD_ITEM,MES_EST,ANO_EST,
                    WS_TITEM,WS_DITEM,WS_UNI,SEQ_ITEM,SEQ,QTDTOT,TPOP,TPMOV
  Else [QuantidadeTrf]=BlankNum()
        Return False                  
EndIf       

Return True
EndProc ;Transferir_Quantidade()

;*******************************************************************************       
;* Rotina p/ Devolu‡äes                                                        *       
;*******************************************************************************       
Proc Devolucao()
Private AUX_QTD

AUX_QTD = [Quantidade]

If UTILIZA_CODIGO_BARRA
  Then If Not CDBarras()
          Then Return False
       EndIf    
EndIf    
MSG = "Deseja realizar a requisi‡„o de devolu‡„o do item "+[Codigo do Item]+"?"
ConfGeral(MSG)
If Ok="S"
  Then ;---- Devolu‡äes Realizadas pela Consulta -------------------
       If [Tipo de Movimento]="DEV"
          Then Controle_Dia_Rqtrf("DEVOLUCAO")
               If REQUISICAO("DEVOLUCAO_CONSULTA")
                  Then [Status]="DEVOLVIDO"
                       If UTILIZA_CODIGO_BARRA
                          Then [QuantidadeTrf]=AUX_QTD
                       EndIf   
                       CHAVEC=9
                       Return True
               EndIf             
       EndIf
       ;---- Devolu‡äes Realizadas pela Requsi‡Æo de Mercadoria ----
       JUSTIFICATIVA   = [Justificativa]
       [Justificativa] = ""
       CampoAnt=Field()
       While True
         Edita_Memo("Justificativa",08,01,15,76,"Justificativa")
         If RetVal
            Then If [Justificativa]=""
                    Then MSG = "Informe uma justificativa para continuar com o processo de devolu‡„o!"
                         Mensagem(MSG) 
                    Else Controle_Dia_Rqtrf("DEVOLUCAO")
                         If REQUISICAO("DEVOLUCAO")
                            Then [Status]="DEVOLVIDO"
                                  If JUSTIFICATIVA <> ""
                                     Then If [Justificativa] <> ""
                                             Then [Justificativa] = JUSTIFICATIVA + "\n" + [Justificativa]
                                             Else [Justificativa] = JUSTIFICATIVA
                                          EndIf    
                                  EndIf
                                  CHAVEC=9
                                  Return
                             Else QuitLoop
                         EndIf   
                         Release Vars NUMDOC,CODEMP,DATA,NOMDEST,MSG_REQUISICAO,NUMEROL_ORIGEM,NUMEROL,
                                      COD_DESTINO,ACHOU_REQ,COD_EMP,NOME_EMPRESA,CODIGO_ITEM,QTD_ITEM,
                                      MES_EST,ANO_EST,WS_TITEM,WS_DITEM,WS_UNI,SEQ_ITEM,SEQ,QTDTOT,TPOP,TPMOV
                 EndIf
            Else QuitLoop        
         EndIf
       EndWhile
       If JUSTIFICATIVA <> ""
          Then If [Justificativa] <> ""
                  Then [Justificativa] = JUSTIFICATIVA + "\n" + [Justificativa]
                  Else [Justificativa] = JUSTIFICATIVA
               EndIf    
       EndIf
       Moveto Field CampoAnt
  Else Return False     
EndIf      

Return True

EndProc                    

;*******************************************************************************
;* Controle de Dia                                                            *
;*******************************************************************************
Proc Controle_Dia_Rqtrf(PARAM)
Private PARAM

If Not IsAssigned(SYS_CHAPA_USUARIO)    Then SYS_CHAPA_USUARIO=""     EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)     Then SYS_CONTROLE_DIA=""      EndIf
If Not IsAssigned(SYS_CONTROLE_DIA_MOD) Then SYS_CONTROLE_DIA_MOD=""  EndIf

If Isassigned(VSDGUSUARIO) And UTILIZA_CODIGO_BARRA
   Then AUX_CHAPA_USUARIO=VSDGUSUARIO
   Else AUX_CHAPA_USUARIO=SYS_CHAPA_USUARIO
EndIf

If SYS_CONTROLE_DIA_MOD <> ""
   Then Switch
          Case PARAM = "TRANSFERENCIA" :
               [Codigo_UsuarioTrf     ] = AUX_CHAPA_USUARIO
               [Data_Trf              ] = Today()
               [Hora_Trf              ] = Time()
               [Numero_Controle_DiaTrf] = SYS_CONTROLE_DIA_MOD
          Case PARAM = "DEVOLUCAO" :
               [Codigo_Usuario_Devolucao ] = AUX_CHAPA_USUARIO
               [Data_Devolucao           ] = Today()
               [Hora_Devolucao           ] = Time()
               [Numero_Controle_Devolucao] = SYS_CONTROLE_DIA_MOD
        EndSwitch
   Else Switch
          Case PARAM = "TRANSFERENCIA" :        
               [Codigo_UsuarioTrf     ] = AUX_CHAPA_USUARIO
               [Data_Trf              ] = Today()
               [Hora_Trf              ] = Time()
               [Numero_Controle_DiaTrf] = SYS_CONTROLE_DIA
          Case PARAM = "DEVOLUCAO" :
               [Codigo_Usuario_Devolucao ] = AUX_CHAPA_USUARIO
               [Data_Devolucao           ] = Today()
               [Hora_Devolucao           ] = Time()
               [Numero_Controle_Devolucao] = SYS_CONTROLE_DIA
        EndSwitch       
EndIf

EndProc ;Controle_Dia_Rqtrf()   

;*******************************************************************************
;* Rotina p/ Verficar Usuario                                                  *
;*******************************************************************************
Proc Verifica_Usuario(USUARIO,PARAM)
Private EMPRESA,USUARIO,PARAM
       
;---- Em 06.12.2061 foi solicitado p/ bloquear usu rio -------------------------                                
If USUARIO="0010"
   Then MSG="Usu rio 0010 n„o tem permiss„o para realizar a opera‡„o!"
       Return False 
EndIf                                   
                                       
Switch
  Case PARAM="DEV" Or
       PARAM="AVA"  : EMPRESA = [Rqtrf->Codigo da EmpresaTrf]
  OtherWise         : EMPRESA = [Rqtrf->Codigo da Empresa   ]
EndSwitch   
                        
MSG="Usu rio "+VSDGUSUARIO+" n„o cadastrado!"
GetRecord "\\Sistemas\\Cadastro\\Usuarios" USUARIO To REG_USUARIO
If RetVal
   Then VSDGNOMUSUARIO = REG_USUARIO["Nome"]
        If Rtrim(REG_USUARIO["Cod_Empresa"])<>""
           Then EMPRESA_DIFERE_USUARIO=False
                If EMPRESA=REG_USUARIO["Cod_Empresa"]
                   Then EMPRESA_DIFERE_USUARIO=True
                EndIf
                If Not EMPRESA_DIFERE_USUARIO
                   Then MSG="Empresa do usu rio "+REG_USUARIO["Cod_Empresa"]+" difere da empresa "+EMPRESA+"//"+
                            " a ser transferido o estoque!"
                        Return False     
                EndIf
        EndIf
   Else Return False    
EndIf

Release Vars EMPRESA,USUARIO,PARAM
Return True

EndProc ;Verifica_Usuario()

;*******************************************************************************
;* Rotina Dialog Leitura_Codigo_Barras                                         *
;*******************************************************************************
Proc SD_DialogLerCodBarra(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA="// Esc=Retornar "
If Not IsAssigned(PARAM_QTD_CDBAR) Then PARAM_QTD_CDBAR="" EndIf

If Disparo="OPEN"
   Then INICIO_DIALOG=False
   
        if [Numero do Lancamento]=LancamentoDeLista and 
           not isblank(VSDGUSUARIO)                 and 
           not isblank(VSDGSENHA)                    
           then 
                Campo="TG_CODIGO"
           else
                if not isblank(VSDGUSUARIO)
                   then 
                        Campo="TG_SENHA" 
                   else 
                        Campo="TG_USUARIO"
                endif   
        endif

        Dynarray WinArray_CDBarras[]
        Window handle Dialog To WinCDBarras
        Window GetAttributes WinCDBarras To WinArray_CDBarras
        WinArray_CDBarras["HASSHADOW"] = False
        WinArray_CDBarras["HASFRAME" ] = False
        Window SetAttributes WinCDBarras From WinArray_CDBarras

        Release vars WinCDBarras, WinArray_CDBarras 
               
EndIf     

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 27:                                        
          Temp=False
          Switch
             Case Campo="TG_USUARIO"        : CancelDialog
             Case Campo="TG_SENHA"          : Campo="TG_USUARIO"
             Case Campo="TG_CODIGO"         : Campo="TG_USUARIO"   
          EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="TG_USUARIO"       : 
                  VSDGUSUARIO=ControlValue("TG_USUARIO")
                  If Not IsBlank(VSDGUSUARIO)
                     Then VSDGUSUARIO=AlinhM(VSDGUSUARIO,4)
                          If Verifica_Usuario(VSDGUSUARIO,[Rqtrf->Tipo de Movimento])
                             Then Campo="TG_SENHA"
                             Else Mensagem(MSG)
                                  VSDGUSUARIO="" 
                                  VSDGNOMUSUARIO=""
                          EndIf     
                  EndIf       
             Case Campo="TG_SENHA"         :
                  VSDGSENHA=ControlValue("TG_SENHA")
                  VERIFICA_SENHA=True
                  If Not IsAssigned(REG_USUARIO)
                      Then GetRecord "\\Sistemas\\Cadastro\\Usuarios" VSDGUSUARIO To REG_USUARIO
                           If Not RetVal
                              Then FastMsg("Usu rio nÆo cadastrado !")
                                   VERIFICA_SENHA=False
                           EndIf
                  EndIf
                  If VERIFICA_SENHA And Not IsBlank(VSDGSENHA)
                     Then ENCRIPTASENHA(VSDGSENHA)
                          If REG_USUARIO["Senha"]<>SENHAENC
                             Then FastMsg("Senha inv lida !")
                             Else Campo="TG_CODIGO"
                          EndIf
                     Else FastMsg("Informe a senha !")
                  EndIf
             Case Campo="TG_CODIGO"        : 
                  Dados_Item=ControlValue("TG_CODIGO")
								  AcceptDialog
           EndSwitch
   EndSwitch
EndIf
RefreshDialog

Switch
 Case Campo="TG_CODIGO"  : If PARAM_QTD_CDBAR<>"N"
                              Then If [Rqtrf->Tipo de Movimento]="DEV"
                                      Then MSG_CAMPO=" Informe somente o [C¢digo]                                           "
                                      Else MSG_CAMPO=" Informe s¢ [C¢digo] a [Quantidade]=1 ou informe [Quantidade]*[C¢digo]"
                                   EndIF   
                              Else If [Rqtrf->Tipo de Movimento]="DEV"
                                      Then MSG_CAMPO=" Informe somente o [C¢digo]          "
                                      Else MSG_CAMPO=" Informe s¢ [C¢digo] a [Quantidade]=1"
                                   EndIF
                           EndIf
 Case Campo="TG_SENHA"   : MSG_CAMPO="Informe a senha do usu rio"                           
 Case Campo="TG_USUARIO" : MSG_CAMPO="Informe o Usu rio"     
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)

If Campo="TG_CODIGO"
   Then KeyPress "RIGHT"
EndIf   
Return Temp
EndProc

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc Ler_CDBarras(l,c)
Private l,c,Past,Pos

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

While True                  
      INICIO_DIALOG=True
      
      Echo Normal
      Echo Off

      if [Numero do Lancamento]<>LancamentoDeLista
         then
              VSDGSENHA     =""
      endif
      
      Dados_Item=""                   ;StrVal([Quantidade])+"*"
      Dados_QTD =1

      ShowDialog "C¢digo de Barras" Proc "SD_DialogLerCodBarra"
      Trigger "OPEN","ARRIVE"
      Key "ESC","ENTER"
       @ 21,00 Height 04 Width 82
       
        Label  @ 00,00 "Usu rio" for "TG_USUARIO"
        Accept @ 01,01 Width 7 "A4" picture "#*#" Tag "TG_USUARIO" to VSDGUSUARIO
        Accept @ 01,06 Width 33 "A30" picture "#*#" Tag "TG_NOMUSUARIO" to VSDGNOMUSUARIO
        
        Label  @ 00,39 "~S~enha" for "TG_SENHA"
        Accept @ 01,40 Width 9 "A6" picture "@*@" hidden Tag "TG_SENHA" to VSDGSENHA
        
        Label  @ 00,49 "C¢digo de Barras" for "TG_CODIGO"
        Accept @ 01,50 Width 29 "A26" Tag "TG_CODIGO" To Dados_Item
      EndDialog

      Mouse Show
      If Not RetVal
         Then Return False
      EndIf
      
      Switch
        Case IsBlank(VSDGUSUARIO) : Mensagem("Informe o Usu rio!")
                                    Loop
        Case Rtrim(Dados_Item)="" : Mensagem("Informe o C¢digo de Barras ou C¢digo do Item!")
                                    Loop
        Case IsBlank(VSDGSENHA) :   Mensagem("Informe a senha do usu rio "+VSDGUSUARIO+"!")
                                    Loop
      EndSwitch
      
      If Not IsBlank(VSDGSENHA)
         Then GetRecord "\\Sistemas\\Cadastro\\Usuarios" VSDGUSUARIO To REG_USUARIO
              If Not RetVal
                 Then Mensagem("Usu rio/Senha incorreto!")
                      Loop
              EndIf
              ENCRIPTASENHA(VSDGSENHA)
              If REG_USUARIO["Senha"]<>SENHAENC
                 Then MENSAGEM("Senha Inv lida !")
                      Loop
              EndIf
      EndIf
        
      If Not Verifica_Usuario(VSDGUSUARIO,[Rqtrf->Tipo de Movimento])
         Then Mensagem(MSG)
              Loop
      EndIf   

      If Len(Dados_Item)=0
         Then Loop
      EndIf
      
      If [Rqtrf->Tipo de Movimento]="DEV"
         Then If Search("*",Dados_Item) > 0
                 Then Mensagem("Informe apenas o C¢digo de Barras!")
                      Loop
              EndIf
      EndIf       

      Past=SearchFrom("*",Dados_Item,1)

      If Past>0 And Not E_NumeroValido(SubStr(Dados_Item,1,Past-1))
         Then Mensagem("Quantidade invalida !")
              Loop
      EndIf                

      If Past>0
        Then If PARAM_QTD_CDBAR<>"N"
                Then Dados_QTD=NumVal(SubStr(Dados_Item,1,Past-1))
                     Dados_Item=RTrim(SubStr(Dados_Item,Past+1,30))
                Else Mensagem("Fun‡ao [Quantidade]*[C¢digo] nÆo permitida!")
             EndIf
        Else Dados_QTD=[Quantidade]     
      EndIf
      Echo Off
 
      If RetVal="ESC"
         Then Return False
         Else 
              LancamentoDeLista=[Numero do Lancamento]
              Return True                
      EndIf
EndWhile

EndProc ; Ler_CDBarras()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private FRACIONADO,ITEM_FRACIONADO,AUX_QTD,AUX_ITEM,AUX_CAMPO

AUX_QTD    = [Quantidade]
AUX_ITEM   = [Codigo do Item]
AUX_CAMPO  = Field()

While True   
  If Not Ler_CDBarras(10,05)
     Then Return False
  EndIf
  
  ITOK=True 
  If Len(Dados_Item)>0
     Then CODIT=Dados_Item
         While True
          ITOk =True

          Achou_Item=False
          Moveto [Codigo do Item]
          Ativa_Lookup()
          Switch
            Case SYS_CODIGO_CLIENTE="0304" Or SYS_CODIGO_CLIENTE="0294":
                  Moveto [Codigo de Barras]
                  Locate IndexOrder by "cod_barras" CODIT
                  If RetVal
                     Then Achou_Item=True
                  EndIf   
            OtherWise:        
                  If Len(CODIT)<=10
                    Then Moveto [Codigo do Item]
                         Locate ALINHM(CODIT,10)
                    Else Moveto [Codigo de Barras]
                         Locate IndexOrder by "cod_barras" CODIT
                  EndIf        
                  If RetVal
                     Then Achou_Item=True
                  EndIf
          EndSwitch                  
          If Achou_Item
             Then CODIT=[Codigo do Item]
                  KeyPress "ESC"
                  If AUX_ITEM<>CODIT
                     Then [Codigo do Item]=AUX_ITEM
                          Mensagem("Item "+CODIT+" informado difere do item "+AUX_ITEM+"//referente a requisi‡„o de mercadoria!")
                          Moveto Field AUX_CAMPO
                          Return False
                  EndIf
             Else KeyPress "ESC"             
                  If Codigo_Barras2(CODIT,"S")
                     Then CODIT = CODIGO_BARRA2
                          If AUX_ITEM<>CODIT 
                             Then [Codigo do Item]=AUX_ITEM
                                  If CODIT=""
                                     Then Mensagem("Item n„o localizado!")
                                     Else Mensagem("Item "+CODIT+" informado difere do item "+AUX_ITEM+"//referente a requisi‡„o de mercadoria!")
                                  EndIf   
                                  Moveto Field AUX_CAMPO
                                  Return False
                          EndIf     
                     Else Return False
                  EndIf
          EndIf
          If [Rqtrf->Tipo de Movimento]<>"DEV"
             Then [QuantidadeTrf]=Dados_Qtd
             Else Dados_Qtd=AUX_QTD
          EndIf   
          QuitLoop
         EndWhile
  EndIf
  If ITOK Then QuitLoop EndIf
EndWhile

Moveto Field AUX_CAMPO
Return True

EndProc

;*******************************************************************************
;* Atualizacao Requisicao                                                      *
;*******************************************************************************
Proc REQUISICAO(PARAM)
Private PARAM

TIPO_REQUISICAO = PARAM
 
If PARAM = "DEVOLUCAO" Or PARAM = "DEVOLUCAO_CONSULTA"
   Then NUMDOC = AlinhM(StrVal(Day([Rqtrf->Data_Devolucao])),2)+AlinhM(StrVal(Month([Rqtrf->Data_Devolucao])),2)+
                 AlinhM(StrVal(Year([Rqtrf->Data_Devolucao])),4)
   Else NUMDOC = AlinhM(StrVal(Day([Rqtrf->Data_Trf])),2)+AlinhM(StrVal(Month([Rqtrf->Data_Trf])),2)+
                 AlinhM(StrVal(Year([Rqtrf->Data_Trf])),4)
EndIf

If PARAM = "DEVOLUCAO" Or PARAM = "DEVOLUCAO_CONSULTA"
   Then If Not IsBlank([Rqtrf->Lancamento Rq_Rqtrf_Devol])
           Then Mensagem("Requisi‡„o de devolu‡„o j  realizada!")
                Return False
        EndIf
        If [Tipo de Movimento]<>"DEV" And IsBlank([Rqtrf->Lancamento RqCabeca_Rqtrf])
           Then Mensagem("N„o h  uma requisi‡„o neste la‡amento para realizar a devolu‡„o!")
                Return False
        EndIf       
EndIf

;---- Verifica existˆncia da Requisi‡Æo ----------------------------------------
If [Tipo de Movimento]<>"DEV"
   Then NUMEROL_ORIGEM = [Rqtrf->Lancamento RqCabeca_Rqtrf]
   Else NUMEROL_ORIGEM = ""   
EndIf   
If NUMEROL_ORIGEM<>""
   Then GetRecord "\\Sistemas\\Estoque\\RqCabeca" NUMEROL_ORIGEM To REG_RQCABECA
        If Not Retval
           Then MSG_REQUISICAO=Completa("Requisi‡„o de Estoque N. "+NUMEROL_ORIGEM+" n„o localizada !",58," ")+"////"
                If PARAM = "DEVOLUCAO" Or PARAM = "DEVOLUCAO_CONSULTA"
                   Then MSG_REQUISICAO=MSG_REQUISICAO+Completa("Este lan‡amento n„o ocorrer  devolu‡„o!",58," ")+"////"
                   Else MSG_REQUISICAO=MSG_REQUISICAO+Completa("Este lan‡amento n„o ser  corrigido no Estoque !",58," ")+"////"
                EndIf
                MSG_REQUISICAO=MSG_REQUISICAO+Completa("Motivos:",58," ")+"//"
                MSG_REQUISICAO=MSG_REQUISICAO+Completa(" - Fechamento Mensal do Estoque efetuado;",58," ")+"//"
                MSG_REQUISICAO=MSG_REQUISICAO+Completa(" - Empresa da requisi‡„o n„o corresponde;",58," ")+"//"
                MSG_REQUISICAO=MSG_REQUISICAO+Completa(" - Algum erro ocorrido no momento deste Lan‡amento.",58," ")
                Mensagem(MSG_REQUISICAO)
                Return False
        EndIf        
EndIf
      
If PARAM = "DEVOLUCAO"  
   Then Aguarde("Gerando requisi‡„o de devolu‡„o no estoque")
        CODEMP   = [Rqtrf->Codigo da EmpresaTrf] 
        DATA     = [Rqtrf->Data_Devolucao]
        If [Tipo de Movimento]="AVA"
           Then NOMDEST  = "RM - DEVOL AVARIA"
           Else NOMDEST  = "RM - DEVOLUCAO REQ" 
        EndIf   
   Else Aguarde("Gerando requisi‡„o no estoque")   
        CODEMP   = [Rqtrf->Codigo da Empresa]
        If PARAM = "DEVOLUCAO_CONSULTA"
           Then DATA    = [Rqtrf->Data_Devolucao]
                If [Tipo de Movimento]="AVA"
                   Then NOMDEST  = "RM - DEVOL AVARIA"
                   Else NOMDEST  = "RM - DEVOLUCAO REQ"
                EndIf
           Else DATA    = [Rqtrf->Data_Trf]
                If [Tipo de Movimento]="AVA"
                   Then NOMDEST = "RM - AVARIA"
                   Else NOMDEST = "RM - REQUISICAO" 
                EndIf
        EndIf      
EndIf 

Moveto "Rqtrf"
UnLockRecord 
FormKey

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

ACHOU_REQ = False
NUMEROL = ""
Moveto "\\Sistemas\\Estoque\\RQCabeca"
Moveto [Numero do Documento]
Locate NUMDOC
If RetVal
   Then While True
          If [Sistema Gerador       ] = "RM"    And 
             [Codigo da empresa     ] = CODEMP  And
             [Data de Ocorrencia    ] = DATA    And   
             [Descricao Requisitante] = NOMDEST 
             Then ACHOU_REQ = True
                  NUMEROL = [Numero do Lancamento]
                  QuitLoop
          EndIf
          Skip
          If Eot() Then QuitLoop EndIf
          Locate Next NUMDOC
          If Not RetVal
             Then QuitLoop
          EndIf     
        EndWhile
EndIf  
Release Vars CODEMP,DATA
        
Moveto "\\Sistemas\\Estoque\\RQCabeca"
Moveto [Numero do Lancamento]
If NUMEROL = ""
   Then 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("Gerando requisi‡„o no estoque")
                                                                  
If Not ACHOU_REQ        
   Then Moveto "Rqtrf"
        [Lancamento RqCabeca_Rqtrf]="" 
   
        If PARAM = "DEVOLUCAO" 
           Then COD_EMP = [Rqtrf->Codigo da Empresa]
           Else COD_EMP = [Rqtrf->Codigo da EmpresaTrf]
        EndIf 
           
        GetRecord "\\Sistemas\\Cadastro\\Empresas" COD_EMP To REG_EMPTRF
        If RetVal
           Then NOME_EMPRESA = REG_EMPTRF["Nome Fantasia Empresa"]
           Else NOME_EMPRESA = ""
        EndIf   
        
        ;---- Cabe‡a -----------------------------------------------------------
        Moveto "\\Sistemas\\Estoque\\RqCabeca"
        If PARAM = "DEVOLUCAO"  
           Then [Codigo da Empresa ]=[Rqtrf->Codigo da EmpresaTrf]
                [Data de Ocorrencia]=[Rqtrf->Data_Devolucao]
           Else [Codigo da Empresa ]=[Rqtrf->Codigo da Empresa]
                If PARAM = "DEVOLUCAO_CONSULTA"
                   Then [Data de Ocorrencia]=[Rqtrf->Data_Devolucao] 
                   Else [Data de Ocorrencia]=[Rqtrf->Data_Trf]
                EndIf
        EndIf          
        [Tipo de Movimento     ]="S"
        [Descricao do Movimento]="SAIDA"
        [Tipo de Operacao      ]="T"
        [Descricao da Operacao ]="TRANSFERENCIA"
        [Codigo do Documento   ]="REQ"   
        [Numero do Documento   ]=NUMDOC
        [Requisitante          ]=COD_DESTINO
        [Descricao Requisitante]=NOMDEST
        [Numero do Corte       ]=""
        [Sistema Gerador       ]="RM"
        [Lancamento Gerador    ]=""
        [Codigo                ]=COD_EMP
        [Nome Fantasia EmitDest]=NOME_EMPRESA
        Controle_Dia()
        SaveTables
EndIf

;---- Itens --------------------------------------------------------------------
Aguarde("Aguarde, inserindo item na requisi‡ao ")
  
SEQ         = 0
QTDTOT      = 0
MES_EST     = AlinhM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
ANO_EST     = StrVal(Year([RqCabeca->Data de Ocorrencia]))
CODIGO_ITEM = [Rqtrf->Codigo do Item]
If [Rqtrf->Tipo de Movimento]="DEV" And UTILIZA_CODIGO_BARRA
   Then QTD_ITEM    = [Rqtrf->Quantidade   ]
   Else QTD_ITEM    = [Rqtrf->QuantidadeTrf]
EndIf   
SEQ_ITEM    = 0                              ;Posi‡Æo do Item no Lan‡amento se Localizado
QTDTOT      = QTD_ITEM                       ;Totalizador do RqCabe‡a

Moveto "\\Sistemas\\Estoque\\RqItem"
Moveto [Numero do Lancamento]
Locate NUMEROL
If RetVal
   Then While NUMEROL = [Numero do Lancamento]
          If [Codigo do Item] = CODIGO_ITEM
             Then SEQ_ITEM = [Sequencia do Lancamento] 
          EndIf
          QTDTOT = QTDTOT + [Quantidade] 
          SEQ    = [Sequencia do Lancamento]
          Skip
          If Eot() Then QuitLoop EndIf
        EndWhile 
EndIf       

GetRecord "\\Sistemas\\Estoque\\Itens" CODIGO_ITEM To REG_ITEM 
If RetVal
   Then WS_TITEM = REG_ITEM["Tipo do Item"]
        WS_DITEM = REG_ITEM["Descricao do Item"]
        WS_UNI   = REG_ITEM["Unidade Interna"]
   Else WS_TITEM = ""
        WS_DITEM = ""
        WS_UNI   = ""
EndIf

If SEQ_ITEM <> 0
   Then ;---- Apenas p/ RQTRF que pode ter v rios itens lan‡ados no mesmo dia -----
        Moveto "\\Sistemas\\Estoque\\RqItem"
        Moveto [Numero do Lancamento]
        Locate NUMEROL,SEQ_ITEM
        If Not Retval
           Then Mensagem("Item da sequencia "+StrVal(SEQ_ITEM)+" n„o localizado na requisi‡„o "+NUMEROL+"!")
                Moveto "Rqtrf"
                FormKey
                Return False                
           Else [Quantidade] = [Quantidade] + QTD_ITEM     
        EndIf   
   Else Moveto "\\Sistemas\\Estoque\\RqItem"
        SEQ      = SEQ + 1
        SEQ_ITEM = SEQ
        End Down
        [Numero do Lancamento       ]=NUMEROL
        [Sequencia do Lancamento    ]=SEQ
        If PARAM = "DEVOLUCAO"
           Then [Codigo da Empresa  ]=[Rqtrf->Codigo da Empresa]
           Else [Codigo da Empresa  ]=[Rqtrf->Codigo da EmpresaTrf]
        EndIf
        [Tipo do Item               ]=WS_TITEM
        [Codigo do Item             ]=CODIGO_ITEM
        [Descricao do Item          ]=WS_DITEM
        [Unidade Interna            ]=WS_UNI
        [Quantidade                 ]=QTD_ITEM
        SaveTables
EndIf      
UnLockrecord

Moveto "\\Sistemas\\Estoque\\RqItem"
Moveto [Numero do Lancamento]
Locate NUMEROL, SEQ_ITEM
ESTOQUE()

Moveto "\\Sistemas\\Estoque\\RqItem"
[Custo Unitario             ]=CUSTOMEDIO
[Custo Total                ]=NDecimal([Quantidade]*CUSTOMEDIO,2)
UnLockrecord
    
;---- Complementos da Cabe‡a ---------------------------------------------------
Moveto "\\Sistemas\\Estoque\\RqCabeca"
Moveto [Numero do Lancamento]
Locate NUMEROL
If RetVal 
   Then [Quantidade Total      ]=QTDTOT
        UnLockRecord
EndIf
Release Vars REG_ITEM

Moveto "Rqtrf"
If PARAM = "DEVOLUCAO" Or PARAM = "DEVOLUCAO_CONSULTA"
   Then [Lancamento Rq_Rqtrf_Devol]=NUMEROL 
   Else [Lancamento RQCabeca_Rqtrf]=NUMEROL
EndIf        
SaveTables                  
UnLockRecord
FormKey

LimpAguarde()

Return True

EndProc ;REQUISICAO()

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

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

MSG="N„o 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 n„o foi executada a transferˆncia de saldos do mˆs 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 "\\Sistemas\\Estoque\\EstqPrm"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf                 
  QuitLoop
EndWhile

Moveto "\\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  ;

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

If WS_TITEM="C" Or WS_TITEM="D" Or WS_TITEM="G" Or
   WS_TITEM="H" Or WS_TITEM="I"
   Then Return
EndIf

TPOP  = "T"
TPMOV = "S"

If TIPO_REQUISICAO = "DEVOLUCAO"
   Then COD_EMPRESA = [Rqtrf->Codigo da EmpresaTrf]
        DATA = [Rqtrf->Data_Devolucao]
        MES  = AlinhM(StrVal(Month([Rqtrf->Data_Devolucao])),2)
        ANO  = StrVal(Year([Rqtrf->Data_Devolucao]))
   Else COD_EMPRESA = [Rqtrf->Codigo da Empresa]
        If PARAM = "DEVOLUCAO_CONSULTA"
           Then DATA = [Rqtrf->Data_Devolucao]
                MES  = AlinhM(StrVal(Month([Rqtrf->Data_Devolucao])),2)
                ANO  = StrVal(Year([Rqtrf->Data_Devolucao]))
           Else DATA = [Rqtrf->Data_Trf]
                MES  = AlinhM(StrVal(Month([Rqtrf->Data_Trf])),2)
                ANO  = StrVal(Year([Rqtrf->Data_Trf]))
        EndIf
EndIf

For wi From 1 To 2
  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Moveto [Codigo da Empresa]
  Locate COD_EMPRESA, CODIGO_ITEM, ANO, MES
  If Not RetVal
     Then CRIA_FICHA(COD_EMPRESA,CODIGO_ITEM,False)
  EndIf   
           
  While True
    If IsLockRecord()   
       Then Loop
    EndIf                     
  
    CUSTOMEDIO=[Custo Total Atual]/[Saldo Atual]
    If CUSTOMEDIO=0 Or IsBlank(CUSTOMEDIO)
       Then CUSTOMEDIO=[Ultimo Custo Atual]
    EndIf
  
    If TPMOV="E"
       Then [Saldo Atual      ]=NDecimal([Saldo Atual]+QTD_ITEM,3)
            [Custo Total Atual]=NDecimal([Custo Total Atual]+(QTD_ITEM*CUSTOMEDIO),2)
       Else [Saldo Atual      ]=NDecimal([Saldo Atual]-QTD_ITEM,3)
            [Custo Total Atual]=NDecimal([Custo Total Atual]-(QTD_ITEM*CUSTOMEDIO),2)
    EndIf
    UnLockRecord
    QuitLoop
  EndWhile

  If TPMOV="S"
     Then While True
            Moveto "\\Sistemas\\Estoque\\EstqPrm"
            Moveto [Codigo da Empresa]
            Locate COD_EMPRESA, CODIGO_ITEM
            If Not RetVal
               Then End Down
                    [Codigo da Empresa   ]=COD_EMPRESA
                    [Codigo do Item      ]=CODIGO_ITEM
                    If IsLockRecord()
                       Then Del
                       Else UnLockrecord
                    EndIf
                    Loop
            EndIf
            If IsLockRecord()
               Then Loop
            EndIf
            If DATA > [Data da Ultima Saida]
               Then [Data da Ultima Saida]=DATA
            EndIf
            UnLockRecord
            QuitLoop
          EndWhile       
  EndIf
  
  If TPOP = "T"
     Then If TIPO_REQUISICAO = "DEVOLUCAO"
             Then COD_EMPRESA = [Rqtrf->Codigo da Empresa]
             Else COD_EMPRESA = [Rqtrf->Codigo da EmpresaTrf]
          EndIf   
          If TPMOV="E"
             Then TPMOV="S"
             Else TPMOV="E"
          EndIf
     Else QuitLoop
  EndIf
EndFor

EndProc ;ESTOQUE()

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

Moveto "Rqtrf"
Del   

EndProc  ;EXCLUSAO_C()

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

While FACA_DIGITAC
  MSGCAMPO = ""
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
EndWhile

If RecordStatus("Locked") Then UnLockRecord EndIf
If OPCAO_FORM_ESCOLHA="F" Or OPCAO_FORM_ESCOLHA="1" Then PickForm OPCAO_FORM_ESCOLHA EndIf

EndProc ;Controla_EdicaoC()

;*******************************************************************************
;* Rotina p/ Abrir Tabelas                                                     *
;*******************************************************************************
Proc Abre_Tabelas()

OPCAO_FORM = OPCAO_FORM_ESCOLHA

View NOWINDOW "\\Sistemas\\Estoque\\Requisit"
View NOWINDOW "\\Sistemas\\Estoque\\RqCabeca"
View NOWINDOW "\\Sistemas\\Estoque\\Rqitem"
View NOWINDOW "\\Sistemas\\Estoque\\EstqPrm"
View NOWINDOW "\\Sistemas\\Estoque\\SdEstq"

CoEdit "Rqtrf"
PickForm OPCAO_FORM_ESCOLHA

EndProc ;Abre_Tabelas()

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

UTILIZA_CODIGO_BARRA = True

Switch

  Case Upper(Substr(Directory(),1,1))="N" : ROTINA_LIBERADA = True
  Case SYS_CODIGO_CLIENTE="0294"          : ROTINA_LIBERADA = True
  
  OtherWise                               : ROTINA_LIBERADA = False
EndSwitch  

If Not ROTINA_LIBERADA
   Then Mensagem("Rotina indispon¡vel !//Verificar com o Suporte VISE !")
        Return
EndIf          

LeiaINI(PrivDir()+"RQTRF.INI","OPCAO_FORM_ESCOLHA.S.null")
If Not IsAssigned(OPCAO_FORM_ESCOLHA) Or OPCAO_FORM_ESCOLHA="" Or OPCAO_FORM_ESCOLHA="2"
   Then OPCAO_FORM_ESCOLHA="F"
EndIf   

LancamentoDeLista=BlankNum()
VSDGUSUARIO      =""
VSDGSENHA        =""

Abre_Tabelas()

While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then OPCAO_FORM_ESCOLHA = "2"
          PickForm "2"
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll

Release Vars All
Release Procs All
