;** LPreseD ********************************************************************
;*  Lista de Presentes - Devolu‡Æo em Lote                                     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 04/10/2019 por Bruno Carvalho
;Ultima Alteracao: 28/04/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado TipoItem_ControlaEstoque()
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado biblioteca "Bib_Bloq" 

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Proc CHAVE()                                                
private AUX                                     
NOVO = False

While True
  Moveto "LPreseDc"
  End
  Moveto [Numero do Lancamento]
  NLANC = [Numero do Lancamento]
  
  If OPCAO_FORM=FORM_RELACAO
    Then Down
    Else CtrlPgDn
  EndIf
  Moveto [Numero do Lancamento]
  
  SetaCorRegistro("Editar")
  While True
  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao()
  
  Switch
  Case RetVal="F3": If OPCAO_FORM=FORM_RELACAO
                       Then OPCAO_FORM=FORM_MANUTENCAO
                       Else OPCAO_FORM=FORM_RELACAO
                    EndIf
                    Del
                    CHAVEC=5
                    Return
  Case RetVal=-94 : MsgTeclasPadrao()
  Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME": 
        While True
          Finalizar=False
          If OPCAO_FORM=FORM_RELACAO
             Then PAGINA("LPreseDc","MR")
             Else PAGINA("LPreseDc","MT")
          EndIf
          NLANC = [Numero do Lancamento]
          Switch
            Case EDITAR="S"  : PickForm FORM_MANUTENCAO
                               Echo Normal
                               Echo Off
                               CHAVEC=0
                               Controla_EdicaoC()
                               UnLockRecord
                               If Finalizar Then QuitLoop EndIf      
            Case EXCLUIR="S" : If [Nome Fantasia EmitDest]<>""
                                  Then FastMsg("NÆo foi poss¡vel excluir este registro!")
                               EndIf
            OtherWise        : QuitLoop
          EndSwitch
          SetaPosForm()
        EndWhile
        QuitLoop         
   Case Retval="ESC":
        CHAVEC=9
        Del
        Return
   Case Retval="ENTER" : 
        If Numero_Lancamento("",FORM_RELACAO)
           Then NLANC = PROXLANCTO_NLANC
                Release Vars PROXLANCTO_NLANC
           Else QuitLoop
        EndIf
        PickForm FORM_MANUTENCAO
        Moveto [Numero do Lancamento]
        If PROXIMO_LANCTO_REG_ACHOU
           Then CHAVEC=0
                If Checa_Controle([Numero_Controle_Dia])
                   Then Return
                EndIf
           Else CHAVEC=1
                If Not Checa_Controle(SYS_CONTROLE_DIA)
                   Then OPCAO_FORM=FORM_RELACAO
                   Else [Tipo do Lancamento]="D"   
                        Return 
                EndIf         
        EndIf 
        If CHAVEC=1
           Then Del
        EndIf
        If OPCAO_FORM=FORM_RELACAO
           Then PickForm FORM_RELACAO
        EndIf
        QuitLoop
    EndSwitch
  EndWhile
EndWhile

EndProc ;CHAVE()

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITAC()
   
If [Status]="CANCELADO"
    Then Mensagem("Lan‡amento "+[Status]+", altera‡Æo nÆo permitida!")
         UnLockRecord
         CHAVEC=9
         Return   
EndIf
 
FACA_CHAVE = True

Switch
  Case IsBlank([Lancamento_Lista]): Moveto [Lancamento_Lista]  
  OtherWise                       : ;CHAVEC=9
                                    FACA_CHAVEI = True
                                    Return
EndSwitch

While True
  Switch
    Case Field()="Lancamento_Lista"        : MSGCAMPO = "Informe o lan‡amento da lista de Casamento/Ch  de Panela/Casa Nova"
    Case Field()="Data"                    : MSGCAMPO = "Data do Lan‡amento"
    OtherWise                              : MSGCAMPO = Field()
  EndSwitch  
  If Field()="Lancamento_Lista" 
     Then TECLA = " Esc=Retornar  F1=Tabela  "
     Else TECLA = " Esc=Retornar             " 
  EndIf
  
  Prompt TECLA
  SetaCorRegistro("Editando")
  Wait Field 
       Until "ESC","ENTER","DEL","FIELDVIEW","F35","F5",-33,"F1"

  Switch
  Case RetVal="F1": 
       If Field()="Lancamento_Lista"
          Then CONSULTAF1()
       EndIf  
  Case Retval="ESC":
       Switch
         Case Field()="Lancamento_Lista" :
              If QuerDesfazer("")
                 Then If CHAVEC=1
                         Then Moveto "Lpresedi"
                              If RecordStatus("New")=False
                                 Then While RecordStatus("New")=False
                                        Del
                                      EndWhile
                              EndIf
                              Moveto "LPreseDc"
                              Del
                         Else If RecordStatus("Modified")
                                 Then Undo
                              EndIf
                      EndIf
                      CHAVEC=9
                      QuitLoop
               EndIf
         Case Field()="Data" : Moveto [Lancamento_Lista]
         OtherWise : Left
       EndSwitch
  Case Retval="ENTER":
       Switch
         Case Field()="Lancamento_Lista" : 
              If Not Isblank([]) 
                 Then While True
                        MSG = ""
                        LANCTO_LISTA = [Lancamento_Lista]
                        Moveto [Lancamento_Lista]
                        Home
                        Locate LANCTO_LISTA
                        If ReTval
                           Then While [Lancamento_Lista] = LANCTO_LISTA
                                  If [Numero do Lancamento]<>NLANC And [Status]<>"FINALIZADO" And [Status]<>"CANCELADO" 
                                     Then MSG =       Completa("Lan‡amento  da Lista "+LANCTO_LISTA+" j  foi adicionado no lan‡amento "+[Numero do Lancamento],66," ")+"//"
                                          MSG = MSG + Completa("e consta com o status em ABERTO.",66," ")+"////"
                                          MSG = MSG + Completa("Para inserir o mesmo lan‡amento da lista ser  necess rio FINALIZAR",66," ")+"//" 
                                          MSG = MSG + Completa("o lan‡amento "+[Numero do Lancamento]+"!",66," ")
                                          QuitLoop
                                  EndIF       
                                  Skip
                                  If Eot() Then QuitLoop EndIf
                                  Locate Next LANCTO_LISTA
                                  If Not RetVal Then QuitLoop EndIf
                                EndWhile
                        EndIf
                        Moveto [Numero do Lancamento]
                        Locate NLANC
                        If MSG <> ""
                           Then Moveto [Lancamento_Lista]
                                Mensagem(MSG)
                                QuitLoop
                        EndIf
                        
                        GetRecord "LPresenC" [Lancamento_Lista] To REG_LPRESENC
                        If Not RetVal
                           Then [Codigo                ] = ""
                                [Nome Fantasia EmitDest] = "" 
                                [Status                ] = ""
                                FastMsg("Lan‡amento da Lista de Casamento/Ch  de Panela/Casa Nova nÆo localizado!")
                           Else If REG_LPRESENC["Status"]="FINALIZADO" Or REG_LPRESENC["Status"]="CANCELADO"
                                  Then Mensagem("Lan‡amento "+[LPreseDc->Lancamento_Lista]+" da Lista de Casamento/Ch  de Panela/Casa Nova//encontra "+
                                                REG_LPRESENC["Status"]+"!")
                                       Moveto [Lancamento_Lista]         
                                  Else If CHAVEC=1
                                          Then Moveto "Lpresedi"
                                               If RecordStatus("New")=False
                                                  Then While RecordStatus("New")=False
                                                         Del
                                                       EndWhile
                                               EndIf
                                       EndIf
                                       Moveto "LPreseDc"
                                       [Codigo                ] = REG_LPRESENC["Codigo"]
                                       [Nome Fantasia EmitDest] = REG_LPRESENC["Nome Fantasia EmitDest"] 
                                       [Status                ] = "ABERTO"
                                       
                                       SEQ = 0
                                       Achou_Item=False
                                       Moveto "LPresenI"
                                       Scan For [Numero do Lancamento]=[LPreseDc->Lancamento_Lista]
                                         GetRecord "LPresenI" [Numero do Lancamento],[Sequencia] To REG_LPRESENI
                                                
                                         If IsBlank(REG_LPRESENI["Quantidade_Conferida"]) Then Loop EndIf
                                         If REG_LPRESENI["Quantidade_Compra"] - REG_LPRESENI["Quantidade_Devolvida"]<=0 Then Loop EndIf
                                         
                                         ;--- Quantidade que ainda nÆo foi conferida -----------------------------------
                                         If REG_LPRESENI["Quantidade_Devolvida"]>0
                                            Then AUX_QTD = REG_LPRESENI["Quantidade_Compra"] - REG_LPRESENI["Quantidade_Devolvida"]
                                            Else AUX_QTD = REG_LPRESENI["Quantidade_Compra"]
                                         EndIf
                                    
                                         If Not Achou_Item Then Achou_Item=True EndIf 
                                         
                                         Aguarde("Aguarde, adicionado itens do la‡amento "+[Numero do Lancamento])
                                                   
                                         ;Apenas uma quantidade por sequencia na tela de lote de devolu‡Æo de produtos
                                         If REG_LPRESENI["Quantidade_Devolvida"]>0
                                            Then QTD = REG_LPRESENI["Quantidade_Compra"] - REG_LPRESENI["Quantidade_Devolvida"]  
                                            Else QTD = REG_LPRESENI["Quantidade_Compra"]
                                         EndIf
                                         TM  = QTD
                                         QTD = 1          
                                         
                                         For ty From 1 To TM               
                                           SEQ = SEQ + 1   
                                           
                                           Moveto "Lpresedi" 
                                           End Down
                                           [Sequencia          ] = SEQ 
                                           [Codigo do Item     ] = REG_LPRESENI["Codigo do Item"   ]
                                           [Descricao do Item  ] = REG_LPRESENI["Descricao do Item"]
                                           [Unidade            ] = REG_LPRESENI["Unidade"          ]
                                           [Codigo de Barras   ] = REG_LPRESENI["Codigo de Barras" ]
                                           [Quantidade         ] = QTD
                                           [Preco_Unitario     ] = REG_LPRESENI["Preco_Unitario"]
                                           UnLockRecord
                                         EndFor  
                                         
                                         Moveto "LPresenI" 
                                       EndScan
                                       SaveTables
                                        
                                       Moveto "LPreseDc"
                                       If Not Achou_Item
                                          Then Mensagem("NÆo h  itens do lan‡amento "+[LPreseDc->Lancamento_Lista]+
                                                        " da Lista de Presentes a ser devolvidos!")
                                               Moveto [Lancamento_Lista]         
                                          Else Moveto [Data]
                                       EndIf 
                                EndIf
                        EndIf
                        QuitLoop
                      EndWhile
              EndIf      
         Case Field()="Data"    :
              If IsBlank([])Then []=Today() EndIf
              CHAVEI=0
              FACA_CHAVEI = True
              QuitLoop    
         OtherWise:
              Right
       EndSwitch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       FastMsg("NÆo foi poss¡vel excluir este registro!")
       ;If CHAVEC=0
       ;   Then If QuerExcluir("")
       ;           Then DEL
       ;                QuitLoop
       ;        EndIf
       ;EndIf
  EndSwitch
