;** Lpreserq *******************************************************************
;*  Digitacao de Requisi‡Æo de Produto - Lista de Presentes                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)                        
;Desenvolvido em : 26/04/2019 por Bruno Carvalho             
;Ultima Alteracao: 07/05/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado C¢digo de Barras COD128 personalizado para identificar o numero do lan‡amento do comprovante de entrega                               
;Ultima Alteracao: 07/08/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado COMPROVANTE_ENTREGA_PARA_TELEFONE na proc Gera_Comprovante()                                                 
;Ultima Alteracao: 13/09/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ C¢digo de Barra Secund rio, vari vel ITEM_LISTA sem valor na proc Verifica_Item_Lista()
;Ultima Alteracao: 30/09/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Data] no FORM e impressÆo da requisi‡Æo do item da lista de presente  
;Ultima Alteracao: 16/10/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ nÆo deixar finalizar com PGDN lan‡amentos novos   
;Ultima Alteracao: 07/02/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ NFCE
                                                                       
;*******************************************************************************
;* Rotina para Controlar Chave                                                 *
;*******************************************************************************
Proc CHAVEC()

FACA_DIGITAC  = True
INICIO_PAGINA = True                    

While True
  Moveto "Lpreserq"
  End
  Moveto [Numero do Lancamento]
  LANCTO=[Numero do Lancamento]
     
  If OPCAO_FORM="F"
     Then Down
     Else CtrlPgDn
  EndIf
  Moveto [Numero do Lancamento]

  SetaCorRegistro("Editar")
  While True
  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao() 

  If RetVal=-33
     Then If Not PARAM_LPRESRQ_VENDEDOR
             Then Echo Normal
                  Echo Off
                  ShowPopup " Fun‡”es " CENTERED
                   "[F7]  ~E~ntrega             " : "Entrega                                " : "F7",
                   "[F8]  ~D~evolu‡Æo           " : "Devolu‡Æo                              " : "F8",
                   "[F9]  ~C~onferˆncia         " : "Conferˆncia                            " : "F9",
                   Separator,
                   "~C~ancelar                  " : "Cancelar a Opera‡„o                    " : "CANCELAR"
                  EndMenu
                  To MenuVar
                  Echo Off
          
                  If MenuVar="CANCELAR" or MenuVar="Esc"
                     Then Loop
                  EndIf
                  
                  If MenuVar=""
                     Then QuitLoop
                     Else RetVal=MenuVar   
                  EndIf
             Else FastMsg("NÆo h  fun‡Æo habilitada para este usu rio!")     
          EndIf
  EndIf
  
  If PARAM_LPRESRQ_VENDEDOR And (Retval="F7" Or Retval="F8" Or Retval="F9") 
     Then QuitLoop
  EndIf
  
  Switch
        Case RetVal=-94  : MsgTeclasPadrao()
        Case Retval="F7" :
             Del
             PARAM_FUNCAO = "ENTREGA"
             While True
               SAIR_ROTINA=False
               CDBarras()
               If SAIR_ROTINA
                  Then QuitLoop
               EndIf
             EndWhile
             Release Vars PARAM_FUNCAO
             CHAVEC=5
             QuitLoop
        Case Retval="F8" :
             Del
             PARAM_FUNCAO = "DEVOLUCAO"
             While True
               SAIR_ROTINA=False
               CDBarras()
               If SAIR_ROTINA
                  Then QuitLoop
               EndIf
             EndWhile      
             Release Vars PARAM_FUNCAO
             CHAVEC=5
             QuitLoop
        Case Retval="F9" : 
             Del
             PARAM_FUNCAO = "COMPRA"
             While True
               SAIR_ROTINA=False
               CDBarras()
               If SAIR_ROTINA
                  Then QuitLoop
               EndIf
             EndWhile    
             Release Vars PARAM_FUNCAO  
             CHAVEC=5
             QuitLoop     
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" :
             Del
             While True
               FACA_DIGITAC  = True
               INICIO_PAGINA = True

               If OPCAO_FORM="F"
                  Then PAGINA("Lpreserq","MR")
                  Else PAGINA("Lpreserq","MT")
               EndIf
               LANCTO=[Numero do Lancamento]
               Switch
                 Case EDITAR="S": 
                      PickForm "1"
                      Echo Normal
                      Echo Off
                      If Checa_Controle([Numero_Controle_Dia])
                         Then CHAVEC=0
                              Controla_EdicaoC()
                         Else UnLockRecord
                      EndIf
                 Case EXCLUIR="S":
                      PickForm "1"
                      Echo Normal
                      Echo Off
                      If [Status]<>""
                         Then Mensagem("N„o ‚ poss¡vel excluir a solicita‡„o com o status de "+[Status]+"!")
                         Else If Not PARAM_LPRESRQ_VENDEDOR And 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()
                                                                [Status]="CANCELADO"
                                                                QuitLoop
                                                        EndIf
                                                   Else QuitLoop
                                                EndIf
                                             EndWhile   
                                      EndIf
                                 Else UnLockRecord
                              EndIf
                      EndIf
                 OtherWise: QuitLoop
               EndSwitch
               PickForm OPCAO_FORM
               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
                Else CHAVEC=1 
                     Controle_Dia()
             EndIf
             If Checa_Controle([Numero_Controle_Dia])
                Then Return
             EndIf
             If CHAVEC=1
                Then Del
             EndIf
             If OPCAO_FORM="F"
                Then PickForm OPCAO_FORM
             EndIf
             QuitLoop
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)  
                               
;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()

Moveto "LPreseDi" SetaCorRegistro("Invisivel")
Moveto "Lpreserq"

If [Status]<>""
   then Switch
          Case [Status]="F" : STATUS = "FINALIZADO" 
          OtherWise         : STATUS = [Status]
        EndSwitch   
        FastMSg("Solicita‡Æo [ "+STATUS+" ] !")
EndIf

If CHAVEC=0
   Then VERIFICA_ITEM_FORA_LISTA = False
        Moveto [Flag] 
   Else VERIFICA_ITEM_FORA_LISTA = True
        ;Moveto [Tipo de Movimento]
        [Tipo de Movimento       ] = "COMP"
        [Descricao Tipo Movimento] = "COMPRA"
        Moveto [Lancamento_Lista] 
EndIf
   