EndWhile

EndProc ;DIGITAC()

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

MSGCAMPO=""
While True
  Moveto "Lpresedi"

  Moveto "Lpresedi"
  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While true
        Moveto "Lpresedi"
        Moveto [Sequencia]

        Prompt " Esc=Retornar  F7=Paginar  Alt+F=Fun‡äes  "

        Wait Field
             Until "ESC","PGDN","ENTER","F3","F4","F7","HOME","UP","PGUP","F2","F6","F5","F8","F9","F10",-68,-33,-115,-116,-68,-133

        If RetVal=-33
           Then Echo Normal
                Echo Off
                ShowPopup " Fun‡”es " CENTERED
                 "[F5]  ~O~bserva‡Æo          " : "Observa‡Æo                             " : "F5",
                 "[F9]  ~M~odo                " : " Ativa/Desativa modo c¢digo de barras  " : "F9",
                 "[F10] ~F~inalizar Lan‡amento" : "Finalizar Lan‡amento                   " : "F10",
                 "[F11] ~C~ancelar            " : "Cancela a Lista de Presentes           " : "F11",
                 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
        EndIf

        Switch
        Case Retval="F5" : 
             If [LPreseDc->Status]="FINALIZADO" Or [LPreseDc->Status]="CANCELADO" 
                Then If [LPreseDc->Status]="CANCELADO"
                        Then FastMsg("Lan‡amento CANCELADO!")
                        Else If ConfGeral("Lan‡amento j  foi finalizado, deseja realmente alterar a observa‡Æo:") 
                                Then Moveto "LPreseDc"
                                     OBSERVACAO()
                                     Moveto "Lpresedi" 
                             EndIf
                     EndIf 
                Else Moveto "LPreseDc"
                     OBSERVACAO()
                     Moveto "Lpresedi"
             EndIf
        Case Retval="F9":
             Del
             If [LPreseDc->Status]="FINALIZADO" Or [LPreseDc->Status]="CANCELADO" 
                Then FastMsg("Lan‡amento "+[LPreseDc->Status]+", fun‡Æo nÆo permitida!")
                     OPCHAVEI="CDC" 
                     Quitloop
             EndIf
             OPCHAVEI="CDB"
             CHAVEI=7
             Return              
        Case Retval="F10" Or RetVal=-68 :  
             Del
             If [LPreseDc->Status]="CANCELADO"
                Then Mensagem("Lan‡amento CANCELADO!")
                     QuitLoop
             EndIf
             If [LPreseDc->Status]<>"FINALIZADO" 
                Then If ConfGeral("Deseja realmente FINALIZAR este lan‡amento?")
                        Then If Gera_OF_Devolucao()
                                Then Moveto "LPreseDc"
                                     [Status]="FINALIZADO"       
                             EndIf 
                             If [Status]="FINALIZADO"
                                Then FACA_CHAVE  = False
                                     FACA_CHAVEI = False
                                     CHAVEC=9
                                     CHAVEI=9
                                     Return
                                Else Moveto "Lpresedi"
                                     QuitLoop
                             EnDIf   
                             
                     EndIf
                     Moveto "Lpresedi"
               Else FastMsg("Lan‡amento j  foi FINALIZADO!")      
             EndIf   
             QuitLoop
        Case Retval="F11" Or RetVal=-133 : 
             Del
             Switch
               Case [LPreseDc->Status]="CANCELADO" : 
                    Mensagem("Lan‡amento j  foi CANCELADO!")
                    QuitLoop
               Case Not Checa_Supervisor()         :
                    Mensagem("Permiss„o para CANCELAMENTO apenas para o supervisor!")
                    QuitLoop
             EndSwitch  
             GetRecord "LPresenC" [LPreseDc->Lancamento_Lista] To REG_LPRESENC
             If REG_LPRESENC["Status"]="FINALIZADO"
                Then Mensagem("Lista de Presentes "+[LPreseDc->Lancamento_Lista]+" j  foi FINALIZADO!")  
                     QuitLoop
             EndIf
             If [LPreseDc->Status]="FINALIZADO"
                Then MSG = "Deseja realmente CANCELAR este lan‡amento?"
                     If ConfGeral(MSG) 
                       Then ;Excluir OF de Devolu‡Æo antes de efetuar o cancelamento da OF
                            GetRecord "FaturaC" [LPreseDc->Numero da OF Devolucao] To REG_FATC
                            If RetVal
                               Then If Not IsBlank(REG_FATC["Numero Nota Gerada"])
                                       Then Mensagem("Este lan‡amento de devolu‡Æo nÆo pode ser cancelado.//"+
                                                     "A Ordem de Faturamento "+[LPreseDc->Numero da OF Devolucao]+
                                                     " gerada a partir deste lan‡amento n„o pode ser excluida!//"+
                                                     "J  Gerou Nota Fiscal N§ "+REG_FATC["Numero Nota Gerada"])
                                                     Moveto "Lpresedi"
                                                     QuitLoop
                                    EndIf
                            EndIf   
                            
                            Moveto "LPreseDc"
                            UnLockRecord
                            FormKey
                            
                            Moveto "FaturaR"
                            Moveto [Numero da OF]
                            Locate [LPreseDc->Numero da OF Devolucao]
                            If Retval
                               Then While [Numero da OF] = [LPreseDc->Numero da OF Devolucao]
                                      Del
                                    EndWhile
                                    UnLockRecord
                            EndIf
                                    
                            Moveto "FaturaI"
                            Moveto [Numero da OF]
                            Locate [LPreseDc->Numero da OF Devolucao]
                            If Retval
                               Then While [Numero da OF] = [LPreseDc->Numero da OF Devolucao]
                                      Estoque("Estorna")
                                      Del
                                    EndWhile
                                    UnLockRecord
                            EndIf
                            
                            Moveto "FaturaC"
                            Moveto [Numero da OF]
                            Locate [LPreseDc->Numero da OF Devolucao]
                            Grava_LogEx("Fatura") 
                            Del
                            UnLockRecord
                            
                            ;---- Ajusta a Lista de Presente -----------
                            Moveto "Lpresedi"
                            Moveto [Numero do Lancamento]
                            Locate [LPreseDc->Numero do Lancamento]
                            If ReTval
                               Then  While [Numero do Lancamento]=[LPreseDc->Numero do Lancamento]
                                      If [Quantidade_Devolvida]>0
                                         Then AUX_ITEM = [Codigo do Item] 
                                              Moveto "Lpreseni"
                                              Moveto [Numero do Lancamento]
                                              Locate [LPreseDc->Lancamento_Lista]
                                              If Retval
                                                 Then While [Numero do Lancamento]=[LPreseDc->Lancamento_Lista]
                                                        If [Codigo do Item]=AUX_ITEM
                                                           Then [Quantidade_Devolvida]=[Quantidade_Devolvida]-1  
                                                                If [Quantidade_Devolvida]=0 Then [Quantidade_Devolvida]=BlankNum() EndIf
                                                                UnLockRecord
                                                                QuitLoop
                                                        EndIf
                                                        Skip
                                                        If Eot() Then QuitLoop EndIf
                                                      EndWhile
                                              EndIf
                                                                                                    
                                              Moveto "Lpreserq"
                                              Moveto [Codigo de Barras COD128]
                                              Locate [Lpresedi->Codigo de Barras COD128]
                                              If ReTval
                                                 Then PosI=Search("DEV",[Status])
                                                      If PosI>0
                                                         Then [Status] = SubStr([Status],1,PosI-2)+SubStr([Status],PosI+4,Len([Status]))
                                                      EndIf
                                                      PosI=Search("[<< Lote ",[Justificativa])
                                                      PosF=Search(">>]",[Justificativa])
                                                      If PosI>0
                                                         Then [Justificativa] = SubStr([Justificativa],1,PosI-1)+
                                                                                SubStr([Justificativa],PosF+4,Len([Justificativa]))
                                                              If SubStr([Justificativa],Len([Justificativa]),Len([Justificativa])) = "\n" 
                                                                 Then [Justificativa] = SubStr([Justificativa],1,Len([Justificativa])-1)
                                                              EndIf
                                                      EndIf
                                                      UnLockRecord
                                              EndIf                                                         
                                      EndIf
                                      Moveto "Lpresedi"                                
                                      Skip
                                      If Eot() Then QuitLoop EndIf
                                    EndWhile 
                            EndIf               
                            
                            Moveto "LPreseDc" 
                            FormKey
                            IsLockRecord()     
                            
                            Moveto "LPreseDc"
                            [Status                ] = "CANCELADO"
                            [Numero da OF Devolucao] = ""
                            UnLockRecord
                            
                            Mensagem("Lan‡amento Cancelado!")
                            
                            FACA_CHAVE  = False
                            FACA_CHAVEI = False
                            CHAVEC=9
                            CHAVEI=9
                            Return
                     EndIf        
                Else FastMsg("Lan‡amento nÆo foi FINALIZADO para realizar o CANCELAMENTO!")      
             EndIf   
             QuitLoop               
        Case RetVal="PGDN":    
             Del
             If RecordStatus("New")=True 
                Then MENSAGEM("O lan‡amento deve ter pelo menos 1(um) item!")
                Else FACA_CHAVE  = False
                     FACA_CHAVEI = False
                     CHAVEC=9
                     CHAVEI=9
                     Return
             EndIf
        Case Retval="ESC": 
             Del
             If CHAVEC=1
                Then FACA_CHAVE  = True
                     FACA_CHAVEI = False  
                Else If ConfGeral("Deseja sair desta rotina ?")
                        Then CHAVEC=9
                             CHAVEI=9
                             FACA_CHAVE  = False
                             FACA_CHAVEI = False
                        Else QuitLoop      
                     EndIf        
             EndIf
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               PAGINA("Lpresedi","MR")
               ITEM = [Sequencia]
               Switch                                    
                 Case EDITAR="S" : Switch
                                      Case [LPreseDc->Status]="FINALIZADO" Or [LPreseDc->Status]="CANCELADO" :
                                           ImageRights ReadOnly
                                           SetaCorRegistro("Paginar")
                                           FastMsg("Lan‡amento "+[LPreseDc->Status]+", edi‡Æo nÆo permitida!")
                                      Case [LPreseDc->Status]="FINALIZADO" Or [LPreseDc->Status]="CANCELADO" : FastMsg("Edi‡Æo nÆo permitida!")
                                      OtherWise : If [LPreseDc->Status]="FINALIZADO" Or [LPreseDc->Status]="CANCELADO" 
                                                     Then ImageRights ReadOnly
                                                          SetaCorRegistro("Paginar")
                                                          FastMsg("Lan‡amento FINALIZADO, edi‡Æo nÆo permitida!")
                                                     Else FastMsg("Edi‡Æo nÆo permitida!")        
                                                  EndIf                            
                                    EndSwitch  
                 Case EXCLUIR="S" : Switch
                                      Case [LPreseDc->Status]="FINALIZADO" Or [LPreseDc->Status]="CANCELADO" : FastMsg("ExclusÆo nÆo permitida!")
                                      OtherWise : If QuerExcluir("")
                                                     Then Del
                                                          QuitLoop  
                                                  EndIf
                                    EndSwitch              
                                    ;If IsBlank([Codigo do Item]) 
                                    ;   Then If QuerExcluir("")
                                    ;           Then Del 
                                    ;        EndIf
                                    ;   Else FastMsg("ExclusÆo nÆo permitida!")       
                                    ;EndIf                                     
                 OtherWise        : QuitLoop
               EndSwitch
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ENTER":
             If Not Seta_Sequencia(ITEM,True)
                Then Del
                     QuitLoop
             EndIf
             ITEM=[]
             Del
             Locate NLANC,ITEM
             If Retval
                Then CHAVEI=0
                     CopyToArray REG_DIGITA_PESSOA_ITEM
                Else CHAVEI=1
                     End Down Down
                     [Sequencia              ] = ITEM
                     UnLockRecord
                     Locate NLANC,ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile      

EndProc ;CHAVEI()

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

Dados_QTD = 1

While True
  Moveto "Lpresedi"

  Moveto "Lpresedi"
  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  CHAVEI=1
  Opcao_Ver = False
  SetaCorRegistro("Editar")
  While True
    Item_Ins_Consulta=False

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

EndProc ;ChaveCdBar()   

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

TIT = "C¢digo de Barras -> Devolu‡Æo"

While True                  
      INICIO_DIALOG=True
      
      Echo Normal      
      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,LANCTOP
                   
;---- Verifica se c¢digo de barra j  foi lan‡ado anteriormente -----------------                   

MSG = ""
Del
Moveto "Lpresedi"
UnLockRecord

Moveto "LPreseDc"
LANCTOP = [Numero do Lancamento]
UnLockRecord
FormKey                   

Moveto "Lpresedi" 
Moveto [Codigo de Barras COD128] 
Locate Dados_Item 
If RetVal  
   Then While [Codigo de Barras COD128] = Dados_Item
          If LANCTOP<>[Numero do Lancamento]  
             Then 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 "+[Numero do Lancamento]+"!"
                          QuitLoop
                  EndIf 
             Else MSG = "C¢digo de Barras j  foi lan‡ado para o item "+[Codigo do Item]+" localizado na sequˆncia "+Strval([Sequencia])+" desta rela‡Æo de itens!"
                  QuitLoop       
          EndIf
          Skip
          If Eot() Then Quitloop EndIf
          Locate Next  Dados_Item
          If Not RetVal Then QuitLoop EndIf
        EndWhile         
EndIf

Moveto "Lpresedi" 
Moveto [Numero do Lancamento]
Locate LANCTOP 

Moveto "LPreseDc"
FormKey

Moveto "Lpresedi"
If MSG<>"" 
   Then Mensagem(MSG)
        Return False
EndIf              
                   
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))))