While True
  If Search("[** Gerado",[Justificativa])=0
     Then Prompt " Esc=Retornar  Alt+F=Fun‡äes  "
     Else Prompt " Esc=Retornar  "
  EndIf
  
  Switch
    Case Field()="Tipo de Movimento"       : MSGCAMPO = "Tipo de Movimento: (COMP)Compra  (DEV)Devolu‡Æo" 
    Case Field()="Tipo do Documento"       : MSGCAMPO="Tipo do Documento: CUP/NFE/ROM/NFCE"
    Case Field()="Numero do Documento"     : MSGCAMPO = "N£mero do Cupom Fiscal"
    Case Field()="Serie do Documento"      : MSGCAMPO = "S‚rie do Cupom Fiscal"
    Case Field()="Numero de Serie Cupom"   : MSGCAMPO = "Numero de Serie do Cupom Fiscal"
    Case Field()="Lancamento_Lista"        : MSGCAMPO = "N£mero do Lan‡amento da Lista de Presentes"
    Case Field()="Entrega_Codigo"          : MSGCAMPO = "C¢digo da pessoa que o item ser  entregue"
    Case Field()="Entrega_Nome Fantasia"   : MSGCAMPO = "Nome Fantasia da pessoa que o item ser  entregue"
    Case Field()="Codigo do Representante" : MSGCAMPO = "C¢digo do Vendedor"
    Case Field()="Data"                    : MSGCAMPO = "Data do Lan‡amento"
    Case Field()="Codigo"                  : MSGCAMPO = "C¢digo do Comprador"
    Case Field()="Razao Social"            : MSGCAMPO = "Razao Social do Comprador"
    Case Field()="Telefone"                : MSGCAMPO = "Telefone do Comprador"
    Case Field()="Endereco_Eletronico"     : MSGCAMPO = "E-Mail do Comprador"        
    Case Field()="Entrega_Codigo"          : MSGCAMPO = "C¢digo do Noivo/Noiva"
    Case Field()="Entrega_Nome Fantasia"   : MSGCAMPO = "Nome Fantasia do Noivo/Noiva"
    Case Field()="Codigo do Item"          : MSGCAMPO = "C¢digo do Item"
    Case Field()="Codigo de Barras"        : MSGCAMPO = "C¢digo de Barras"
    Case Field()="Flag"                    : MSGCAMPO = "ENTER=Prosseguir"
    OtherWise                              : MSGCAMPO = Field() 
  EndSwitch  
  
  If Field()="Codigo da Empresa"       Or
     Field()="Codigo do Item"          Or
     Field()="Lancamento_Lista"        Or
     Field()="Codigo"                  Or
     Field()="Entrega_Codigo"          Or
     Field()="Codigo do Representante" 
     Then MSGCAMPO = MSGCAMPO+", [F1]Consultar tabela"
  EndIf
                     
  Wait Field
   Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F3","F4","F5","F6","F7","F9",-33
   
   If RetVal=-33  
      Then If Search("[** Gerado",[Justificativa])=0
              Then If Not PARAM_LPRESRQ_VENDEDOR
                      Then Echo Normal
                           Echo Off
                           ShowPopup " Fun‡”es " CENTERED
                            "[F5]  ~O~bserva‡Æo          " : "Observa‡Æo                             " : "F5",
                            "[F6]  ~I~mprimir            " : "ImpressÆo da Lista de Itens            " : "F6",
                            "[F7]  ~E~ntrega             " : "Entrega                                " : "F7",
                            Separator,
                            "~C~ancelar                  " : "Cancelar a Opera‡„o                    " : "CANCELAR"
                           EndMenu
                           To MenuVar
                           Echo Off
                      Else Echo Normal
                           Echo Off
                           ShowPopup " Fun‡”es " CENTERED
                            "[F5]  ~O~bserva‡Æo          " : "Observa‡Æo                             " : "F5",
                            "[F6]  ~I~mprimir            " : "ImpressÆo da Lista de Itens            " : "F6",
                            Separator,
                            "~C~ancelar                  " : "Cancelar a Opera‡„o                    " : "CANCELAR"
                           EndMenu
                           To MenuVar
                           Echo Off      
                   EndIf
          
                   If MenuVar="CANCELAR" or MenuVar="Esc"
                      Then Loop
                   EndIf   
                   
                   If MenuVar=""
                      Then QuitLoop
                      Else RetVal=MenuVar
                   EndIf
           EndIf
      Else If PARAM_LPRESRQ_VENDEDOR And (RetVal="F5" Or RetVal="F6" Or RetVal="F7")
              Then QuitLoop
           EndIf    
   EndIf

   Switch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()     
      Case RetVal="F1":
           If Field()="Codigo da Empresa"       Or
              Field()="Codigo do Item"          Or
              Field()="Lancamento_Lista"        Or
              Field()="Codigo"                  Or
              Field()="Entrega_Codigo"          Or
              Field()="Codigo do Representante" 
              Then CONSULTAF1()
           EndIf
      Case Retval="F5" : 
           Switch
             Case Not PARAM_LPRESRQ_VENDEDOR : OBSERVACAO()
             Case PARAM_LPRESRQ_VENDEDOR     : If CHAVEC=1
                                                  Then OBSERVACAO()
                                                  Else FastMsg("NÆo ‚ poss¡vel editar a observa‡Æo de um lan‡amento existente!")
                                               EndIf    
           EndSwitch
           QuitLoop           
      Case RetVal="F6":           
           If Search("[** Gerado",[Justificativa])=0 And Valida_Campo() And ([Status]="" Or [Status]="COMPRA" Or Search("CP",[Status])>0)  
              Then ConfGeral("Deseja gerar o comprovante de entrega ?")
                   If OK="S"
                      Then DispositivoI("FAT")
                           If OK<>""
                              Then GERA_COMPROVANTE = False
                                   If [Status] <> "COMPRA"
                                      Then Atualiza_Lista("Compra")                                   
                                      Else GERA_COMPROVANTE = True
                                   EndIf
                                   If GERA_COMPROVANTE
                                      Then Gera_Comprovante()
                                           If [Status]="" Then [Status]="COMPRA" EndIf
                                           CHAVEC=9
                                           Return   
                                      Else Mensagem("NÆo foi poss¡vel gerar o comprovante de entrega!")     
                                   EndIf
                           EndIf   
                   EndIf       
              Else Switch
                     Case Search("[** Gerado",[Justificativa])>0  :  
                          FastMsg("Opera‡Æo nÆo permitida, impressÆo a partir do lan‡amento original!")
                     Case [Status]<>"" And [Status]<>"COMPRA"     : 
                          FastMsg("Opera‡Æo nÆo permitida, Status "+[Status])
                   EndSwitch         
           EndIf
           QuitLoop
      Case Retval="F7" : 
           If Not PARAM_LPRESRQ_VENDEDOR
              Then If Search("ENT",[Status])>0
                      Then FastMsg("O item deste lan‡amento j  foi ENTREGUE!")
                      Else If [Status]="" Or [Status]="COMPRA"  Or [Status]="CONFERIDO" Or Search("CP",[Status])>0 Or Search("CF",[Status])>0
                              Then If Search("[** Gerado",[Justificativa])>0
                                      Then Mensagem("Este lan‡amento nÆo pode ser ENTREGUE//Verifique o lan‡amento original!")
                                      Else PARAM_FUNCAO = "ENTREGA"
                                           Atualiza_Lista("Entrega")
                                           CHAVEC=9
                                           Return
                                   EndIf
                           EndIF      
                   EndIf  
           EndIf
      Case RetVal="PGDN": 
           If CHAVEC=0
              Then CHAVEC=9
                   Return
           EndIf                           
      Case Retval="ESC":
           Switch
             Case Field()="Lancamento_Lista" Or (Field()="Codigo da Empresa" And [Lancamento_Lista]="") Or (Field()="Flag" And CHAVEC=0) : 
                  If QuerDesfazer("")
                     Then If CHAVEC=1
                             Then Del 
                             Else Undo
                          EndIf   
                          CHAVEC=9
                          QuitLoop
                  EndIf
            ;Case Field()="Lancamento_Lista"                    : Moveto [Tipo de Movimento      ]
             Case Field()="Codigo da Empresa"                   : Moveto [Lancamento_Lista       ]
             Case Field()="Tipo do Documento"                   : Moveto [Codigo da Empresa      ]  
             Case Field()="Numero do Documento"                 : Moveto [Tipo do Documento      ]
             Case Field()="Serie do Documento"                  : Moveto [Numero do Documento    ]
             Case Field()="Numero de Serie Cupom"               : Moveto [Numero do Documento    ]
             Case Field()="Entrega_Codigo"                      : Moveto [Numero do Documento    ] 
             Case Field()="Entrega_Nome Fantasia"               : Moveto [Entrega_Codigo         ]
             Case Field()="Codigo do Representante"             : If [Lancamento_Lista]=""
                                                                     Then Moveto [Entrega_Nome Fantasia]
                                                                     Else Moveto [Numero do Documento  ]
                                                                  EndIf    
             Case Field()="Data"                                : Moveto [Codigo do Representante]
             Case Field()="Codigo"                              : Moveto [Data                   ]
             Case Field()="Razao Social"                      Or
                  Field()="Telefone"                            : Moveto [Codigo                 ]
             Case Field()="Endereco_Eletronico"                 : Moveto [Telefone               ]
             Case Field()="Codigo do Item"                      : Moveto [Endereco_Eletronico    ]
             Case Field()="Codigo de Barras"                    : Moveto [Codigo do Item         ]
             Case Field()="Flag"                                : Moveto [Codigo de Barras       ]
             OtherWise                                          : Left
           EndSwitch

      Case Retval="ENTER": 
           Switch
             Case Field()="Tipo de Movimento" :
                  Switch
                    Case [Tipo de Movimento] = "DEV" : [Descricao Tipo Movimento] = "DEVOLUCAO"
                    OtherWise                        : [Tipo de Movimento          ] = "COMP"
                                                       [Descricao Tipo Movimento] = "COMPRA" 
                  EndSwitch
                  Moveto [Lancamento_Lista]
             Case Field()="Lancamento_Lista"  :
                  If Not IsBlank([])
                     Then GetRecord "LPresenC" [Lancamento_Lista] To REG_LPRESENC
                          If Not RetVal
                             Then [Entrega_Codigo       ] = "" 
                                  [Entrega_Nome Fantasia] = ""
                                  FastMsg("Lista de Presente "+[Lancamento_Lista]+" nÆo localizado!")
                             Else If REG_LPRESENC["Status"]="FINALIZADO" Or REG_LPRESENC["Status"]="CANCELADO"
                                     Then Mensagem("Lan‡amento "+REG_LPRESENC["Numero do Lancamento"]+" da Lista de Casamento/Ch  de Panela/Casa Nova//encontra "+
                                                   REG_LPRESENC["Status"]+"!")
                                          Moveto [Lancamento_Lista]         
                                     Else [Entrega_Codigo       ] = REG_LPRESENC["Codigo"]
                                          [Entrega_Nome Fantasia] = REG_LPRESENC["Nome Fantasia EmitDest"]
                                          [Codigo da Empresa    ] = "0001"
                                          Moveto [Tipo do Documento]
                                  EndIf        
                          EndIf   
                     Else Moveto [Codigo da Empresa]        
                  EndIf
             Case Field()="Codigo da Empresa"    :
                  If Not IsBlank([])
                     Then Moveto [Tipo do Documento]
                  EndIf
             Case Field()="Tipo do Documento" : 
                  If IsBlank([]) 
                     Then [Tipo do Documento]="NFCE"
                  EndIf
                  If IsBlank([]) Then Loop EndIf
                  If Upper(SubStr([Tipo do Documento],1,3))<>"CUP" And  
                     Upper(SubStr([Tipo do Documento],1,3))<>"NFE" And  
                     Upper(SubStr([Tipo do Documento],1,3))<>"ROM" And  
                     Upper(SubStr([Tipo do Documento],1,4))<>"NFCE"
                     Then Mensagem("Tipo de documento informado ‚ diferente de CUP/NFE/ROM/NFCE!")
                          Loop    
                  EndIf   
                  Moveto [Numero do Documento]   
             Case Field()="Numero do Documento"  : 
                  If Not IsBlank([])
                     Then If Len([])<6 Then [] = AlinhM([],6) EndIf
                          If Search("CUP",[Tipo do Documento])>0 Or Search("NFCE",[Tipo do Documento])>0  
                             Then Moveto [Numero de Serie Cupom]    
                             Else [Numero de Serie Cupom]=""
                                  If Search("ROM",[Tipo do Documento])>0
                                     Then GetRecord "P_Fatura" [Codigo da Empresa] To REG_PFATURA
                                          If RetVal
                                             Then [Serie do Documento]=REG_PFATURA["Rom_Serie do Documento"]
                                                  If Not Localiza_Nota()
                                                     Then Moveto [Serie do Documento]
                                                          Loop 
                                                     Else If SubStr([Serie do Documento],1,1)<>"X"
                                                             Then [Numero de Serie Cupom] = ""
                                                          EndIf   
                                                          If [Lancamento_Lista]=""
                                                             Then Moveto [Entrega_Codigo                 ]
                                                             Else If [Codigo do Representante]="" 
                                                                     Then Moveto [Codigo do Representante]
                                                                     Else Moveto [Data                   ]
                                                                  EndIf   
                                                          EndIf   
                                                  EndIf 
                                             Else Moveto [Serie do Documento]       
                                          EndIf
                                     Else Moveto [Serie do Documento]           
                                  EndIf   
                          EndIf         
                  EndIf
             Case Field()="Serie do Documento"  :     
                  If IsBlank([])
                     Then Moveto [Numero de Serie Cupom]
                     Else If Upper(SubStr([Serie do Documento],1,1))="X" And [Numero de Serie Cupom]="" 
                             Then [Numero de Serie Cupom] = AlinhM(SubStr([Serie do Documento],2,1),3)
                          EndIf
                          If Localiza_Nota() 
                             Then If SubStr([Serie do Documento],1,1)<>"X"Or SubStr([Serie do Documento],1,1)<>"N" 
                                     Then [Numero de Serie Cupom] = ""
                                  EndIf   
                                  If [Lancamento_Lista]=""
                                     Then Moveto [Entrega_Codigo                 ]
                                     Else If [Codigo do Representante]="" 
                                             Then Moveto [Codigo do Representante]
                                             Else Moveto [Data                   ]
                                          EndIf   
                                  EndIf   
                          EndIf
                  EndIf            
             Case Field()="Numero de Serie Cupom"  :
                  If Not IsBlank([])
                     Then If Not IsBlank([])
                             Then If len([])<=3
                                     Then []=AlinhM([],3)
                                  EndIf   
                                  If Localiza_Nota()
                                     Then If [Lancamento_Lista]=""
                                             Then Moveto [Entrega_Codigo         ]
                                             Else Moveto [Codigo do Representante]   
                                          EndIf    
                                  EndIf
                          EndIf
                     Else Moveto [Serie do Documento]      
                  EndIf        
             Case Field()="Entrega_Codigo"  :
                  If IsBlank([]) And [Lancamento_Lista]=""     
                     Then Moveto [Entrega_Nome Fantasia]
                     Else If Upper([Entrega_Nome Fantasia])="DIVERSOS"
                             Then [Entrega_Codigo]=""
                                  Moveto [Entrega_Nome Fantasia]
                             Else GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] TO REG_DESTINAT
                                  If RetVal
                                     Then [Entrega_Nome Fantasia] = REG_DESTINAT["Nome Fantasia EmitDest"]
                                  EndIf
                                  If [Codigo do Representante]="" 
                                     Then Moveto [Codigo do Representante]
                                     Else Moveto [Data                   ]
                                  EndIf
                          EndIf
                  EndIf                               
             Case Field()="Entrega_Nome Fantasia"  :
                  If IsBlank([])
                     Then FastMsg("Informe o nome da pessoa que ser  entregue o produto!") 
                     Else If [Codigo do Representante]="" 
                             Then Moveto [Codigo do Representante]
                             Else Moveto [Data                   ]
                          EndIf 
                  EndIf   
             Case Field()="Codigo do Representante"  :
                  If Not IsBlank([])     
                     Then Moveto [Data]
                  EndIf
             Case Field()="Data"    :
                  If IsBlank([])     
                     Then []=Today()
                  EndIf    
                  Moveto [Codigo]
             Case Field()="Codigo"  :
                  If IsBlank([])     
                     Then Moveto [Razao Social]
                     Else If Upper([Razao Social])="DIVERSOS"
                             Then [Codigo]=""
                                  Moveto [Razao Social]
                             Else GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] TO REG_DESTINAT
                                  If RetVal And IsBlank([Razao Social]) Or IsBlank([Telefone]) 
                                     Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] TO REG_DESTINAT
                                          If RetVal
                                             Then [Razao Social       ] = REG_DESTINAT["Razao Social"       ]
                                                  [Telefone           ] = REG_DESTINAT["Telefone"           ] 
                                                  [Endereco_Eletronico] = REG_DESTINAT["Endereco_Eletronico"]
                                          EndIf
                                  EndIf
                                  Moveto [Telefone]
                          EndIf
                  EndIf     
             Case Field()="Razao Social"  :
                  If IsBlank([])
                     Then FastMsg("Informe o nome do comprador!") 
                     Else Moveto [Telefone] 
                  EndIf   
             Case Field()="Telefone"  :
                  If IsBlank([]) And Search("CONSUMIDOR FINAL",[Razao Social])=0 
                     Then If ConfGeral("Deseja continuar o processo sem informar o telefone?")
                             Then Moveto [Endereco_Eletronico]
                          EndIf    
                     Else Moveto [Endereco_Eletronico] 
                  EndIf 
             Case Field()="Endereco_Eletronico"  :
                  Switch
                    Case Not IsBlank([]) And Search("@",[Endereco_Eletronico])=0 :
                                       FastMsg("E-mail inv lido!") 
                    ;Case IsBlank([]) : If ConfGeral("Deseja continuar o processo sem informar o e-mail?")
                    ;                      Then Moveto [Codigo de Barras]
                    ;                   EndIf    
                    OTherWise        : Moveto [Codigo de Barras] 
                  EndSwitch
             Case Field()="Codigo de Barras"  :
                  If Not IsBlank([])
                     Then If Verifica_Item_Lista("Codigo de Barras")
                             Then Moveto [Flag]
                             Else Moveto [Codigo de Barras] 
                          EndIf   
                     Else Moveto [Codigo do Item]
                  EndIf
             Case Field()="Codigo do Item"    :
                  If Not IsBlank([])
                     Then If Verifica_Item_Lista("Codigo do Item")
                             Then Moveto [Flag]
                             Else Moveto [Codigo do Item]
                          EndIf   
                     Else [Codigo de Barras COD128] = ""
                          FastMsg("Informe o c¢digo do item!")
                  EndIf      
             Case Field()="Flag"  :
                  If CHAVEC=1
                      Then If [Status] <> "COMPRA"
                              Then DispositivoI("FAT")
                                   If OK<>""
                                      Then Atualiza_Lista("Compra")
                                           Gera_Comprovante()
                                           If [Status]="" Then [Status]="COMPRA" EndIf
                                           CHAVEC=9
                                           Return     
                                   EndIf
                           EndIf
                  EndIf
                  
           EndSwitch
      EndSwitch