GetRecord "Lpreserq" CDBAR_LANCTO To REG_LANCTO
If RetVal
   Then SetaCorRegistro("Paginar")
        MSG=""
        Switch
          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+" nas requisi‡äes da lista de presente j  foi//CANCELADO"
          Case REG_LANCTO["Status"]="DEVOLVIDO" Or Search("DEV",REG_LANCTO["Status"])>0 :
               MSG = "O item do lan‡amento "+CDBAR_LANCTO+" nas requisi‡äes da lista de presente j  foi//DEVOLVIDO!"
          Case 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+" nas requisi‡äes da lista de presente ainda nÆo foi CONFERIDO!"     
        EndSwitch

        If MSG<>""
           Then If 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 PROCESSO="0"
                Moveto "Lpresedi"
                Home
                Moveto [Codigo do Item]
                Locate REG_LANCTO["Codigo do Item"]
                If Retval
                   Then While [Codigo do Item] = REG_LANCTO["Codigo do Item"]
                          If [Quantidade]-[Quantidade_Devolvida]>0
                             Then PROCESSO="1"
                                  [Quantidade_Devolvida   ]=[Quantidade_Devolvida]+1
                                  [Codigo de Barras COD128]=DADOS_ITEM
                                  QuitLoop
                             Else PROCESSO="2"     
                          EndIf
                          Skip
                          If Eot() Then QuitLoop EndIf
                          Locate Next REG_LANCTO["Codigo do Item"]
                          If Not RetVal Then QuitLoop EndIf
                        EndWhile
                EndIf 
                DADOS_ITEM = ""
                Switch
                  Case PROCESSO="0" : Mensagem("Item "+ REG_LANCTO["Codigo do Item"]+" referente ao lan‡amento "+
                                               REG_LANCTO["Numero do Lan‡amento"]+" nÆo foi localizado nesta rela‡Æo!")
                  Case PROCESSO="2" : Mensagem("Item "+ REG_LANCTO["Codigo do Item"]+" referente ao lan‡amento "+
                                               REG_LANCTO["Numero do Lancamento"]+" sem quantidade dispon¡vel para devolu‡Æo nesta rela‡Æo!")                                 
                EndSwitch
                
                If PROCESSO<>"1"
                   Then Return False
                EndIf
                
           Else MSG = ""
                Switch
                  Case CDBAR_DOCTO_NUMERO <> REG_LANCTO["Numero do Documento"] : 
                       MSG = "Lan‡amento "+CDBAR_LANCTO+" nas requisi‡äes da lista de presente 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+" nas requisi‡äes da lista de presente nÆo corresponde … s‚rie do documento "+CDBAR_DOCTO_SERIE+"!"
                  Case CDBAR_CODBARRA     <> REG_LANCTO["Codigo de Barras"]    :
                       MSG = "Lan‡amento "+CDBAR_LANCTO+" nas requisi‡äes da lista de presente nÆo corresponde ao c¢digo de barras "+CDBAR_CODBARRA+"!"
                EndSwitch
                Mensagem(MSG)
                Return False
        EndIf
   Else Mensagem("Lan‡amento "+CDBAR_LANCTO+" nÆo foi localizado nas requisi‡äes da lista de presente!")
        Return False      
EndIf

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(PARAM)
Private PARAM,REG_FATURAC,Tabela,CUSTO,MES_EST,ANO_EST

If PARAM<>"Estorna"           
   Then If [FaturaC->Atualiza Estoque]<>"S" Or IsBlank([FaturaI->Codigo do Item]) 
           Then Return
        EndIf
        If Not TipoItem_ControlaEstoque([FaturaI->Tipo do Item])
           Then Return 
        EndIf
        AUX_DATA = [FaturaC->Data de Emissao]
   Else If IsBlank([LPreseDc->Numero da OF Devolucao]) 
           Then Return 
        EndIf
        GetRecord "FaturaC" [LPreseDc->Numero da OF Devolucao] To REG_FATURAC
        AUX_DATA = REG_FATURAC["Data de Emissao"]
EndIf

Tabela = Table()

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