EndWhile

EndProc  ;DIGITAC()

;*******************************************************************************
;* Rotina para localizar romaneio/nf/cupom fiscal                              *
;*******************************************************************************   
Proc Localiza_Nota()                  

NOTA_CANCELADA  = False
ACHOU_NOTA      = False
EMPRESA         = [Codigo da Empresa    ]
NDOC            = [Numero do Documento  ]
SDOC            = [Serie do Documento   ]
NSERIE_CUPOM    = [Numero de Serie Cupom]

Switch
  Case Upper(SubStr(NSERIE_CUPOM,1,1))="X" :
       TIPO_DOCTO="CUP"
  Case Upper(SubStr(NSERIE_CUPOM,1,1))="N" Or ([Numero de Serie Cupom]<>"" And [Serie do Documento]="") :
       TIPO_DOCTO="NFCE"
  OtherWise :
       TIPO_DOCTO="ROM_NF"
EndSwitch

If TIPO_DOCTO="ROM_NF" And SDOC <> [Serie do Documento] 
   Then Return False
EndIf    

Moveto "Lpreserq"
UnLockRecord
FormKey
Moveto "\\Sistemas\\Vendas\\NotaC"
Moveto  [Numero do Documento]
Locate NDOC
If RetVal
   Then MSG        = ""
        ACHOU_ITEM = False
        While [Numero do Documento] = NDOC
          Switch
            Case TIPO_DOCTO="CUP" :
                 ;---- Verifica CUPOM FISCAL ----------------------------------------------
                 If [Codigo da Empresa ] = EMPRESA And [Tipo do Documento ] = "CUP"   And 
                    StrVal(NumVal([Numero da OF])) = StrVal(NumVal(AlinhM(NSERIE_CUPOM,6))) 
                    Then If [Situacao]="C"
                            Then NOTA_CANCELADA  = True
                            Else ACHOU_NOTA      = True
                         EndIf   
                         SDOC = [Serie do Documento]
                         QuitLoop                           
                 EndIf
            Case TIPO_DOCTO="NFCE" :
                 ;---- Verifica NFCE -----------------------------------------------------
                 If [Codigo da Empresa ] = EMPRESA And [Tipo do Documento ] = "NFCE"   And 
                    StrVal(NumVal([Numero da OF])) = StrVal(NumVal(AlinhM(NSERIE_CUPOM,6))) 
                    Then If [Situacao]="C"
                            Then NOTA_CANCELADA  = True
                            Else ACHOU_NOTA      = True
                         EndIf   
                         SDOC = [Serie do Documento]
                         QuitLoop                           
                 EndIf
            OtherWise :     
                 ;---- Verifica ROMANEIO E NF ---------------------------------------------
                 If [Codigo da Empresa ] = EMPRESA And SDOC = [Serie do Documento]
                    Then If [Situacao]="C"
                            Then NOTA_CANCELADA  = True
                            Else ACHOU_NOTA      = True
                         EndIf   
                         SDOC = [Serie do Documento]
                         QuitLoop                           
                 EndIf
          EndSwitch
          Skip
          If Eot() Then QuitLoop EndIf
          Locate Next NDOC
          If Not RetVal
             Then QuitLoop
          EndIf   
        EndWhile
        
        Switch
          Case Not ACHOU_NOTA  :  
               Switch
                 Case TIPO_DOCTO="CUP" :
                      MSG = "Cupom "+NDOC+" / ECF "+NSERIE_CUPOM+" n„o encontrado!"
                 Case TIPO_DOCTO="NFCE" :
                      MSG = "NFCE "+NDOC+" / ECF "+NSERIE_CUPOM+" n„o encontrado!"
                 OtherWise :
                      MSG = "Documento "+NDOC+" / "+SDOC+" n„o encontrado!"
               EndSwitch  
          Case SDOC="" And TIPO_DOCTO="CUP" :
               MSG = "Cupom "+NDOC+" / ECF "+NSERIE_CUPOM+" n„o encontrado!"
          Case SDOC="" And TIPO_DOCTO="NFCE" :
               MSG = "NFCE "+NDOC+" / ECF "+NSERIE_CUPOM+" n„o encontrado!"     
          Case NOTA_CANCELADA             :
               Switch
                 Case TIPO_DOCTO="CUP" :
                      MSG = "Cupom "+NDOC+" / Serie "+NSERIE_CUPOM+" CANCELADO!"
                 Case TIPO_DOCTO="NFCE" :
                      MSG = "NFCE "+NDOC+" / Serie "+NSERIE_CUPOM+" CANCELADO!"
                 OtherWise :
                      MSG = "Documento "+NDOC+" / Serie "+SDOC+" CANCELADO!"
               EndSwitch
        EndSwitch
        
        Moveto "Lpreserq"
        Moveto [Numero do Lancamento]
        Locate LANCTO
        FormKey
        IsLockRecord()
        
        GetRecord "\\Sistemas\\Vendas\\NotaC" EMPRESA,NDOC,SDOC To REG_NOTA
        If RetVal
          Then Switch
                 Case  REG_NOTA["Tipo do Documento"]<>"CUP" And TIPO_DOCTO="CUP" : 
                       MSG = "Documento "+NDOC+" "+NSERIE_CUPOM+" n„o ‚ um Cupom!"
                 Case  REG_NOTA["Tipo do Documento"]<>"NFCE" And TIPO_DOCTO="NFCE" : 
                       MSG = "Documento "+NDOC+" "+NSERIE_CUPOM+" n„o ‚ um NFCE"
                 OtherWise :            
                       GetRecord "\\Sistemas\\Cadastro\\Destinat" REG_NOTA["Codigo"] To REG_DESTINAT
                       [Codigo do Representante] = REG_NOTA["Codigo do Representante"] 
                       [Nome Fantasia Represent] = REG_NOTA["Nome Fantasia Represent"]
                       [Codigo                 ] = REG_NOTA["Codigo"                 ]
                       [Razao Social           ] = REG_NOTA["Nome Fantasia EmitDest" ]
                       [Telefone               ] = REG_NOTA["Telefone"               ]
                       [Endereco_Eletronico    ] = REG_DESTINAT["Endereco_Eletronico"]
                       [Data do Documento      ] = REG_NOTA["Data de Emissao"        ]
                       UnLockRecord
                EndSwitch
           Else Switch
                  Case TIPO_DOCTO="CUP" :
                       MSG = "Cupom "+NDOC+" "+NSERIE_CUPOM+" inv lido! "
                  Case TIPO_DOCTO="NFCE" :
                       MSG = "NFCE "+NDOC+" "+NSERIE_CUPOM+" inv lido! "
                  OtherWise :
                       MSG = "Documento "+NDOC+" / "+SDOC+" inv lido! "
                EndSwitch   
        EndIf    
        Release Vars REG_NOTA
        
        If MSG<>""
           Then Mensagem(MSG)
                Moveto [Numero do Documento]
                [Serie do Documento] = ""
                Return False
           Else [Serie do Documento] = SDOC          
        EndIf
   Else Moveto "Lpreserq"
        Moveto [Numero do Lancamento]
        Locate LANCTO
        FormKey
        IsLockRecord()
        Moveto [Numero do Documento]
        Mensagem("Documento "+NDOC+" nÆo localizado!")
        Return False
EndIf        
                                  
Return True
                                  
EndProc ;Localiza_Nota()

;*******************************************************************************
;* Rotina para verificar a existˆncia do item na lista de presentes            *
;*******************************************************************************            
Proc Verifica_Item_Lista(PARAM)  
Private REG_LPRESRQ

QUANTIDADE  = 1
ITEM_PRECO  = BlankNum()
ITEM_DESCTO = BlankNum() 
                          
MSG        = ""
COD_BARRAS = ""

LANCTO_LISTA = [Lpreserq->Lancamento_Lista] 
DADOS_DOCTO  = [Lpreserq->Numero do Documento]+"/"+[Lpreserq->Serie do Documento]

CopyToArray REG_LPRESRQ