If PARAM<>"Estorna" 
   Then [Saldo Atual      ] = NDecimal([Saldo Atual]+[FaturaI->Quantidade],3)
        [Custo Total Atual] = NDecimal([Custo Total Atual]+NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
   Else [Saldo Atual      ] = NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)
        [Custo Total Atual] = NDecimal([Custo Total Atual]-NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
EndIf   

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

Moveto "FaturaI"
[Custo Medio Unitario]=CUSTO       
                
UnLockRecord
SaveTables
              
EndProc ;ESTOQUE()

;*******************************************************************************
;* Gera OF de Devolu‡Æo                                                        *
;*******************************************************************************
Proc Gera_OF_Devolucao()
Private Conta_Item,Aux_Item,OBS,MSG,AUX_EMPRESA,SEQ,ui,VALIDA_DADOS,Dados_Item,
        ACHOU_LANCTO,CDBAR_LANCTO,CDBAR_CODBARRA,CDBAR_DOCTO_NUMERO,CDBAR_DOCTO_SERIE,
        EMPRESA,REG_LANCTO,REG_NOTA,Contador,PESSOA_CODIGO,DATA,PAGTO_CONDICAO,PAGTO_FORMA,
        TRANSPORTADOR_CODIGO,ITEM_CODIGO,QUANTIDADE,VALOR_DESCONTO_ITEM,VALOR_MERCADORIA,
        VALOR_MERCADORIA_LIQUIDO,VALOR_NOTA_FISCAL,VENDEDOR_CODIGO,OF,MSG_DEVOLUCAO,AJUSTA_OF,
        VR_MERC_LIQ,VR_NF

VR_MERC_LIQ = 0
VR_NF       = 0

MSG_DEVOLUCAO = ""
AJUSTA_OF     = ""
            
Conta_Item = 0
Moveto "Lpresedi"
Scan
 If [Quantidade_Devolvida]>0
    Then Conta_Item = Conta_Item + 1
 EndIf
EndScan
If Conta_Item=0 Then Return True EndIf

;Verificar na Empresa em 26/09/2019
;- PESSOA_CODIGO
;- VENDEDOR_CODIGO

Moveto "LPreseDc"
UnLockRecord                   
FormKey
                   
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

MSG         = ""
AUX_EMPRESA = "***"
SEQ         = 0

Conta_Item  = 0
DynArray Aux_Item[]
   
While True
  For ui From 1 To 2
    If ui=1
       Then VALIDA_DADOS = True
       Else VALIDA_DADOS = False
    EndIf   
    Contador = 0
    Moveto "Lpresedi" Home
    Scan For [Numero do Lancamento] = NLANC
      Dados_Item         = [Codigo de Barras COD128]
      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))))
      EMPRESA            = ""
      
      If IsBlank(Dados_Item) Then Loop EndIf
      
      GetRecord "Lpreserq" CDBAR_LANCTO To REG_LANCTO
      If RetVal
         Then EMPRESA = REG_LANCTO["Codigo da Empresa"]
              If AUX_EMPRESA = "***"
                 Then AUX_EMPRESA = REG_LANCTO["Codigo da Empresa"]  
              EndIf
              If AUX_EMPRESA<>EMPRESA
                 Then MSG = "H  mais de uma empresa lan‡ada nas requisi‡äes da lista de presente referente aos itens desta rela‡Æo!"
                      QuitLoop
              EndIf     
      EndIf
      
      GetRecord "LPresenC" REG_LANCTO["Lancamento_Lista"] To REG_LPRESENC
      If RetVal
         Then ENTREGA_CODIGO   = REG_LPRESENC["Codigo"]
              ENTREGA_NOME     = REG_LPRESENC["Nome Fantasia EmitDest"]
              ENTREGA_VENDEDOR = REG_LPRESENC["Codigo do Representante"]
              ENTREGA_NOMVEND  = REG_LPRESENC["Nome Fantasia Represent"]
         Else ENTREGA_CODIGO   = ""
              ENTREGA_NOME     = ""
              ENTREGA_VENDEDOR = ""
              ENTREGA_NOMVEND  = ""
      EndIf
      
      GetRecord "\\Sistemas\\Vendas\\NotaC" REG_LANCTO["Codigo da Empresa"],REG_LANCTO["Numero do Documento"],REG_LANCTO["Serie do Documento"] To REG_NOTA
      If Not RetVal
         Then MSG = "Documento "+REG_LANCTO["Numero do Documento"]+"/"+REG_LANCTO["Serie do Documento"]+" referente ao lan‡amento "+CDBAR_LANCTO+
                    " das requisi‡äes da lista de presente nÆo foi localizado no sistema!"
              QuitLoop
      EndIf
      
      If VALIDA_DADOS Then Loop EndIf
      
      Contador = Contador + 1
      If Contador = 1 
         Then OBS = OBS + "[** LOTE DEVOLUCAO: "+NLANC+" / LISTA DE PRESENTE: "+REG_LANCTO["Lancamento_Lista"]+" - RQ: "
              OBS = OBS + REG_LANCTO["Numero do Lancamento"]
         Else OBS = OBS + ", " + REG_LANCTO["Numero do Lancamento"]     
      EndIf
      
      PESSOA_CODIGO = "0010" ;CONSUMIDOR FINAL

      PESSOA_CODIGO            = ENTREGA_CODIGO
      DATA                     = Today()
      PAGTO_CONDICAO           = "03"
      PAGTO_FORMA              = "TC"
      VENDEDOR_CODIGO          = ENTREGA_VENDEDOR
      TRANSPORTADOR_CODIGO     = "0001"
      
      ITEM_CODIGO              = REG_LANCTO["Codigo do Item"     ] 
      QUANTIDADE               = REG_LANCTO["Quantidade"         ]
      VALOR_DESCONTO_ITEM      = REG_LANCTO["Valor Desconto Item"]
      VALOR_MERCADORIA         = REG_LANCTO["Preco Unitario"     ]
      VALOR_MERCADORIA_LIQUIDO = VALOR_MERCADORIA - VALOR_DESCONTO_ITEM
      VALOR_NOTA_FISCAL        = VALOR_MERCADORIA_LIQUIDO
      
      VR_MERC_LIQ              = VR_MERC_LIQ + VALOR_MERCADORIA_LIQUIDO  
      VR_NF                    = VR_NF + VALOR_NOTA_FISCAL      
      
      If Contador = 1 
         Then 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
             ;[Numero do Pedido          ] = REG_NOTA["Numero do Pedido"] 
              [Sistema Gerador           ] = "RQ"
              [Tipo de Pagamento         ] = "O"
              [Frete por Conta           ] = "0"
              Controle_Dia()
              UnLockRecord 
              SaveTables  
      EndIf
      
      SEQ = SEQ + 1
      Moveto "\\Sistemas\\Vendas\\FaturaI"
      End Down
      [Numero da OF            ] = OF
      [Item da OF              ] = SEQ
      [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
      
      Moveto "Lpreserq"
      Moveto [Codigo de Barras COD128]
      Locate Dados_Item
      If ReTval
         Then If [Status]<>"" Then [Status] = [Status] + "/" EndIf
              [Status       ] = [Status] + "DEV"
              If [Justificativa]<>"" Then [Justificativa] = [Justificativa] + "\n" EndIf
              [Justificativa] = [Justificativa] + "[<< Lote de Devolu‡Æo: "+NLANC+" / "+OF+" -> Ordem de Faturamento >>]"
              UnLockRecord 
              SaveTables                                    
      EndIf  
      
      Aux_Item[SEQ] = ITEM_CODIGO 
      
      ;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(REG_LANCTO["Serie do Documento"],1,1)="X"
                 Then ECF_NUMERO = AlinhM(StrVal(NumVal(REG_LANCTO["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   
              
              PROCESSA=True
              Moveto "\\Sistemas\\Vendas\\FaturaR"
              Moveto [Numero da OF]
              Locate OF
              If RetVal
                 Then While [Numero da OF]=OF
                        If [Data_Documento  ] = REG_LANCTO["Data do Documento"] And
                           [Numero_Documento] = REG_LANCTO["Numero do Documento"]
                           Then If (ECF_SERIE<>"" And [Numero_ECF] = ECF_NUMERO And [Numero_Serie_ECF] = ECF_SERIE) Or 
                                   ([Serie_Documento] = REG_LANCTO["Serie do Documento"])
                                   Then PROCESSA=False
                                        QuitLoop
                                EndIf             
                        EndIf        
                        Skip
                        If Eot() Then QuitLoop EndIf
                      EndWhile
              EndIf     
              
              If PROCESSA
                 Then End Down
                      [Numero da OF            ] = OF
                      [Sequencia               ] = SEQ
                      [IND_EMIT                ] = "0"
                      [Modelo_Documento        ] = MODELO
                      [Data_Documento          ] = REG_LANCTO["Data do Documento"  ]
                      [Numero_Documento        ] = REG_LANCTO["Numero do Documento"]
                      If ECF_SERIE<>""
                         Then [Numero_ECF              ] = ECF_NUMERO
                              [Numero_Serie_ECF        ] = ECF_SERIE
                         Else [Serie_Documento         ] = REG_LANCTO["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
      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,SEQ
      
      Moveto "\\Sistemas\\Vendas\\FaturaC"
      Moveto [Numero da OF]
      Locate OF
      
      Estoque("Atualiza")
    
      Moveto "Lpresedi"
    EndScan
    If ui=2
       Then Moveto "\\Sistemas\\Vendas\\FaturaC"
            Moveto [Numero da OF]
            Locate OF
            [Observacao na Nota Fiscal] = OBS +" **]"
            [Valor Mercadoria         ] = VR_MERC_LIQ
            [Valor Mercadoria Liquido ] = VR_MERC_LIQ
            [Valor Nota Fiscal        ] = VR_NF
            [Valor TC                 ] = VR_NF  
            UnLockRecord
            SaveTables
            
            ;---- Atualiza na Lista de Presente as Devolu‡äes realizadas -------
            Moveto "Lpreseni"
            Moveto [Numero do Lancamento]
            Locate REG_LANCTO["Lancamento_Lista"]
            If Retval
               Then While [Numero do Lancamento]=REG_LANCTO["Lancamento_Lista"]
                      ACHOU_ITEM=False
                      For po From 1 To DynArraySize(Aux_Item)        
                        If [Codigo do Item]=Aux_Item[po]
                           Then ACHOU_ITEM=True
                                Aux_Item[po]=""
                                QuitLoop
                        EndIf
                      EndFor
                      If ACHOU_ITEM            
                         Then [Quantidade_Devolvida]=[Quantidade_Devolvida]+1
                         Else Skip 
                      EndIf
                      If Eot() Then QuitLoop EndIf
                    EndWhile
            EndIf
            
            MSG_DEVOLUCAO = "Ordem de Faturamento de devolu‡Æo "+OF+" gerada no sistema!"
            AJUSTA_OF     = OF
    EndIf        
  Endfor
  QuitLoop
EndWhile  

Moveto "LPreseDc"                 
FormKey

[Numero da OF Devolucao] = AJUSTA_OF
Moveto "Lpresedi"
If MSG <> ""
   Then Mensagem(MSG)
        Return False
EndIf

Moveto "Lpresedi"
Home
While True
  If [Quantidade_Devolvida]=BlankNum()
      Then Del
      Else Skip
  EndIf
  If Eot() Then QuitLoop EndIf
EndWhile

Moveto "LPreseDc"
Mensagem(MSG_DEVOLUCAO)
Return True

EndProc ;Gera_OF_Devolucao()

;*******************************************************************************
;* Rotina para Digitacao das Cidades                                           *
;*******************************************************************************
Proc DIGITAI()
Private AUX_QTD_ENT

If IsBlank([Codigo do Item])
   Then FastMsg("NÆo ‚ poss¡vel inclusÆo de item!")
        Del
        CHAVEI=8
        Return
EndIf   

Moveto "LPreseDc"
SetaCorRegistro("Padrao")    

Moveto "Lpresedi"       
SetaCorRegistro("Editar")   

Moveto [Quantidade_Devolvida]
AUX_QTD_ENT = [Quantidade_Devolvida]
        
        
While True
  TECLA=" Esc=Retornar  "

  Switch
    Case Field()="Quantidade_Devolvida" : MSGCAMPO="Quantidade a ser devolvida do item"
    Case Field()="Quantidade_Entregue"  : MSGCAMPO="Quantidade a ser entregue do item"
    OtherWise                           : MSGCAMPO=Field() 
  EndSwitch
    
  Prompt TECLA
  Wait Field
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F4","F7","F8","F9",-33
  
  Switch 
  Case RetVal="F1": If Field()="Codigo do Item" Then CONSULTAF1() EndIf
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEI=0
          Then Mensagem("N„o ‚ poss¡vel excluir este registro!")
               Loop
       EndIf
  Case Retval="ESC" :   
       Switch     
         Case Field()="Quantidade_Entregue"  Or
              Field()="Quantidade_Devolvida"  : If CHAVEI=1 
                                                   Then CHAVEI=8
                                                        Del
                                                        QuitLoop
                                                   Else [Quantidade_Devolvida]=AUX_QTD_ENT   
                                                        CHAVEI=8
                                                        QuitLoop         
                                                EndIf  
       EndSwitch
  Case Retval="ENTER" :
       Switch
         Case Field()="Quantidade_Entregue"  : 
              Switch
                Case AUX_QTD_ENT>0 And IsBlank([Quantidade_Entregue]) :
                     MSG =       Completa("QUANTIDADE ANTERIOR.: "+Format("W8",AUX_QTD_ENT),64," ")+"//"
                     MSG = MSG + Completa("QUANTIDADE INFORMADA: ",64," ")+"//"
                     MSG = MSG + Completa("Deseja continuar sem informar quantidade entregue deste item?",64," ")  
                     If Not ConfGeral(MSG)
                        Then [Quantidade_Entregue] = AUX_QTD_ENT
                     EndIf
                     CHAVEI=8   
                     QuitLoop
                Case [Quantidade_Entregue]>[Quantidade] :
                     MSG =       Completa("QUANTIDADE DO ITEM...: "+Format("W8",[Quantidade]),64," ")+"//"
                     MSG = MSG + Completa("QUANTIDADE A ENTREGAR: "+Format("W8",[Quantidade_Entregue]),64," ")+"////"
                     MSG = MSG + Completa("A quantidade a ser entregue ‚ maior que a quantidade deste item!",64," ")
                     Mensagem(MSG)
                     [Quantidade_Entregue] = AUX_QTD_ENT
                     Loop
                 OtherWise :
                     CHAVEI=8   
                     QuitLoop    
              EndSwitch
         Case Field()="Quantidade_Devolvida" : 
              Switch
                Case AUX_QTD_ENT>0 And IsBlank([Quantidade_Devolvida]) :
                     MSG =       Completa("QUANTIDADE ANTERIOR.: "+Format("W8",AUX_QTD_ENT),64," ")+"//"
                     MSG = MSG + Completa("QUANTIDADE INFORMADA: ",64," ")+"//"
                     MSG = MSG + Completa("Deseja continuar sem informar quantidade devolvida deste item?",64," ")  
                     If Not ConfGeral(MSG)
                        Then [Quantidade_Devolvida] = AUX_QTD_ENT
                     EndIf
                     CHAVEI=8   
                     QuitLoop
                Case [Quantidade_Devolvida]>[Quantidade] :
                     MSG =       Completa("QUANTIDADE DO ITEM...: "+Format("W8",[Quantidade]),64," ")+"//"
                     MSG = MSG + Completa("QUANTIDADE A DEVOLVER: "+Format("W8",[Quantidade_Devolvida]),64," ")+"////"
                     MSG = MSG + Completa("A quantidade a ser devolvida ‚ maior que a quantidade deste item!",64," ")
                     Mensagem(MSG)
                     [Quantidade_Devolvida] = AUX_QTD_ENT
                     Loop
                 OtherWise :
                     CHAVEI=8   
                     QuitLoop    
              EndSwitch  
       EndSwitch
  EndSwitch
EndWhile

EndProc ;DIGITA_PESSOA_ITEM() 

;*******************************************************************************
;* Rotina para Digitacao da Observacao do Cliente                              *
;*******************************************************************************
Proc OBSERVACAO()
Private CampAnt

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

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

If IsBlank([Observacao])
    Then Del
    Else UnLockRecord
EndIf

Moveto Field CampAnt

EndProc    ; (Observacao)

;*******************************************************************************
;* Carrega Array Lista de Itens da Cliente                                     *
;*******************************************************************************
Proc Imprimir_Item_Lista_Presente()
Private ii,CONTADOR,Conta_Array,AUX_ARRAY

If ORDENACAO="ORD_PR"
   Then LEN_TITULO_INICIAL = 4
        LEN_TITULO_FINAL   = 36
   Else LEN_TITULO_INICIAL = 1
        LEN_TITULO_FINAL   = 20
EndIf   

Conta_Array = 0
Array AUX_ARRAY[ArraySize(ARRAY_ITEM)]

For ui From 1 To DynArraySize(ARRAY_DEPARTAMENTO)
  DEPARTAMENTO = ARRAY_DEPARTAMENTO[ui]
  For ii From 1 To ArraySize(ARRAY_ITEM)
    If DEPARTAMENTO=Ltrim(Rtrim(SubStr(ARRAY_ITEM[ii],1,LEN_TITULO_FINAL)))
       Then Conta_Array = Conta_Array + 1 
            AUX_ARRAY[Conta_Array] = ARRAY_ITEM[ii]
    EndIf        
  Endfor
EndFor  

Release Vars ARRAY_ITEM
Array ARRAY_ITEM[ArraySize(AUX_ARRAY)]
For ii From 1 To ArraySize(AUX_ARRAY)
  ARRAY_ITEM[ii] = AUX_ARRAY[ii]
EndFor

Release Vars AUX_ARRAY
DynArray ARRAY_IMPRESSAO[]

If ORDENACAO="ORD_PR"
   Then LEN_TITULO_FINAL = LEN_TITULO_FINAL - 3 
EndIf

MUDOU_DEPARTAMENTO = "***"
CONTA_LINHA_ITEM   = 0
For ii From 1 To ArraySize(ARRAY_ITEM)
  If MUDOU_DEPARTAMENTO<>Ltrim(Rtrim(SubStr(ARRAY_ITEM[ii],LEN_TITULO_INICIAL,LEN_TITULO_FINAL)))
     Then If MUDOU_DEPARTAMENTO<>"***"
             Then CONTA_LINHA_ITEM = CONTA_LINHA_ITEM + 1
                  ARRAY_IMPRESSAO[CONTA_LINHA_ITEM] = AlinhM(StrVal(CONTA_LINHA_ITEM),3)+""
          EndIf
          MUDOU_DEPARTAMENTO = Ltrim(Rtrim(SubStr(ARRAY_ITEM[ii],LEN_TITULO_INICIAL,LEN_TITULO_FINAL)))
          CONTA_LINHA_ITEM   = CONTA_LINHA_ITEM + 1
          ARRAY_IMPRESSAO[CONTA_LINHA_ITEM] = AlinhM(StrVal(CONTA_LINHA_ITEM),3)+"DEP:"+Format("W"+StrVal(LEN_TITULO_FINAL),MUDOU_DEPARTAMENTO)
  EndIf
  CONTA_LINHA_ITEM = CONTA_LINHA_ITEM+1       
  ARRAY_IMPRESSAO[CONTA_LINHA_ITEM] = AlinhM(StrVal(CONTA_LINHA_ITEM),3)+SubStr(ARRAY_ITEM[ii],LEN_TITULO_INICIAL+1,Len(ARRAY_ITEM[ii]))   
EndFor

Imprimir_Pagina()

EndProc ;Imprimir_Item_Lista_Presente()

;*******************************************************************************
;* Imprime Cabe‡alho                                                           *
;*******************************************************************************
Proc Cabecalho(PARAM)

;ENTREGA_LANCTO_LISTA
;ENTREGA_CODIGO
;ENTREGA_NOME
;ENTREGA_DATA
;ENTREGA_STATUS
;ENTREGA_OBS
 
Print File ARQIMP Chr(27)+Chr(77) + "\n"
Print File ARQIMP "\014"+CI_INEG+Spaces(32)+""+Format("W14,AL","ENTREGA "+NLANC)+CI_FNEG+"\n"
Print File ARQIMP CI_10CPP+CI_F_TIMES
Print File ARQIMP Chr(27)+Chr(77) + "\n\n\n"
Print File ARQIMP Spaces(14)+Format("W20",NLANC)+Spaces(24)+Format("W21",ENTREGA_LANCTO_LISTA)+Format("D13",ENTREGA_DATA)+"\n\n"
Print File ARQIMP Spaces(14)+Format("W25",ENTREGA_CODIGO+" "+ENTREGA_NOME)+"\n\n"
If PARAM = "Itens"
   Then Print File ARQIMP Spaces(14)+Format("W20",ENTREGA_STATUS)+"\n\n"
        Print File ARQIMP Spaces(14)+Format("W77",ENTREGA_OBS)+"\n\n" 
EndIf
Print File ARQIMP Chr(27)+Chr(77) + "\n\n\n\n"
Print File ARQIMP CI_10CPP+CI_F_TIMES

LINHA_CABECALHO = 0

EndProc ;Cabecalho()

;*******************************************************************************
;* Imprime Lista Presente                                                      *
;*******************************************************************************
Proc Imprimir_Pagina()

Cabecalho("Itens")

CONTA_LINHA = 0
CONTADOR    = 0
DEPARTAMENTO=False
For ii From 1 To DynArraySize(ARRAY_IMPRESSAO)
  If DEPARTAMENTO Then DEPARTAMENTO =  False EndIf
  LINHA = Substr(ARRAY_IMPRESSAO[ii],4,Len(ARRAY_IMPRESSAO[ii]))
  If SubStr(LINHA,1,4)="DEP:"
     Then DEPARTAMENTO =  True
          LINHA_DEP = Substr(ARRAY_IMPRESSAO[ii],8,Len(ARRAY_IMPRESSAO[ii]))
  EndIf    
  If DEPARTAMENTO 
     Then If CONTADOR+2>(45-LINHA_CABECALHO)
             Then CONTADOR    = 0
                  Print File ARQIMP Spaces(82)+CI_INEG+">> Continua"+CI_FNEG
                  Print File ARQIMP "\f"
                  Cabecalho("Itens")
          EndIf
          CONTADOR    = CONTADOR + 1
          CONTA_LINHA = CONTA_LINHA + 1
          Print File ARQIMP CI_INEG + LINHA_DEP + CI_FNEG + "\n"
     Else CONTA_LINHA = CONTA_LINHA + 1
          LINHA       = Substr(ARRAY_IMPRESSAO[ii],LEN_TITULO_FINAL+3,Len(ARRAY_IMPRESSAO[ii]))
          Print File ARQIMP LINHA+"\n"
  EndIf 
  CONTADOR = CONTADOR + 1
  If CONTADOR>(45-LINHA_CABECALHO)
     Then CONTADOR     = 0
          Print File ARQIMP Spaces(82)+CI_INEG+">> Continua"+CI_FNEG
          Print File ARQIMP "\f"
          Cabecalho("Itens")
          
          IMPRIME_DEPARTAMENTO=True
          If IsAssigned(ARRAY_IMPRESSAO[ii+1])
             Then AUX_LINHA = Substr(ARRAY_IMPRESSAO[ii+1],4,Len(ARRAY_IMPRESSAO[ii+1]))
                  If SubStr(AUX_LINHA,1,4)="DEP:"
                     Then IMPRIME_DEPARTAMENTO=False
                  EndIf    
          EndIf
          
          If IMPRIME_DEPARTAMENTO
             Then CONTADOR    = CONTADOR + 1
                  CONTA_LINHA = CONTA_LINHA + 1
                  Print File ARQIMP CI_INEG + LINHA_DEP + CI_FNEG + "\n"
          EndIf        
  EndIf   
Endfor

If TOTAL_ITEM>1
   Then CONTA_LINHA = CONTA_LINHA + 2
        Print File ARQIMP "\n"
        Print File ARQIMP CI_INEG + Format("W59",StrVal(TOTAL_ITEM)+" Itens") + Format("W5",TOTAL_QTD) +" "+ Format("W10.2,EIC",TOTAL_PRECO)  + CI_FNEG + "\n"
EndIf

;Print File ARQIMP "\f"
                                   
EndProc ;Imprimir_Pagina()

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

PARAM_NITENS = 25

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

DynArray ARRAY_DEPARTAMENTO[]

AUX_DEPART   = "***"
PULA_PAGINA  = False
PAGINA       = 1 
CONTA_DEPART = 0

ENTREGA_LANCTO_LISTA = [LPreseDc->Lancamento_Lista    ] 
ENTREGA_DATA         = [LPreseDc->Data                ] 
ENTREGA_STATUS       = [LPreseDc->Status              ] 
ENTREGA_OBS          = [LPreseDc->Observacao          ]

GetRecord "LPresenC" ENTREGA_LANCTO_LISTA To REG_LPRESENC
If RetVal
   Then ENTREGA_CODIGO = REG_LPRESENC["Codigo"]
   Else ENTREGA_CODIGO = ""
EndIf

GetRecord "\\Sistemas\\Cadastro\\Destinat" ENTREGA_CODIGO To REG_DESTINAT
If RetVal
   Then ENTREGA_ENDERECO = REG_DESTINAT["Endereco"]
   Else ENTREGA_ENDERECO = "NAO LOCALIZADO NO CADASTRO" 
EndIf

GetRecord "LPresenC" ENTREGA_LANCTO_LISTA To REG_LPRESENC
If RetVal
   Then ENTREGA_NOME           = REG_LPRESENC["Nome Fantasia EmitDest" ]
        ENTREGA_COD_VEND       = REG_LPRESENC["Codigo do Representante"]
        ENTREGA_NOM_VEND       = REG_LPRESENC["Nome Fantasia Represent"]
        ENTREGA_DATA_EVENTO    = REG_LPRESENC["Data_Evento"            ]
   Else ENTREGA_NOME           = ""          
        ENTREGA_COD_VEND       = ""
        ENTREGA_NOM_VEND       = ""
        ENTREGA_DATA_EVENTO    = BlankDate()
EndIf  

Do_it!
ClearAll

{Ask} {Lpresedi} Check
Moveto [Numero do Lancamento] TypeIn "~NLANC"
Do_it!
ClearAll

CRIAR_TABELA = False
Adiciona_Campo("Answer","Ordena(A36)")

Tabela=Cria_Temp(PrivDir())
Copy "Answer" Tabela 
          
If ORDENACAO="ORD_PR"
   Then Coedit Tabela
        Scan
          Switch
            Case [Preco_Unitario]<=50                          : [Ordena] = "01 GRUPO: ATE R$ 50,00"
            Case [Preco_Unitario]>50 And [Preco_Unitario]<=100 : [Ordena] = "02 GRUPO: DE  R$ 50,00 ATE R$ 100,00"
            OtherWise                                          : [Ordena] = "03 GRUPO: ACIMA DE R$ 100,00"     
          EndSwitch  
        EndScan
        Do_it!
        ClearAll     
        
        {Ask} TypeIn Tabela Enter
        Moveto [Ordena] Check
        Do_it!
        ClearAll
        
        CONTA_ITEM = 0
        View NOWINDOW "Answer"
        Scan
          CONTA_ITEM = CONTA_ITEM + 1
          ARRAY_DEPARTAMENTO[CONTA_ITEM] = [Ordena]
        EndScan
        ClearAll
        
   Else {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item           ] typeIn "_Ite"
        Moveto [Descricao do Departamento] TypeIn "_Dep"
        {Ask} TypeIn Tabela Enter
        Moveto [Codigo do Item           ] typeIn "_Ite"
        Moveto [Ordena                   ] TypeIn "Changeto _Dep"
        Do_it!
        ClearAll        
EndIf   

If OPCAO_IMPRESSAO="ITENS_A_SER_ENTREGUES"
   Then {Ask} TypeIn Tabela Enter Check
        Moveto [Quantidade_Entregue] TypEIn "Blank"
        Do_it!
        ClearAll
   Else {Ask} TypeIn Tabela Enter Check
        Moveto [Quantidade_Entregue] TypeIn ">0"
        Do_it!
        ClearAll 
EndIf

If IsEmpty("Answer")
   Then Mensagem("NÆo h  registros a processar!")
        Abre_Tabelas()
        PickForm FORM_MANUTENCAO
        Moveto [Numero do Lancamento]
        Locate NLANC
        Return
   Else Copy "Answer" Tabela
        Sort Tabela On "Ordena"
        ClearAll
EndIf   

TOTAL_ITEM  = 0
TOTAL_QTD   = 0
TOTAL_PRECO = 0

CONTA_ITEM = 0
Array ARRAY_ITEM[NRecords(Tabela)]

View NOWINDOW "Lpresedi"
CoEdit Tabela
Scan 
  Barra(NRecords(Tabela), RecNo())
  Aguarde("Aguarde, imprimindo lista de itens "+BARRA_STRING)
  
  GetRecord "Lpresedi" [Numero do Lancamento],[Sequencia] To REG_Lpresedi
  If Not RetVal Then Loop EndIf
  
  ;---- Dados do Item -------------------------------------------------
  Lpresedi_SEQ         = REG_Lpresedi["Sequencia"           ]
  Lpresedi_ITEM        = REG_Lpresedi["Codigo do Item"      ]
  Lpresedi_ITEM_DESC   = REG_Lpresedi["Descricao do Item"   ]
  Lpresedi_ITEM_UN     = REG_Lpresedi["Unidade"             ]
  Lpresedi_CDBARRA     = REG_Lpresedi["Codigo de Barras"    ]
  Lpresedi_QTD         = REG_Lpresedi["Quantidade"          ]
  Lpresedi_QTD_ENT     = REG_Lpresedi["Quantidade_Entregue" ]
  Lpresedi_PRECO       = REG_Lpresedi["Preco_Unitario"      ]
  
  GetRecord "\\Sistemas\\Estoque\\Itens" Lpresedi_ITEM To REG_ITEM
  If Not RetVal
     Then Mensagem("Item "+Lpresedi_ITEM+" nÆo localizado no cadastro de itens!")
          Loop
     Else DEPARTAMENTO = Ltrim(Rtrim(REG_ITEM["Descricao do Departamento"]))
          GRUPO        = REG_ITEM["Descricao do Grupo"]
  EndIf

  If DEPARTAMENTO="" Then DEPARTAMENTO = "OUTROS" EndIf

  ;----- Verifica os Departamentos ----------------------------------
  If AUX_DEPART<>DEPARTAMENTO And  ORDENACAO<>"ORD_PR" ;Ordena por Faixa de Pre‡o
     Then ACHOU_DEPART = False
          AUX_DEPART = DEPARTAMENTO
          For ii From 1 To DynArraySize(ARRAY_DEPARTAMENTO)
            If ARRAY_DEPARTAMENTO[ii]=DEPARTAMENTO
               Then ACHOU_DEPART = True
                    QuitLoop
            EndIf
          EndFor
          If Not ACHOU_DEPART
             Then CONTA_DEPART = CONTA_DEPART + 1
                  ARRAY_DEPARTAMENTO[CONTA_DEPART] = DEPARTAMENTO
          EndIf
  Endif
  
  If ORDENACAO="ORD_PR"
     Then DEPARTAMENTO = [Ordena]
  EndIf       

 ;Item                                      UN  Cod.Barras     Qtd        Qtd Entregue PrUnitario 
 ;----------------------------------------- -- ------------- ------------ ------------ ---------- 
 ;1234567890_123456789012345678901234567890_12_1234567890123_9.999.999.99_9.999.999.99_999.999.99 
   
  If OPCAO_IMPRESSAO="ITENS_A_SER_ENTREGUES"
     Then Lpresedi_QTD_ENT = Lpresedi_QTD
  EndIf    
  
  CONTA_ITEM = CONTA_ITEM + 1
  If ORDENACAO="ORD_PR"
     Then ARRAY_ITEM[CONTA_ITEM] = Format("W36",DEPARTAMENTO)
     Else ARRAY_ITEM[CONTA_ITEM] = Format("W20",DEPARTAMENTO)
  EndIf
  ARRAY_ITEM[CONTA_ITEM] = ARRAY_ITEM[CONTA_ITEM] +   Format("W10",Lpresedi_ITEM)+" "+
                                                      Format("W30",Lpresedi_ITEM_DESC)+" "+
                                                      Format("W2",Lpresedi_ITEM_UN)+" "+
                                                      Format("W13",Lpresedi_CDBARRA)+" "+
                                                      Format("W5",Lpresedi_QTD_ENT)+" "+
                                                      Format("W10.2,EIC",Lpresedi_PRECO)
                                                      ;Format("W5",Lpresedi_QTD_COMPRA)+" "+
                                                      ;Format("W5",Lpresedi_QTD_DEVOL)+" "+
                                                      ;Format("W5",Lpresedi_QTD_ENT)+" "+
                                                      ;Format("W5",Lpresedi_QTD_CONF)+" "+
                                                      ;Format("W13",Lpresedi_ITEM_STATUS)+" "+
                                                      ;Format("D13",Lpresedi_DATA_ENT) 
                                                      ;Format("W8",Lpresedi_ITEM_STATUS)
  TOTAL_ITEM  = TOTAL_ITEM + 1
  TOTAL_QTD   = TOTAL_QTD + Lpresedi_QTD_ENT
  TOTAL_PRECO = TOTAL_PRECO + Lpresedi_PRECO
  
  Moveto Tabela
EndScan
Do_it!
ClearAll

If TOTAL_ITEM=0  Then TOTAL_ITEM=BlankNum()  EndIf
If TOTAL_QTD=0   Then TOTAL_QTD=BlankNum()   EndIf
If TOTAL_PRECO=0 Then TOTAL_PRECO=BlankNum() EndIf

Imprimir_Item_Lista_Presente()
If CONTA_LINHA+3<=PARAM_NITENS
   Then IMPRIME_COMPROVANTE_QUEBRA=False
        Copia_Imagem("Entrega_Comprovante")
        For ii From CONTA_LINHA To PARAM_NITENS
          Print File ARQIMP "\n"
        EndFor  
        Imprimir_Comprovante("")
   Else IMPRIME_COMPROVANTE_QUEBRA=True 
        Copia_Imagem("Entrega")     
EndIf   
ImpriArq(ARQIMP)
Deleta_Arquivo(ARQIMP)

If IMPRIME_COMPROVANTE_QUEBRA
   Then Imprimir_Comprovante("QUEBRA_PAGINA")
        ImpriArq(ARQIMP)
        Deleta_Arquivo(ARQIMP)        
EndIf
           
Abre_Tabelas()
PickForm FORM_MANUTENCAO
Moveto [Numero do Lancamento]
Locate NLANC

Moveto "LPreseDc"
SetaCorRegistro("Editar")

Release Vars PRESENTE_CODIGO,Lpresedi_CODIGO,Lpresedi_SEQ,Lpresedi_ITEM,Lpresedi_ITEM_DESC,Lpresedi_ITEM_UN,
             Lpresedi_CDBARRA,Lpresedi_QTD,Lpresedi_QTD_COMPRA,Lpresedi_QTD_DEVOL,Lpresedi_QTD_ENT,Lpresedi_QTD_CONF,
             Lpresedi_DATA_ENT,Lpresedi_ITEM_STATUS,PRESENTE_NOME,PRESENTE_DATA,PRESENTE_STATUS,ENTREGA_OBS,PRESENTE_USUARIO
                       
EndProc ;Seta_Lista_Itens()

;*******************************************************************************
;* Imprime Comprovante                                                         *
;*******************************************************************************
Proc Imprimir_Comprovante(PARAM)
Private PARAM

;18 Linhas

If PARAM="QUEBRA_PAGINA"
   Then ARQIMP = PrivDir()+"LCOMP.Txt"
        If IsFile(ARQIMP)
           Then Deleta_Arquivo(ARQIMP)
        EndIf
        
        Copia_Imagem("Comprovante")
        Cabecalho("Comprovante")
EndIf

Print File ARQIMP CI_INEG+"\n\n"
Print File ARQIMP CI_10CPP+CI_F_TIMES
Print File ARQIMP Spaces(4)+"     Total Itens... "+Format("W10",TOTAL_ITEM)+"\n"
Print File ARQIMP Spaces(4)+"Total Quantidade... "+Format("W10",TOTAL_QTD)+"\n"
Print File ARQIMP Spaces(4)+"     Total Pre‡o... "+Format("W10.2,EIC",TOTAL_PRECO)+"\n"
Print File ARQIMP "\n\n\n\n\n"

Print File ARQIMP Format("W95,AC",Completa("Eu,  _________________________________________________, RG n§ ______________________",84," "))+ "\n"
Print File ARQIMP Format("W95,AC",Completa("recebi de Divina Panela Ltda ME ___________ volume(s) e conferi os produtos, estando",84," "))+ "\n"
Print File ARQIMP Format("W95,AC",Completa("todos sem nenhum defeito ou faltando alguma pe‡a. Por ser verdade, firmo presente.",84," "))+ "\n\n\n\n"
Print File ARQIMP Format("W95,AC","______________________________________________          ______ /______ /______")+ "\n"
Print File ARQIMP Format("W95,AC","            NOME RESPONSµVEL (LEGÖVEL)                                        ")+ "\n"  
Print File ARQIMP CI_FNEG

Print File ARQIMP "\f"
           
EndProc ;Imprimir_Comprovante()

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

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

Switch
  Case PARAM = "Entrega"             : IMAGEM_FUNDO = "LP_ENT" 
  Case PARAM = "Entrega_Comprovante" : IMAGEM_FUNDO = "LP_ENTC"
  Otherwise                          : IMAGEM_FUNDO = "LP_ECOMP"
EndSwitch  

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 controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()

ITEM=[Sequencia]
DIGITAI()
If CHAVEI=1 Or CHAVEI=0
   Then UnlockRecord
        Moveto "Lpresedi"
EndIf
SetaCorRegistro("Padrao")

EndProc ;Controla_EdicaoI()

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

FACA_CHAVE  = True
FACA_CHAVEI = False
OPCHAVEI    = "CDB"

While FACA_CHAVE
  ;If CHAVEC=1
  ;   Then DIGITAC()
  ;        If CHAVEC = 9 Then QuitLoop EndIf      
  ;        SetaCorRegistro("Padrao")
  ;        
  ;        If CHAVEC=1 Then Controle_Dia() EndIf
  ;   Else FACA_CHAVEI = True
  ;EndIf        
  
  DIGITAC()
  If CHAVEC = 9 Then QuitLoop EndIf      
  SetaCorRegistro("Padrao")
  If CHAVEC=1 Then Controle_Dia() EndIf
  If [LPreseDc->Status]="FINALIZADO" Or [LPreseDc->Status]="CANCELADO" Then OPCHAVEI="CDC" EndIf
  
  While FACA_CHAVEI
      If OPCHAVEI="CDB" 
         Then CHAVECDBAR()
              If CHAVEI=9 Then Quitloop EndIf
              If CHAVEI=7 Then     Loop EndIf
         Else CHAVEI()
              If CHAVEI=9 Then QuitLoop EndIf
              If CHAVEI=7 Then     Loop EndIf
              If CHAVEI<>8 Then DIGITAI() EndIf
              If CHAVEI<>8
                 Then Controla_EdicaoI() 
              EndIf
      EndIf
  EndWhile
  SetaCorRegistro("Padrao")

  Moveto "LPreseDc"
  If CHAVEI=8 Then QuitLoop EndIf      
EndWhile

If RecordStatus("Locked") Then UnLockRecord EndIf

If OPCAO_FORM=FORM_RELACAO
   Then PickForm FORM_RELACAO
EndIf

EndProc ;Controla_EdicaoC()

;*******************************************************************************
;* Rotina para abrir tabelas de trabalho                                       *
;*******************************************************************************
Proc Abre_Tabelas()

View NOWINDOW "\\Sistemas\\Vendas\\Opaf_ECF"
View NOWINDOW "\\Sistemas\\Vendas\\NotaC"
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 "Lpreserq"
View NOWINDOW "Lpreseni"
View NOWINDOW "Lpresedi"     SetaCorRegistro("Padrao")  
CoEdit NOWINDOW "LPreseDc"

EndProc ;Abre_Tabelas()

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

Abre_Tabelas()

DESTINACAO_CODIGO = "062"

FORM_RELACAO    = "R"
FORM_MANUTENCAO = "1"
           
PickForm FORM_RELACAO
OPCAO_FORM=FORM_RELACAO
AUX=""
While True
  CHAVE()
  If CHAVEC=9 Then QuitLoop EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll

Release Vars All
Release Procs All