Moveto "Lpreserq"
UnLockRecord
FormKey
;---- Achando o c¢digo do item ------------------------------------
If PARAM="Codigo do Item"
   Then ITEM_LISTA = [Lpreserq->Codigo do Item]
        ITEM       = [Lpreserq->Codigo do Item]+" "+[Lpreserq->Descricao do Item] 
   Else ACHOU_ITEM = False
        ITEM       = "" 
        Moveto "\\Sistemas\\Vendas\\Lpreseni"
        Moveto [Codigo do Item]
        Ativa_Lookup()
        Moveto [Codigo de Barras]
        Locate [Lpreserq->Codigo de Barras]
        If RetVal
           Then ACHOU_ITEM = True
                ITEM_LISTA = [Codigo do Item]
                KeyPress "ESC" 
           Else KeyPress "ESC"
                ITEM_LISTA = [Lpreserq->Codigo de Barras]
                If Codigo_Barras2(ITEM_LISTA,"")
                   Then ACHOU_ITEM = True
                        ITEM_LISTA = CODIGO_BARRA2
                EndIf
        EndIf
        If ACHOU_ITEM
           Then Moveto "Lpreserq"
                GetRecord "\\Sistemas\\Estoque\\Itens" ITEM_LISTA To REG_ITEM
                [Codigo do Item     ] = REG_ITEM["Codigo do Item"]
                [Descricao do Item  ] = REG_ITEM["Descricao do Item"]
                [Codigo de Barras   ] = REG_ITEM["Codigo de Barras"] 
                [Unidade Interna    ] = REG_ITEM["Unidade Interna"]                
                UnLockRecord

                ITEM = REG_ITEM["Codigo do Item"]+" "+REG_ITEM["Descricao do Item"]                
                
                Moveto [Numero do Lancamento]
                Locate LANCTO
        EndIf
EndIf        

;---- Verifica se o item da nota j  foi lan‡ado anteriormente ------------------
OCORRENCIA_QTD = 0
OCORRENCIA     = ""

Moveto "Lpreserq"
Scan For [Codigo do Item]  = ITEM_LISTA
  If [Numero do Lancamento ] <> LANCTO       And 
     [Status               ] <> "CANCELADO"  And
     [Status               ] <> "DEVOLVIDO"  And
     Search("DEV",[Status])   = 0            And                            
     Search("[** Gerado",[Justificativa])=0  And
     [Codigo da Empresa    ]  = REG_LPRESRQ["Codigo da Empresa"]     And
     [Tipo do Documento    ]  = REG_LPRESRQ["Tipo do Documento"]     And
     [Numero do Documento  ]  = REG_LPRESRQ["Numero do Documento"]   And
     [Serie do Documento   ]  = REG_LPRESRQ["Serie do Documento"]    And
     [Numero de Serie Cupom]  = REG_LPRESRQ["Numero de Serie Cupom"]   
     Then OCORRENCIA_QTD = OCORRENCIA_QTD + [Quantidade]
          If OCORRENCIA=""
             Then OCORRENCIA = [Numero do Lancamento]
             Else OCORRENCIA = OCORRENCIA + "," + [Numero do Lancamento]
          EndIf
  EndIf
EndScan

;Verificando quantidade devolvida ----------------------------------------------
ACHOU_COMPRA_QTD    = 0
ACHOU_DEVOLUCAO_QTD = 0
Moveto "\\Sistemas\\Vendas\\Lpreseni"
Moveto [Codigo do Item]
Locate ITEM_LISTA
If RetVal
   Then While [Codigo do Item] = ITEM_LISTA
          If [Numero do Lancamento]=LANCTO_LISTA
             Then ACHOU_DEVOLUCAO_QTD = ACHOU_DEVOLUCAO_QTD + [Quantidade_Devolvida]
                  ACHOU_COMPRA_QTD    = ACHOU_COMPRA_QTD + [Quantidade_Compra] 
          EndIf
          Skip
          If Eot() Then QuitLoop EndIf
        EndWhile
EndIf   

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

;---- Verifica o Item na Nota --------------------------------------------------
ACHOU_ITEM_QTD = 0
MSG            = ""
Moveto "\\Sistemas\\Vendas\\NotaI"
Moveto [Codigo da Empresa]
Locate [Lpreserq->Codigo da Empresa],[Lpreserq->Numero do Documento],[Lpreserq->Serie do Documento]
If Not RetVal
   Then MSG = "NÆo foi localizado o documento "+[Lpreserq->Numero do Documento]+"/"+[Lpreserq->Serie do Documento]+"!"
   Else ACHOU_ITEM=False
        While [Codigo da Empresa  ] = [Lpreserq->Codigo da Empresa  ] And 
              [Numero do Documento] = [Lpreserq->Numero do Documento] And 
              [Serie do Documento ] = [Lpreserq->Serie do Documento ]
          If [Codigo do Item] = ITEM_LISTA
             Then ACHOU_ITEM_QTD = ACHOU_ITEM_QTD + [Quantidade]
                  ITEM_PRECO  = [Preco Unitario]
                  ITEM_DESCTO = NDecimal(([Valor Desconto Item]+[Valor Desconto Total])/[Quantidade],2) 
                  ACHOU_ITEM  = True
          EndIf
          Skip
          If Eot() Then QuitLoop EndIf
        EndWhile      
        If Not ACHOU_ITEM
           Then MSG = "NÆo foi localizado o item "+[Lpreserq->Codigo do Item]+" "+[Lpreserq->Descricao do Item]+"//no documento "+
                      [Lpreserq->Numero do Documento]+"/"+[Lpreserq->Serie do Documento]+"!"
        EndIf
EndIf

If MSG <> ""
   Then Moveto "Lpreserq"
        Moveto [Numero do Lancamento]
        Locate LANCTO
        FormKey
        IsLockRecord()
        
        Mensagem(MSG)
        Return False
EndIf

If [Lpreserq->Lancamento_Lista]=""
   Then ACHOU_ITEM = True
   Else ACHOU_ITEM = False
        Moveto "\\Sistemas\\Vendas\\Lpreseni"   
        Moveto [Numero do Lancamento]
        Locate [Lpreserq->Lancamento_Lista]
        If RetVal
           Then While [Numero do Lancamento] = [Lpreserq->Lancamento_Lista]
                  If [Codigo do Item] = ITEM_LISTA
                     Then ACHOU_ITEM     = True
                          COD_BARRAS     = [Codigo de Barras]
                          QuitLoop        
                  EndIf   
                  Skip
                  If Eot() Then QuitLoop EndIf
                EndWhile
        EndIf
EndIf

If Not ACHOU_ITEM
   Then If ConfGeral(Completa("Item "+Format("W10",[Lpreserq->Codigo do Item])+" "+
                     Format("W30",[Lpreserq->Descricao do Item])+" nÆo foi",55," ")+"//"+ 
                     Completa("localizado na lista de presentes!",55," ")+"//"+
                     Completa("Deseja incluir este item na lista "+[Lpreserq->Lancamento_Lista]+"?",55," "))
           Then ACHOU_ITEM=True 
        EndIf   
EndIf

If ACHOU_ITEM And OCORRENCIA_QTD>0
   Then If OCORRENCIA_QTD>ACHOU_ITEM_QTD
           Then  MSG=""
                 If LANCTO_LISTA<>"" Then 
                 MSG = MSG + Completa("     Lista: "+LANCTO_LISTA,64," ")+"//" EnDIf
                 MSG = MSG + Completa(" Documento: "+DADOS_DOCTO,64," ")+"//"
                 MSG = MSG + Completa("      Item: "+ITEM,64," ")+"//"
                 MSG = MSG + Completa("Quantidade: "+StrVal(ACHOU_ITEM_QTD),64," ")+"////"
                 
                 MSG = MSG + Completa("O item referente a este documento j  teve sua compra realizada!",64," ")+"//"
                 If Search(",",OCORRENCIA)>0
                    Then MSG = MSG + Completa("Lan‡amentos Localizados -> "+OCORRENCIA,64," ")
                    Else MSG = MSG + Completa("Lan‡amento Localizado -> "+OCORRENCIA,64," ")
                 EndIf
                 Mensagem(MSG)
                 ACHOU_ITEM=False
        EndIf
EndIf
                        
If ACHOU_ITEM
   Then ;If QUANTIDADE > [Quantidade] Or (QUANTIDADE+[Quantidade_Compra] > [Quantidade]) Or
        ;   QUANTIDADE+[Quantidade_Compra] > [Quantidade]-[Quantidade_Entregue]
        ;   Then ACHOU_ITEM=False
        ;        Mensagem("Quantidade de compra ‚ maior que a quantidade dispon¡vel na lista de presentes!")
        ;EndIf
EndIf

Moveto "Lpreserq"
Moveto [Numero do Lancamento]
Locate LANCTO
FormKey
IsLockRecord()

If Not ACHOU_ITEM
   Then If PARAM="Codigo do Item"
           Then Moveto [Codigo do Item  ] 
           Else Moveto [Codigo de Barras]
        EndIf
        Return False  
   Else GetRecord "\\Sistemas\\Estoque\\Itens" [Lpreserq->Codigo do Item] TO REG_ITEM
        If RetVal
           Then COD_BARRAS = REG_ITEM["Codigo de Barras"]
                [Preco Unitario] = ITEM_PRECO 
                If ITEM_DESCTO>0
                   Then [Valor Desconto Item] = ITEM_DESCTO
                EndIf    
                [Quantidade             ] = QUANTIDADE
                [Codigo de Barras COD128] = Format("W6",[Lpreserq->Numero do Lancamento])+"-"+
                                            Format("W13",COD_BARRAS)+"-"+
                                            Format("W6",[Lpreserq->Numero do Documento])+"-"+
                                            Format("W4",[Lpreserq->Serie do Documento])
           Else Mensagem("Item "+[Lpreserq->Codigo do Item]+" "+[Lpreserq->Descricao do Item]+" nÆo foi localizado no cadastro de itens!")
                Moveto [Codigo do Item]
                Return False
        EndIf
EndIf 
Return True

EndProc 

;*******************************************************************************
;* Rotina Dialog Leitura_Codigo_Barras                                         *
;*******************************************************************************
Proc SD_DialogLerCodBarra(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=" Esc=Retornar "

If Disparo="OPEN"
   Then INICIO_DIALOG=False
        Campo="TG_CODIGO"
        
        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_CODIGO"       : CancelDialog 
          EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="TG_CODIGO"        : 
                  Dados_Item=ControlValue("TG_CODIGO")
								  AcceptDialog
           EndSwitch
   EndSwitch
EndIf
RefreshDialog

Switch
 Case Campo="TG_CODIGO"  : MSGCAMPO=" Informe somente o c¢digo de barras"
EndSwitch

MontaRodapeSD(MSGCAMPO, TECLA)
If Campo="TG_CODIGO"
   Then KeyPress "RIGHT"
EndIf
Return Temp

EndProc  ; (Sd_Dialog)

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

Switch
  Case PARAM_FUNCAO = "DEVOLUCAO" : TIT = "C¢digo de Barras -> Devolu‡Æo"
  Case PARAM_FUNCAO = "ENTREGA"   : TIT = "C¢digo de Barras -> Entrega" 
  OtherWise                       : TIT = "C¢digo de Barras -> Conferˆncia"
EndSwitch

While True                  
      INICIO_DIALOG=True
      
      Echo Normal      
      Echo Off
      
      Dados_Item=""               
      
      ShowDialog "C¢digo de Barras" Proc "SD_DialogLerCodBarra"
      Trigger "OPEN","ARRIVE"
      Key "ESC","ENTER"
       @ 21,00 Height 04 Width 82
       
        Label  @ 00,00 TIT for "TG_CODIGO"
        Accept @ 01,01 Width 77 "A32" Tag "TG_CODIGO" To Dados_Item
      EndDialog
      Mouse Show
      If Not RetVal
         Then SAIR_ROTINA  = True
              Return False
      EndIf

      If Rtrim(Dados_Item)="" 
         Then Mensagem("Informe o C¢digo de Barras ou C¢digo do Item!")
              Loop
      EndIf
      
      Past=SearchFrom("*",Dados_Item,1)
      If Past>0 
         Then Mensagem("Informe apenas o c¢digo de barras!")
              Loop
      EndIf
      Echo Off
      
      If RetVal="ESC"
         Then Return False
         Else 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

;Exemplo do C¢digo de Barras: 000007-7893979323996-115148-X204

Dados_QTD = [Lpreserq->Quantidade]
AUX_QTD   = Dados_QTD

AUX_ITEM  = [Lpreserq->Codigo do Item]
AUX_CAMPO = Field()

If Not IsAssigned(PARAM_FUNCAO)
   Then Mensagem("Parƒmetro inv lido//Verificar com o Suporte Vise Inform tica!")
        Return False
EndIf   

If Not Ler_CDBarras(10,05)
   Then Return False
EndIf

MSG                = ""
ACHOU_LANCTO       = True
CDBAR_LANCTO       = Ltrim(Rtrim(SubStr(Dados_Item,01,06)))
CDBAR_CODBARRA     = Ltrim(Rtrim(SubStr(Dados_Item,08,13)))
CDBAR_DOCTO_NUMERO = Ltrim(Rtrim(SubStr(Dados_Item,22,06))) 
CDBAR_DOCTO_SERIE  = Upper(Ltrim(Rtrim(SubStr(Dados_Item,29,04))))
             
;---- Verifica Devolu‡Æo de item lan‡ada no lote de devolu‡Æo ------------------                   
LOCALIZA_LPRESEDI = Format("W6",CDBAR_LANCTO)+"-"+
                    Format("W13",CDBAR_CODBARRA)+"-"+
                    Format("W6",CDBAR_DOCTO_NUMERO)+"-"+
                    Format("W4",CDBAR_DOCTO_SERIE)
Moveto "LPreseDi"
Moveto [Codigo de Barras COD128]
Locate LOCALIZA_LPRESEDI
If RetVal  
   Then While [Codigo de Barras COD128] = LOCALIZA_LPRESEDI
          GetRecord "LPreseDc" [Numero do Lancamento] To REG_LANCTOP
          If RetVal And REG_LANCTOP["Status"]<>"CANCELADO"
             Then MSG = "C¢digo de Barras j  foi lan‡ado para o item "+[Codigo do Item]+" referente ao lan‡amento do lote de devolu‡Æo "+[Numero do Lancamento]+"!"
                  QuitLoop
          EndIf
          Skip
          If Eot() Then Quitloop EndIf
          Locate Next  Dados_Item
          If Not RetVal Then QuitLoop EndIf
        EndWhile         
EndIf  

Moveto "Lpreserq"
FormKey
If MSG<>""
   Then Mensagem(MSG)
        Return False
EndIf             
;-------------------------------------------------------------------------------                                 
                   
Moveto "Lpreserq"
Moveto [Numero do Lancamento]
Locate CDBAR_LANCTO
If RetVal
   Then SetaCorRegistro("Paginar")
        CopyToArray REG_LANCTO
        MSG=""
        Switch
          Case (Search("COMPRA",[Lpreserq->Status])=0 And Search("CP",[Lpreserq->Status])=0)    And
               (PARAM_FUNCAO = "DEVOLUCAO" Or PARAM_FUNCAO = "ENTREGA"Or PARAM_FUNCAO = "COMPRA") :
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" nÆo teve a compra finalizada!"
          Case Search("[** Gerado",REG_LANCTO["Justificativa"])>0 And PARAM_FUNCAO = "DEVOLUCAO" :
               MSG = "Este lan‡amento nÆo pode ser DEVOLVIDO//Verifique o lan‡amento original!"
          Case Search("[** Gerado",REG_LANCTO["Justificativa"])>0 And PARAM_FUNCAO = "ENTREGA" :
               MSG = "Este lan‡amento nÆo pode ser ENTREGUE//Verifique o lan‡amento original!"
          Case Search("[** Gerado",REG_LANCTO["Justificativa"])>0 And PARAM_FUNCAO = "COMPRA" :
               MSG = "Este lan‡amento nÆo pode ser CONFERIDO//Verifique o lan‡amento original!"     
          Case Search("[** Gerado",REG_LANCTO["Justificativa"])>0 :
               MSG = "Este lan‡amento nÆo pode ser Devolvido//Verifique o lan‡amento original!"
          Case REG_LANCTO["Status"]="CANCELADO"  :
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" j  foi CANCELADO"
          Case PARAM_FUNCAO = "DEVOLUCAO"  And (REG_LANCTO["Status"]="DEVOLVIDO" Or Search("DEV",REG_LANCTO["Status"])>0)  :
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" j  foi DEVOLVIDO!"
          Case PARAM_FUNCAO = "COMPRA" And (REG_LANCTO["Status"]="CONFERIDO" Or Search("CF",REG_LANCTO["Status"])>0)       :
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" j  foi CONFERIDO!"
          Case PARAM_FUNCAO = "DEVOLUCAO"        And 
               REG_LANCTO["Status"]<>"CONFERIDO" And 
               REG_LANCTO["Status"]<>"ENTREGUE"  And
               Search("CF",REG_LANCTO["Status"])=0           And
               Search("ENT",REG_LANCTO["Status"])=0            :
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" ainda nÆo foi CONFERIDO!"
          Case PARAM_FUNCAO = "COMPRA"  And (REG_LANCTO["Status"]="DEVOLVIDO" Or Search("DEV",REG_LANCTO["Status"])>0) : 
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" foi DEVOLVIDO!"
          Case (PARAM_FUNCAO = "COMPRA" Or PARAM_FUNCAO = "ENTREGA") And (REG_LANCTO["Status"]="ENTREGUE" Or Search("ENT",REG_LANCTO["Status"])>0)   :
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" foi ENTREGUE!"
          Case PARAM_FUNCAO = "ENTREGA"  And (REG_LANCTO["Status"]="DEVOLVIDO" Or Search("DEV",REG_LANCTO["Status"])>0) : 
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" foi DEVOLVIDO!"
          Case PARAM_FUNCAO = "ENTREGA"  And (REG_LANCTO["Status"]="ENTRGUE" Or Search("ENT",REG_LANCTO["Status"])>0) : 
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" foi ENTREGUE!"     
        EndSwitch
        
        If MSG<>""
           Then If PARAM_FUNCAO = "DEVOLUCAO" And Search("[** Gerado",REG_LANCTO["Justificativa"])=0
                   Then MSG = "NÆo ‚ poss¡vel realizar a devolu‡Æo.//" + MSG
                EndIf
                Mensagem(MSG)
                Return False
        EndIf

        If CDBAR_DOCTO_NUMERO = REG_LANCTO["Numero do Documento"] And
           CDBAR_DOCTO_SERIE  = REG_LANCTO["Serie do Documento"]  And
           CDBAR_CODBARRA     = REG_LANCTO["Codigo de Barras"]    
           Then DADOS_ITEM = ""
                Switch
                  Case PARAM_FUNCAO = "ENTREGA"   : Atualiza_Lista("Entrega")
                  Case PARAM_FUNCAO = "COMPRA"    : Atualiza_Lista("Conferencia")
                  Case PARAM_FUNCAO = "DEVOLUCAO" : Atualiza_Lista("Devolucao")
                  OtherWise                       : Mensagem("Item "+DADOS_ITEM+" conferido!")
                EndSwitch
           Else MSG = ""
                Switch
                  Case CDBAR_DOCTO_NUMERO <> REG_LANCTO["Numero do Documento"] : 
                       MSG = "Lan‡amento "+CDBAR_LANCTO+" nÆo corresponde ao n£mero do documento "+CDBAR_DOCTO_NUMERO+"!"
                  Case CDBAR_DOCTO_SERIE  <> REG_LANCTO["Serie do Documento"]  :
                       MSG = "Lan‡amento "+CDBAR_LANCTO+" nÆo corresponde … s‚rie do documento "+CDBAR_DOCTO_SERIE+"!"
                  Case CDBAR_CODBARRA     <> REG_LANCTO["Codigo de Barras"]    :
                       MSG = "Lan‡amento "+CDBAR_LANCTO+" nÆo corresponde ao c¢digo de barras "+CDBAR_CODBARRA+"!"
                EndSwitch
                Mensagem(MSG)
                Return False
        EndIf
EndIf

Moveto Field AUX_CAMPO
Return True

EndProc ;CDBarras()

;*******************************************************************************
;* 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_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, StrVal(Year(Today())) , AlinhM(StrVal(Month(Today())),2)
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          [Ano Referencia      ]=StrVal(Year(Today())) 
          [Mes Referencia      ]=AlinhM(StrVal(Month(Today())),2)
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ;Cria_Ficha()

;*******************************************************************************
;* Rotina Atualizacao do Estoque (Inclusao, Alteracao e Exclusao)             **
;*******************************************************************************
Proc Estoque()

CUSTO=BlankNum()

If [FaturaC->Atualiza Estoque]<>"S" Or IsBlank([FaturaI->Codigo do Item]) Or
   [FaturaI->Tipo do Item]="C" Or [FaturaI->Tipo do Item]="D" Or [FaturaI->Tipo do Item]="F" Or
   [FaturaI->Tipo do Item]="G" Or [FaturaI->Tipo do Item]="H" Or [FaturaI->Tipo do Item]="I"
   Then Return
EndIf

AUX_DATA = [FaturaC->Data de Emissao]
MES_EST  = AlinhM(StrVal(Month(AUX_DATA)),2)
ANO_EST  = StrVal(Year(AUX_DATA))   
              
While True
 Moveto "\\Sistemas\\Estoque\\SdEstq"
 Locate [FaturaC->Codigo da Empresa],
        [FaturaI->Codigo do Item   ], ANO_EST, MES_EST
 If Not RetVal
    Then If Not Cria_Ficha([FaturaC->Codigo da Empresa],[FaturaI->Codigo do Item],False)
            Then Return False
            Else Loop
         EndIf
 EndIf
 While IsLockRecord() EndWhile
 QuitLoop
EndWhile

CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
If CUSTO=0 Or IsBlank(CUSTO)
   Then CUSTO=[Ultimo Custo Atual]
EndIf

[Saldo Atual      ] = NDecimal([Saldo Atual]+[FaturaI->Quantidade],3)
[Custo Total Atual] = NDecimal([Custo Total Atual]+NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)

If ([Custo Total Atual]/[Saldo Atual])>0
   Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
EndIf
UnLockRecord
SaveTables

Moveto "FaturaI"
[Custo Medio Unitario]=CUSTO

EndProc ;ESTOQUE()

;*******************************************************************************
;* Gera OF de Devolu‡Æo                                                        *
;*******************************************************************************
Proc Gera_OF_Devolucao()
Private NUMERO_ECF

;---- Dados p/ Gerar a Ordem de Faturamento ------------------------------------
;Apurar na Empresa:
;- Destina‡Æo: Criar uma destina‡Æo especifica, lembrando que tem que estar como GERA DUPLICATA = SIM 
;- Condi‡Æo de Pagamento: 03=OUTROS
;- Forma de Pagamento: "OU"
;- Transportador: O PROPRIO
;- Cliente Gen‚rico p/ quando nÆo tiver informado na RQ: Consumidor Final?

GetRecord "\\Sistemas\\Vendas\\NotaC" [Lpreserq->Codigo da Empresa],[Lpreserq->Numero do Documento],[Lpreserq->Serie do Documento] To REG_NOTA
If Not RetVal
   Then Mensagem("Documento "+[Lpreserq->Numero do Documento]+"/"+[Lpreserq->Serie do Documento]+" nÆo foi localizado no sistema!")
        Return False
EndIf

EMPRESA              = [Lpreserq->Codigo da Empresa]
DESTINACAO_CODIGO    = "062"
GetRecord "Destin" DESTINACAO_CODIGO To REG_DESTINACAO
If RetVal
   Then OBS = REG_DESTINACAO["Observacao_Destinacao"]
   Else OBS = ""
EndIf
If OBS <> ""
   Then OBS = OBS + "\n"
EndIf
OBS = OBS + "[** LISTA DE PRESENTE: "+[Lpreserq->Lancamento_Lista]+" - RQ: "+[Lpreserq->Numero do Lancamento]+" **]"

PESSOA_CODIGO        = [Lpreserq->Codigo                 ]
DATA                 = Today()
PAGTO_CONDICAO       = "03"
PAGTO_FORMA          = "TC"
VENDEDOR_CODIGO      = [Lpreserq->Codigo do Representante]
TRANSPORTADOR_CODIGO = "0001"

ITEM_CODIGO              = [Lpreserq->Codigo do Item     ] 
QUANTIDADE               = [Lpreserq->Quantidade         ]
VALOR_DESCONTO_ITEM      = [Lpreserq->Valor Desconto Item]
VALOR_MERCADORIA         = [Lpreserq->Preco Unitario     ]
VALOR_MERCADORIA_LIQUIDO = VALOR_MERCADORIA - VALOR_DESCONTO_ITEM
VALOR_NOTA_FISCAL        = VALOR_MERCADORIA_LIQUIDO

If Rtrim(PESSOA_CODIGO)=""
   Then PESSOA_CODIGO = "0010" ;CONSUMIDOR FINAL
EndIf

Moveto "\\Sistemas\\Vendas\\FaturaC"
End
If [Numero da OF]<>""
   Then OF = AlinhM(StrVal(NumVal([Numero da OF])+1),6)
   Else OF = "000001"
EndIf
Down 

AGUARDE("Aguarde, gerando a ordem de faturamento "+OF)
  
[Numero da OF              ] = OF
[Codigo da Empresa         ] = EMPRESA
[Data de Emissao           ] = DATA
[Data de Saida             ] = DATA
[Hora de Saida             ] = SubStr(StrVal(Time()),1,5)
[Codigo                    ] = PESSOA_CODIGO
[Consumidor Final          ] = "S"
[Codigo do Representante   ] = VENDEDOR_CODIGO
[Comissao do Representante ] = REG_NOTA["Comissao do Representante"]
[Condicao de Pagamento     ] = PAGTO_CONDICAO
[Forma de Pagamento        ] = PAGTO_FORMA
[Codigo da Tabela          ] = REG_NOTA["Codigo da Tabela"] 
[Codigo da Destinacao      ] = DESTINACAO_CODIGO
[Codigo da Transportadora  ] = TRANSPORTADOR_CODIGO
[Valor Mercadoria          ] = VALOR_MERCADORIA_LIQUIDO
[Valor Mercadoria Liquido  ] = VALOR_MERCADORIA_LIQUIDO
[Valor Nota Fiscal         ] = VALOR_NOTA_FISCAL
[Valor TC                  ] = VALOR_NOTA_FISCAL
[Numero do Pedido          ] = REG_NOTA["Numero do Pedido"] 
[Sistema Gerador           ] = "RQ"
[Tipo de Pagamento         ] = "O"
[Observacao na Nota Fiscal ] = OBS 
[Frete por Conta           ] = "0"
Controle_Dia()
UnLockRecord 
SaveTables
                         
Moveto "\\Sistemas\\Vendas\\FaturaI"
End Down
[Numero da OF            ] = OF
[Item da OF              ] = 1
[Codigo do Item          ] = ITEM_CODIGO
[Quantidade              ] = QUANTIDADE
[Preco Unitario          ] = VALOR_MERCADORIA
[Tipo Desconto Item      ] = "T"
[Valor Desconto Unitario ] = VALOR_DESCONTO_ITEM
[Valor Desconto Item     ] = VALOR_DESCONTO_ITEM
[Preco Total             ] = VALOR_MERCADORIA_LIQUIDO
[Preco Unitario Tabela   ] = VALOR_MERCADORIA 
UnLockRecord 
SaveTables
                         
;Verificando o N§ da Serie da ECF ----------------------------------------------
GetRecord "\\Sistemas\\Cadastro\\TpDoctos" REG_NOTA["Codigo do Documento"] To REG_TPDOCTO
If RetVal
   Then MODELO = REG_TPDOCTO["Modelo do Documento"]
   Else MODELO = ""
EndIf

If MODELO<>""
   Then ECF_NUMERO = ""
        ECF_SERIE  = ""
        If SubStr([Lpreserq->Serie do Documento],1,1)="X"
           Then ECF_NUMERO = AlinhM(StrVal(NumVal([Lpreserq->Numero de Serie Cupom])),2)
                Moveto "\\Sistemas\\Vendas\\Opaf_ECF"
                Moveto [Numero ECF]
                Locate ECF_NUMERO
                If RetVal
                   Then ECF_SERIE = [Numero de Serie]
                EndIf
        EndIf   
        
        Moveto "\\Sistemas\\Vendas\\FaturaR"
        End Down
        [Numero da OF            ] = OF
        [Sequencia               ] = 1
        [IND_EMIT                ] = "0"
        [Modelo_Documento        ] = MODELO
        [Data_Documento          ] = [Lpreserq->Data do Documento  ]
        [Numero_Documento        ] = [Lpreserq->Numero do Documento]
        If ECF_SERIE<>""
           Then [Numero_ECF              ] = ECF_NUMERO
                [Numero_Serie_ECF        ] = ECF_SERIE
           Else [Serie_Documento         ] = [Lpreserq->Serie do Documento]  
        EndIf
        If MODELO="55"
           Then GetRecord "\\Sistemas\\Cadastro\\Empresas" EMPRESA To REG_EMPRESA
                [Codigo_Participante] = EMPRESA
                [Nome_Participante  ] = REG_EMPRESA["Razao Social Empresa"]
                [UF                 ] = REG_EMPRESA["UF Empresa"] 
                [CNPJ_CPF           ] = REG_EMPRESA["CGC Empresa"]
                [IE                 ] = REG_EMPRESA["IE Empresa"]
                [Chave_Acesso       ] = REG_NOTA["Chave_Acesso_NFe"]
        EndIf   
        UnLockRecord 
        SaveTables
EndIf

;---- Atualizando o ESTOQUE ----------------------------------------------------
;** Posicionando o Cursor no documento/item -> UnLockRecord altera a posi‡Æo do cursor 
Moveto "\\Sistemas\\Vendas\\FaturaI"
Moveto [Numero da OF]
Locate OF
Moveto "\\Sistemas\\Vendas\\FaturaC"
Moveto [Numero da OF]
Locate OF

Estoque()

MSG_DEVOLUCAO = "Ordem de Faturamento de devolu‡Æo "+OF+" gerada no sistema!"
Return True

EndProc ;Gera_OF_Devolucao() 

;*******************************************************************************
;* Atualiza Lista de Presentes                                                 *
;*******************************************************************************
Proc Atualiza_Lista(PARAM)
Private PARAM, ITEM_LISTA, LANCTO_LISTA
If Not IsAssigned(PARAM_FUNCAO) Then PARAM_FUNCAO = "COMPRA" EndIf

If PARAM<>"Conferencia" And 
   PARAM<>"Compra"      And 
   PARAM<>"Devolucao"   And 
   PARAM<>"Entrega"
   Then Mensagem("Parƒmetro informado incorretamente!//Verificar com o Suporte Vise Inform tica!")
        Return
EndIf   

Moveto "Lpreserq"
LANCTO_LISTA = [Lancamento_Lista]
CopyToArray REG_LANCTO

If Not IsAssigned(CDBAR_LANCTO)
   Then CDBAR_LANCTO       = [Numero do Lancamento]
        CDBAR_CODBARRA     = [Codigo de Barras    ]
        CDBAR_DOCTO_NUMERO = [Numero do Documento ]  
        CDBAR_DOCTO_SERIE  = [Serie do Documento  ]
EnDIf        

GERA_COMPROVANTE=False
Moveto "Lpreserq"
CopyToArray REG_LPRESRQ
UnLockRecord
FormKey

End
NUMERO_LANCTO_NOVO = AlinhM(StrVal(NumVal([Numero do Lancamento])+1),6)
REG_LPRESRQ["Numero do Lancamento"] = NUMERO_LANCTO_NOVO 
Moveto [Numero do Lancamento]
Locate LANCTO

If PARAM="Conferencia" Or PARAM="Devolucao" Or PARAM="Entrega" 
   Then VERIFICA_ITEM_FORA_LISTA=False
        Moveto "Lpreserq"
        Moveto [Numero do Lancamento]
        Locate CDBAR_LANCTO
EndIf   

If PARAM="Compra"
   Then ACHOU_ITEM = True
        ITEM_LISTA = [Lpreserq->Codigo do Item]
   Else ACHOU_ITEM = False
        ITEM_LISTA = CDBAR_CODBARRA
        Moveto "\\Sistemas\\Vendas\\Lpreseni"
        Moveto [Codigo do Item]
        Ativa_Lookup()
        Moveto [Codigo de Barras]
        Locate ITEM_LISTA
        If RetVal
           Then ACHOU_ITEM = True
                ITEM_LISTA = [Codigo do Item]
                KeyPress "ESC" 
           Else KeyPress "ESC"
                If Codigo_Barras2(ITEM_LISTA,"")
                   Then ACHOU_ITEM = True
                        ITEM_LISTA = CODIGO_BARRA2
                EndIf
        EndIf
EndIf

GetRecord "\\Sistemas\\Estoque\\Itens" ITEM_LISTA TO REG_ITEM
Switch
  Case PARAM_FUNCAO = "ENTREGA"   :
       MSG = ""
       If LANCTO_LISTA<>""
          Then MSG = MSG + Completa("Lista de Presente: "+LANCTO_LISTA,60," ")+"//"
       EndIf   
       MSG = MSG + Completa("     Entrega para: "+REG_LANCTO["Codigo"]+" "+REG_LANCTO["Razao Social"],60," ")+"//"
       MSG = MSG + Completa("    Dados do Item: "+ITEM_LISTA+" "+REG_ITEM["Descricao do Item"],60," ")+"//"
       MSG = MSG + Completa("Deseja realizar a entrega do item deste lan‡amento?",60," ")
  Case PARAM_FUNCAO = "DEVOLUCAO" : 
       MSG = ""
       If LANCTO_LISTA<>""
          Then MSG = MSG + Completa("Lista de Presente: "+LANCTO_LISTA,60," ")+"//"
       EndIf   
       MSG = MSG + Completa("     Entrega para: "+REG_LANCTO["Codigo"]+" "+REG_LANCTO["Razao Social"],60," ")+"//"
       MSG = MSG + Completa("    Dados do Item: "+ITEM_LISTA+" "+REG_ITEM["Descricao do Item"],60," ")+"//"
       MSG = MSG + Completa("Deseja realizar a devolu‡Æo do item deste lan‡amento?",60," ")
  OtherWise : MSG = ""       
EndSwitch
If MSG <> ""
   Then ConfGeral(MSG)
        If Ok<>"S"
           Then ACHOU_ITEM=False
        EndIf
EndIf        

If Not ACHOU_ITEM
   Then Moveto "Lpreserq"
        Moveto [Numero do Lancamento]
        Locate LANCTO
        FormKey
        IsLockRecord()
        Return False 
EndIf   

If LANCTO_LISTA<>""
   Then Moveto "Lpreseni"
        Moveto  [Numero do Lancamento]
        Locate LANCTO_LISTA
        If RetVal
          Then While [Numero do Lancamento] = LANCTO_LISTA
                 If [Codigo do Item] = ITEM_LISTA
                    Then Switch
                           Case PARAM="Conferencia" :
                                [Quantidade_Conferida] = [Quantidade_Conferida] + [Lpreserq->Quantidade]
                                [Status              ] = "CONFERIDO" 
                           Case PARAM="Compra"    : GERA_COMPROVANTE = True
                                [Quantidade_Compra   ] = [Quantidade_Compra   ] + [Lpreserq->Quantidade]
                                [Status              ] = "COMPRA"
                           Case PARAM="Devolucao" : GERA_COMPROVANTE = True
                                [Quantidade_Devolvida] = [Quantidade_Devolvida] + [Lpreserq->Quantidade]
                                [Status              ] = "DEVOLUCAO"                    
                           Case PARAM="Entrega"   : GERA_COMPROVANTE = True
                                [Quantidade_Entregue ] = [Quantidade_Entregue ] + [Lpreserq->Quantidade]
                                [Status              ] = "ENTREGUE"
                                [Data da Entrega     ] = Today()
                         EndSwitch
                         UnLockRecord
                         QuitLoop
                 EndIf   
                 Skip
                 If Eot() Then QuitLoop EndIf
               EndWhile
        EndIf          
EndIf    

If Not GERA_COMPROVANTE And VERIFICA_ITEM_FORA_LISTA And LANCTO_LISTA<>""
   Then SEQ = 0 
        Moveto "\\Sistemas\\Vendas\\Lpreseni"
        Moveto [Numero do Lancamento]
        Locate [Lpreserq->Lancamento_Lista]
        While [Numero do Lancamento] = [Lpreserq->Lancamento_Lista]
          SEQ = [Sequencia]   
          Skip
          If Eot() Then QuitLoop EndIf
        EndWhile
        If SEQ <> 0
           Then GetRecord "LPresenC" [Lpreserq->Lancamento_Lista] To REG_LPRESENC
                GetRecord "\\Sistemas\\Vendas\\TbPrite" REG_LPRESENC["Tabela_Preco"],[Lpreserq->Codigo do Item] To REG_PRRECO
                If Retval
                   Then PRECO = REG_PRRECO["Preco Unitario"]
                   Else PRECO = BlankNum()
                EndIf
                GERA_COMPROVANTE = True
                SEQ = SEQ + 1
                Moveto "\\Sistemas\\Vendas\\Lpreseni"
                End Down
                [Numero do Lancamento] = [Lpreserq->Lancamento_Lista ]
                [Sequencia           ] = SEQ
                [Codigo do Item      ] = [Lpreserq->Codigo do Item   ]
                [Descricao do Item   ] = [Lpreserq->Descricao do Item]
                [Unidade             ] = REG_ITEM["Unidade Interna"]
                [Codigo de Barras    ] = REG_ITEM["Codigo de Barras"]
                [Quantidade          ] = BlankNum() 
                [Quantidade_Compra   ] = [Lpreserq->Quantidade]
                [Preco_Unitario      ] = PRECO
                [Status              ] = "COMPRA NOVO"
                [ItemForaLista       ] = "S"
                UnLockRecord
                SaveTables
        EndIf
EndIf

;---- Gera OF de Devolu‡Æo -----------------------------------------------------
MSG_DEVOLUCAO = ""
If PARAM="Devolucao" And [Lpreserq->Lancamento_Lista]<>""
   Then If Not Gera_OF_Devolucao()
           Then Moveto "Lpreserq"
                Moveto [Numero do Lancamento]
                Locate LANCTO
                FormKey
                IsLockRecord()
                Return False
        EndIf    
EndIf

If PARAM<>"Compra" 
   Then Moveto "Lpreserq"
        Moveto [Numero do Lancamento]
        If [Justificativa]<>"" Then [Justificativa]=[Justificativa]+"\n" EndIf
        If [Status]="COMPRA" Then [Status]="CP" EndIf
        Switch 
          Case PARAM="Entrega"     : Locate CDBAR_LANCTO
                                     If [Status]<>"" Then [Status] = [Status] + "/" EndIf
                                     [Status       ] = [Status] + "ENT"
                                     [Justificativa] = [Justificativa] + "[** "+REG_LPRESRQ["Numero do Lancamento"]+" -> Lan‡amento de Entrega     **]"
                                     REG_LPRESRQ["Status"           ] = "ENTREGUE"
                                     REG_LPRESRQ["Tipo de Movimento"] = "ENT"
          Case PARAM="Conferencia" : Locate CDBAR_LANCTO
                                     If [Status]<>"" Then [Status] = [Status] + "/" EndIf
                                     [Status       ] = [Status] + "CF"
                                     [Justificativa] = [Justificativa] + "[** "+REG_LPRESRQ["Numero do Lancamento"]+" -> Lan‡amento de Conferˆncia **]"
                                     REG_LPRESRQ["Status"           ] = "CONFERIDO"
                                     REG_LPRESRQ["Tipo de Movimento"] = "CONF" 
          Case PARAM="Devolucao"   : Locate CDBAR_LANCTO
                                     If [Status]<>"" Then [Status] = [Status] + "/" EndIf
                                     [Status       ] = [Status] + "DEV"
                                     [Justificativa] = [Justificativa] + "[** "+REG_LPRESRQ["Numero do Lancamento"]+
                                                       " -> Lan‡amento de Devolu‡Æo / "+OF+" -> Ordem de Faturamento **]"     
                                     [Devolucao_Faturada] = "S"
                                     REG_LPRESRQ["Status"           ] = "DEVOLVIDO"
                                     REG_LPRESRQ["Tipo de Movimento"] = "DEV"
          OtherWise                : REG_LPRESRQ["Status"           ] = "COMPRA"
                                     Locate LANCTO
        EndSwitch
        REG_LPRESRQ["Data_Inclusao"] = Today()                                  ;Mesma Data que ‚ gerado na nota de devolu‡Æo
        REG_LPRESRQ["Justificativa"] = "[** Gerado a partir do lan‡amento: "+[Numero do Lancamento]+" **]"
        REG_LPRESRQ["Codigo de Barras COD128"] = ""
        ;REG_LPRESRQ["Codigo de Barras COD128"] = REG_LPRESRQ["Numero do Lancamento"]+
        ;                                         SubStr(REG_LPRESRQ["Codigo de Barras COD128"],7,Len(REG_LPRESRQ["Codigo de Barras COD128"]))
        
        ;---- Cria um novo lancamento ------------------------------------------
        End Down
        CopyFromArray REG_LPRESRQ
        SaveTables
EndIf 
Moveto "Lpreserq"
Moveto [Numero do Lancamento]
Locate LANCTO
FormKey
UnLockRecord
IsLockRecord()

If MSG_DEVOLUCAO<>""
   Then COR_MENSAGEM="ALERTA" 
        Mensagem(MSG_DEVOLUCAO)
        Release Vars COR_MENSAGEM
EndIf   

Release Vars CDBAR_LANCTO, CDBAR_CODBARRA, CDBAR_DOCTO_NUMERO, CDBAR_DOCTO_SERIE
Return True

EndProc

;*******************************************************************************
;* Seta Lista Presente                                                         *
;*******************************************************************************
Proc Gera_Comprovante()  
Private TabAnt,AUX_CODIGO,AUX_EMPRESA,AUX_NUMERO,AUX_SERIE,AUX_NLANCTO

ARQIMP = PrivDir()+"LPRESA.Txt"
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
EndIf

Copia_Imagem()

COMPROVANTE_DOCUMENTO            = [Lpreserq->Numero do Documento   ]
COMPROVANTE_SERIE_DOCUMENTO      = [Lpreserq->Serie do Documento    ]

COMPROVANTE_ENDERECO_REFERENCIA  = ""
COMPROVANTE_LANCAMENTO_LISTA     = [Lpreserq->Lancamento_Lista      ]
COMPROVANTE_SATUS                = [Lpreserq->Status                ]
COMPROVANTE_OBS                  = [Lpreserq->Observacao            ]

COMPROVANTE_ENTREGA_PARA_CODIGO  = [Lpreserq->Entrega_Codigo        ]
COMPROVANTE_ENTREGA_PARA_CLIENTE = [Lpreserq->Entrega_Nome Fantasia ] 
COMPROVANTE_CODIGO               = [Lpreserq->Codigo                ]
COMPROVANTE_NOME                 = [Lpreserq->Razao Social          ]
COMPROVANTE_TELEFONE             = [Lpreserq->Telefone              ]
COMPROVANTE_DATA                 = [Lpreserq->Data                  ]

If COMPROVANTE_LANCAMENTO_LISTA<>""
   Then GetRecord "LPresenC" COMPROVANTE_LANCAMENTO_LISTA To REG_LPRESENC
        If RetVal
           Then COMPROVANTE_ENTREGA_PARA_CODIGO = REG_LPRESENC["Codigo"]
           Else COMPROVANTE_ENTREGA_PARA_CODIGO = ""
        EndIf
EndIf

GetRecord "\\Sistemas\\Cadastro\\Destinat" COMPROVANTE_ENTREGA_PARA_CODIGO To REG_DESTINAT
If RetVal
   Then COMPROVANTE_ENTREGA_PARA_ENDERECO            = REG_DESTINAT["Endereco"]
        COMPROVANTE_ENTREGA_PARA_REFERENCIA          = ""
        COMPROVANTE_ENTREGA_PARA_TELEFONE            = REG_DESTINAT["Telefone"]
        COMPROVANTE_ENTREGA_PARA_EMAIL               = REG_DESTINAT["Endereco_Eletronico"] 
        COMPROVANTE_ENTREGA_PARA_RG                  = REG_DESTINAT["RG"]
   Else COMPROVANTE_ENTREGA_PARA_ENDERECO            = ""
        COMPROVANTE_ENTREGA_PARA_REFERENCIA          = ""
        COMPROVANTE_ENTREGA_PARA_TELEFONE            = ""
        COMPROVANTE_ENTREGA_PARA_EMAIL               = ""
        COMPROVANTE_ENTREGA_PARA_RG                  = ""
EndIf

GetRecord "LPresenC" COMPROVANTE_LANCAMENTO_LISTA To REG_LPRESENC
If RetVal
   Then COMPRA_NOME           = REG_LPRESENC["Nome Fantasia EmitDest" ]
        COMPRA_COD_VEND       = REG_LPRESENC["Codigo do Representante"]
        COMPRA_NOM_VEND       = REG_LPRESENC["Nome Fantasia Represent"]
        COMPRA_DATA_EVENTO    = REG_LPRESENC["Data_Evento"            ]
   Else COMPRA_NOME           = ""          
        COMPRA_COD_VEND       = ""
        COMPRA_NOM_VEND       = ""
        COMPRA_DATA_EVENTO    = BlankDate()
EndIf  
  
;---- Dados do Item -------------------------------------------------
COMPROVANTE_DATA                = Today()
COMPROVANTE_ITEM                = [Codigo do Item   ]
COMPROVANTE_ITEM_DESCRICAO      = [Descricao do Item]
COMPROVANTE_ITEM_CODBARRA       = [Codigo de Barras ]
COMPROVANTE_ITEM_QTD            = [Quantidade       ]
COMPROVANTE_CODBARRA_LANCTO     = [Codigo de Barras COD128]
COMPROVANTE_CLIENTE             = Ltrim(COMPROVANTE_CODIGO + " ") + COMPROVANTE_NOME

;Exemplo de como ‚ gerado o codigo de barras COD128 no DosPrinter
;*******************************************************************************
; ESC       (         B         LN >> 6+5 = 11 Bytes                             LH   K     M     S     V1       V2     C[0]
; Chr(27) + Chr(40) + Chr(66) + Chr(6+Len(Rtrim(COMPROVANTE_CODBARRA_LANCTO))) + "0"+ "6" + "3" + "0" + Chr(90)+ "0" + "1" +  COMPROVANTE_CODBARRA_LANCTO
; Sendo LN = 6 + A SOMA DO NUMERO DE CARACTERES DO CODIGO DE BARRAS

COMPROVANTE_CODBARRA_LANCTO = Chr(27) + Chr(40) + Chr(66) + Chr(6+Len(COMPROVANTE_CODBARRA_LANCTO)) +
                              "0"+ "6" + "3" + "0" + Chr(90)+ "0" + "1" +  COMPROVANTE_CODBARRA_LANCTO
                                   
If COMPROVANTE_ENTREGA_PARA_CODIGO<>"" Then COMPROVANTE_ENTREGA_PARA_CODIGO = " - "+COMPROVANTE_ENTREGA_PARA_CODIGO EndIf
If COMPROVANTE_CODIGO<>""              Then COMPROVANTE_CODIGO = " - "+COMPROVANTE_CODIGO                           EndIf

Print File ARQIMP CI_8LPP

Print File ARQIMP "\n"
Print File ARQIMP Spaces(41) + COMPROVANTE_DOCUMENTO+"/"+COMPROVANTE_SERIE_DOCUMENTO  
Print File ARQIMP Spaces(17) + COMPROVANTE_DOCUMENTO+"/"+COMPROVANTE_SERIE_DOCUMENTO   + "\n\n\n\n\n"

If COMPROVANTE_LANCAMENTO_LISTA=""
   Then Print File ARQIMP Format("W49",COMPROVANTE_ENTREGA_PARA_CLIENTE+COMPROVANTE_ENTREGA_PARA_CODIGO) + Spaces(8) +
        Format("W4",SubStr(COMPROVANTE_ENTREGA_PARA_CODIGO,4,4)) + "\n\n"
   Else Print File ARQIMP Format("W10","NL: "+COMPROVANTE_LANCAMENTO_LISTA) + Spaces(2) + Format("W42",COMPROVANTE_ENTREGA_PARA_CLIENTE+
                                                                              COMPROVANTE_ENTREGA_PARA_CODIGO+" - "+COMPROVANTE_ENTREGA_PARA_TELEFONE) + Spaces(3)
        Print File ARQIMP Format("W10","NL: "+COMPROVANTE_LANCAMENTO_LISTA) + Spaces(8) + Format("W4",SubStr(COMPROVANTE_ENTREGA_PARA_CODIGO,4,4)) + "\n\n" 
EndIf
Print File ARQIMP Spaces(57)+Format("W25",COMPROVANTE_ENTREGA_PARA_CLIENTE+" - "+COMPROVANTE_ENTREGA_PARA_TELEFONE)+"\n\n"
Print File ARQIMP Format("W52",COMPROVANTE_NOME+COMPROVANTE_CODIGO)+"\n\n"
Print File ARQIMP Spaces(57) + Format("W22",SubStr(COMPROVANTE_ITEM_CODBARRA,1,22))+"\n\n"
Print File ARQIMP Format("W19",COMPROVANTE_TELEFONE) + Spaces(3) + Format("W21",COMPROVANTE_DATA)+Spaces(14)
Print File ARQIMP Format("W22",SubStr(COMPROVANTE_ITEM_DESCRICAO,1,22))+"\n\n"
Print File ARQIMP Spaces(57) + Format("W22",SubStr(COMPROVANTE_ITEM_DESCRICAO,23,22))+"\n\n"
Print File ARQIMP Format("W31",COMPROVANTE_ITEM_DESCRICAO)+Spaces(8)+Format("W13",COMPROVANTE_ITEM_CODBARRA)+"\n\n"
Print File ARQIMP Format("W31","")+Spaces(8)+Format("W10",COMPROVANTE_ITEM)+"\n\n\n\n"
Print File ARQIMP COMPROVANTE_CODBARRA_LANCTO 
If Not IsBlank(COMPROVANTE_DATA)
   Then Print File ARQIMP Spaces(62)+AlinhM(StrVal(Day(COMPROVANTE_DATA)),2) + Spaces(3) + 
                                     AlinhM(StrVal(Month(COMPROVANTE_DATA)),2)  + Spaces(3) +
                                     AlinhM(StrVal(Year(COMPROVANTE_DATA)),4)
EndIf
Print File ARQIMP "\n"
Print File ARQIMP "\n\n\n"

ImpriArq(ARQIMP)
Deleta_Arquivo(ARQIMP)

Release Vars PRESENTE_CODIGO,LPRESENA_CODIGO,LPRESENA_SEQ,LPRESENA_ITEM,LPRESENA_ITEM_DESC,LPRESENA_ITEM_UN,
             LPRESENA_CDBARRA,LPRESENA_QTD,LPRESENA_QTD_COMPRA,LPRESENA_QTD_DEVOL,LPRESENA_QTD_COMP,LPRESENA_QTD_CONF,
             LPRESENA_DATA_ENT,LPRESENA_ITEM_STATUS,PRESENTE_NOME,PRESENTE_DATA,PRESENTE_STATUS,PRESENTE_USUARIO

EndProc ;Gera_Comprovante()

;*******************************************************************************
;* Copia Imagem para Raiz                                                      *
;*******************************************************************************
Proc Copia_Imagem()
Private VSDGDRIVE,VSDGPASTA

VSDGDRIVE = SubStr(Directory(),1,2)
VSDGPASTA = "\\Sistemas\\IMAGENS\\IMG_FUN\\"

IMAGEM_FUNDO = "LP_COMP"

If IsFile(VSDGDRIVE+VSDGPASTA+IMAGEM_FUNDO+".JPG")
   Then Copia_Arquivo(VSDGDRIVE+VSDGPASTA+IMAGEM_FUNDO+".JPG c:\\vise\\"+IMAGEM_FUNDO+".JPG")
EndIf    

EndProc ;Copia_Imagem()

;*******************************************************************************
;* Rotina para Digitacao da Observacao da Requisi‡Æo                           *
;*******************************************************************************
Proc OBSERVACAO()
Private CampAnt

CampAnt=Field()
Prompt " Esc=Cancelar  F2=Gravar "

Moveto [Observacao]
Edita_Memo("Observacao",09,01,13,76,"Observa‡äes")
UnLockRecord

Moveto Field CampAnt

EndProc    ; (Observacao)

;*******************************************************************************
;* Rotina para Valida‡Æo de Registros                                           *
;*******************************************************************************
Proc Valida_Campo()    
Private MSG

MSG = ""
While True
  If [Tipo de Movimento      ] = "" Then MSG = "Tipo de Movimento nÆo informado!"                QuitLoop EndIf   
  If [Numero do Documento    ] = "" Then MSG = "N£mero do Documento nÆo informado!"              QuitLoop EndIf 
  If [Numero de Serie Cupom  ] = "" And [Serie do Documento]=""
     Then MSG = "N§ de S‚rie nÆo informado!"      
          QuitLoop
  EndIf   
  If [Codigo do Representante] = "" Then MSG = "Vendedor nÆo informado!"                         QuitLoop EndIf
  If [Razao Social           ] = "" Then MSG = "Cliente nÆo informado!"                          QuitLoop EndIf
  If [Codigo do Item         ] = "" Then MSG = "Item nÆo informado!"                             QuitLoop EndIf
  QuitLoop
EndWhile

If MSG<>""
   Then Mensagem(MSG)
        Return False
   Else Return True
EndIf

EndProc ;Valida_Campo()

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

Moveto "Lpreserq"
Grava_LogEx("Lpreserq")
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="F" Or OPCAO_FORM="1" Then PickForm OPCAO_FORM EndIf

EndProc ;Controla_EdicaoC()

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

OPCAO_FORM="F"

View NOWINDOW "\\Sistemas\\Vendas\\NotaI"
View NOWINDOW "\\Sistemas\\Vendas\\NotaC"
View NOWINDOW "\\Sistemas\\Vendas\\OPAF_ECF"
View NOWINDOW "\\Sistemas\\Vendas\\FaturaC"
View NOWINDOW "\\Sistemas\\Vendas\\FaturaI"
View NOWINDOW "\\Sistemas\\Vendas\\FaturaR"
View NOWINDOW "\\Sistemas\\Estoque\\SdEstq"
View NOWINDOW "\\Sistemas\\Estoque\\EstqPrm"
View NOWINDOW "\\Sistemas\\Vendas\\LpreseDi"
View NOWINDOW "\\Sistemas\\Vendas\\LpreseDc"
View NOWINDOW "\\Sistemas\\Vendas\\Lpreseni"
View NOWINDOW "\\Sistemas\\Vendas\\Lpresenc"
CoEdit "Lpreserq"
PickForm OPCAO_FORM

EndProc ;Abre_Tabelas()

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

UTILIZA_CODIGO_BARRA = True
ROTINA_LIBERADA      = True

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

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

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

Release Vars All
Release Procs All
