;** LPresen ********************************************************************
;*  Lista de Presentes                                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 22/04/2019 por Bruno Carvalho
;Ultima Alteracao: 15/08/2019 por Bruno Carvalho
;Motivo Alteracao: Add op‡Æo para exportar lista de presente para arquivo TXT 
;Ultima Alteracao: 19/08/2019 por Bruno Carvalho
;Motivo Alteracao: Ajsutes Importa_Txt(), para registrar a quantidade que esta no arquivo TXT e para registrar a 1¦ linha 
;Ultima Alteracao: 06/01/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado Cliente_Inativo()
;Ultima Alteracao: 20/02/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc Importa_Txt() ao buscar o ano da lista da noiva
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado biblioteca "Bib_Bloq" 

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()                                                
private AUX                                     
NOVO = False
 
While True
  Moveto "LPresenC"
  End
  Moveto [Numero do Lancamento]
  NLANC = [Numero do Lancamento]
  
  If OPCAO_FORM="F"
    Then Down
    Else CtrlPgDn
  EndIf
  Moveto [Numero do Lancamento]
  
  SetaCorRegistro("Editar")
  While True
  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao()
  
  Switch
  Case RetVal="F3": If OPCAO_FORM="F"
                       Then OPCAO_FORM="1"
                       Else OPCAO_FORM="F"
                    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="F"
             Then PAGINA("LPresenC","MR")
             Else PAGINA("LPresenC","MT")
          EndIf
          NLANC = [Numero do Lancamento]
          Switch
            Case EDITAR="S"  : PickForm "1"
                               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("","F")
           Then NLANC = PROXLANCTO_NLANC
                Release Vars PROXLANCTO_NLANC  
           Else QuitLoop
        EndIf
        PickForm "1"    
        Moveto [Numero do Lancamento]
        If PROXIMO_LANCTO_REG_ACHOU
           Then CHAVEC=0
                If Checa_Controle([Numero_Controle_Dia])
                   Then Return
                EndIf
           Else CHAVEC=1
                If Not Checa_Controle(SYS_CONTROLE_DIA)
                   Then OPCAO_FORM="F"
                   Else Return         
                EndIf                  
        EndIf         
        If CHAVEC=1
           Then Del
        EndIf
        If OPCAO_FORM="F"
           Then PickForm "F"
        EndIf
        QuitLoop
    EndSwitch
  EndWhile
EndWhile

EndProc ;CHAVE()

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITAC()

;If Not Checa_Supervisor()
;   Then Mensagem("Lan‡amento "+[Status]+", altera‡Æo nÆo permitida!")
;        UnLockRecord
;        CHAVEC=9
;        Return
;EndIf
 
FACA_CHAVE = True

If CHAVEC=0
   Then DATA_EVENTO = [Data_Evento]
   Else DATA_EVENTO = BlankDate()
EndIf

Switch
  Case IsBlank([Tipo_Lista])  : Moveto [Tipo_Lista]  
  Case IsBlank([Codigo])      : Moveto [Codigo] 
  Case [Status]="FINALIZADO" Or
       [Status]="CANCELADO"   : FACA_CHAVEI = True
                                Return          
  OtherWise                   : Moveto [Data_Evento]
EndSwitch

While True
  Switch
    Case Field()="Tipo_Lista"              : MSGCAMPO = "Tipo do Lan‡amento: (C)Casamento  (P)Ch  de Panela  (N)Casa Nova"
    Case Field()="Codigo"                  : MSGCAMPO = "C¢digo da Pessoa"
    Case Field()="Nome Fantasia EmitDest"  : MSGCAMPO = "Nome do(a) Noivo(a)"
    Case Field()="Codigo do Representante" : MSGCAMPO = "Codigo do(a) Vendendedor(a)"
    Case Field()="Data"                    : MSGCAMPO = "Data do Lan‡amento"
    Case Field()="Tabela_Preco"            : MSGCAMPO = "Tabela de Pre‡o"
    Case Field()="Data_Evento"             : MSGCAMPO = "Data do Evento"
    OtherWise                              : MSGCAMPO = Field()
  EndSwitch  
  If Field()="Codigo" Or
     Field()="Codigo do Representante" Or
     Field()="Tabela_Preco"   
     Then TECLA = " Esc=Retornar  F4=Exporta  F1=Tabela  "
     Else TECLA = " Esc=Retornar  F4=Exporta             " 
  EndIf
  
  Prompt TECLA
  SetaCorRegistro("Editando")
  Wait Field
       Until "ESC","ENTER","DEL","FIELDVIEW","F35","F5",-33,"F1","F4",-62

  Switch
  Case RetVal="F1": 
       If Field()="Codigo" Or
          Field()="Codigo do Representante" Or
          Field()="Tabela_Preco"
          Then CONSULTAF1()
       EndIf  
  Case RetVal="F4" Or Retval=-62 :
       Moveto "LPresenI"
       If [Codigo do Item]="" Then Del EndIF
       If Not RecordStatus("New") 
          Then If ConfGeral("Deseja gerar o arquivo TXT desta lista de presentes?")
                  Then Exporta_Txt()
               EndIf   
          Else Mensagem("NÆo ‚ poss¡vel gerar o arquivo TXT!")
       EndIf
       Moveto "LPresenC"
       QuitLoop
  Case Retval="ESC":
       Switch
         Case Field()="Tipo_Lista" Or (Field()="Codigo" And CHAVEC=0) Or (Field()="Data_Evento" And [Codigo]<>"" And CHAVEC=0) :
              If QuerDesfazer("")
                 Then If CHAVEC=1
                         Then Del
                         Else If RecordStatus("Modified")
                                 Then Undo
                              EndIf
                      EndIf
                      CHAVEC=9
                      QuitLoop
               EndIf
         Case Field()="Codigo"                  : If CHAVEC=1
                                                     Then Moveto [Tipo_Lista]
                                                  EndIf       
         Case Field()="Nome Fantasia EmitDest"  : Moveto [Codigo] 
         Case Field()="Codigo do Representante" : Moveto [Codigo]
         Case Field()="Data"                    : Moveto [Codigo do Representante]
         Case Field()="Tabela_Preco"            : Moveto [Data]
         Case Field()="Status"                  : Moveto [Tabela_Preco]  
         Case Field()="Data_Evento"             : If CHAVEC=0
                                                    Then If [Codigo]=""
                                                            Then Moveto [Codigo]
                                                         EndIf
                                                    Else Moveto [Tabela_Preco]          
                                                  EndIf  
         OtherWise : Left
       EndSwitch
  Case Retval="ENTER":
       Switch
         Case Field()="Tipo_Lista"    :
              If Isblank([]) Then []="C" EndIf
              Moveto [Codigo]
         Case Field()="Codigo"  :
              If Not IsBlank([])
                 Then If CHAVEC=1
                         Then If Cliente_Inativo([Codigo])
                                 Then Loop
                              EndIf   
                      EndIf                 
                      MSG = ""
                      CODIGO_PRESENTE=[Codigo]
                      TIPO_LISTA  =[Tipo_Lista] 
                      Moveto [Codigo]
                      Home
                      Locate CODIGO_PRESENTE
                      If ReTval
                         Then While [Codigo] = CODIGO_PRESENTE
                                If [Numero do Lancamento]<>NLANC And  [Tipo_Lista]=TIPO_LISTA And [Status]<>"CANCELADO"
                                   Then MSG = "Cliente "+CODIGO_PRESENTE+" "+[Nome Fantasia EmitDest]+" localizada no lan‡amento "+[Numero do Lancamento]+"!"
                                        QuitLoop
                                EndIF       
                                Skip
                                If Eot() Then QuitLoop EndIf
                                Locate Next CODIGO_PRESENTE
                                If Not RetVal Then QuitLoop EndIf
                              EndWhile
                      EndIf 
                      Moveto [Numero do Lancamento]
                      Locate NLANC
                      If MSG = ""
                         Then If CHAVEC=1
                                 Then Moveto [Codigo do Representante]
                                 Else Moveto [Data_Evento]
                              EndIf
                         Else Moveto [Codigo]
                              Mensagem(MSG)
                      EndIf
                 Else Moveto [Nome Fantasia EmitDest]         
              EndIf 
         Case Field()="Nome Fantasia EmitDest"   :
              If Not IsBlank([])
                 Then If CHAVEC=1
                        Then Moveto [Codigo do Representante]
                        Else Moveto [Data_Evento]
                      EndIf   
                 Else FastMsg("Informe o nome do cliente!") 
              EndIf 
         Case Field()="Codigo do Representante"  :
              If Not IsBlank([])
                 Then If CHAVEC=1
                         Then If Representante_Inativo([Codigo do Representante])
                                 Then Loop
                              EndIf   
                      EndIf
                      Moveto [Data] 
              EndIf      
         Case Field()="Data"    :
              If IsBlank([])Then []=Today() EndIf
              Moveto [Tabela_Preco]
         Case Field()="Tabela_Preco" :     
              If Not IsBlank([]) 
                 Then [Status]="ABERTO"
                      Moveto [Data_Evento]
                 Else FastMsg("Informe a tabela de pre‡o!")
              EndIf
         Case Field()="Status" : 
              If IsBlank([])Then []="ABERTO" EndIf
              Moveto [Data_Evento]
         Case Field()="Data_Evento" :     
              If Not IsBlank([]) 
                 Then PROSSEGUIR_ROTINA=False
                      If DATA_EVENTO<>BlankDate()
                         Then PROSSEGUIR_ROTINA=True
                              ;If Checa_Supervisor()
                              ;   Then PROSSEGUIR_ROTINA=True 
                              ;EndIf
                         Else PROSSEGUIR_ROTINA=True     
                      EndIf           
                      If PROSSEGUIR_ROTINA
                         Then CHAVEI=0
                              FACA_CHAVEI = True
                              Release Vars PROSSEGUIR_ROTINA
                              QuitLoop
                         Else FastMsg("NÆo foi poss¡vel alterar a data do evento.//Verificar com o Supervisor!")
                              []=DATA_EVENTO      
                      EndIf         
              EndIf         
         Case Field()="Flag_1" :
              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 - LPresenI                              *
;*******************************************************************************
Proc CHAVEI()

MSGCAMPO=""

While True
  ;Calc_Itens()
  Moveto "LPresenI"
  
  Moveto "LPresenI"
  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  If IsBlank(ITEM)
     Then Down
     Else Down Down
  EndIf   
  Moveto [Sequencia]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
                 
  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While true
        Moveto "LPresenI"
        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","F11",-68,-133,-33,-115,-116,-62

        If RetVal=-33
           Then Echo Normal
                Echo Off
                ShowPopup " Fun‡”es " CENTERED
                 "[F4]  ~E~xporta Lista       " : "Exporta lista de presente para arquivo TXT" : "F4",
                 "[F5]  ~O~bserva‡Æo          " : "Observa‡Æo                                " : "F5",
                 "[F6]  ~I~mprimir            " : "ImpressÆo da Lista de Itens               " : "F6",
                 "[F8]  ~A~dicionar Itens     " : "Adiciona itens a partir de uma listagem   " : "F8",
                 "[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="F4" Or RetVal=-62 :
             Del
             If Not RecordStatus("New") 
                Then If ConfGeral("Deseja gerar o arquivo TXT desta lista de presentes?")
                        Then Exporta_Txt()
                     EndIf   
                Else Mensagem("NÆo ‚ poss¡vel gerar o arquivo TXT!")
             EndIf
             QuitLoop
        Case Retval="F5" :
              If [LPresenC->Status]="FINALIZADO"  Or [LPresenC->Status]="CANCELADO"
                Then If [LPresenC->Status]="CANCELADO"
                        Then FastMsg("Lan‡amento CANCELADO!")
                        Else If ConfGeral("Lan‡amento j  foi finalizado, deseja realmente alterar a observa‡Æo:")
                                Then Moveto "LPresenC"
                                     OBSERVACAO()
                                     Moveto "LPresenI" 
                             EndIf
                     EndIf 
                Else Moveto "LPresenC"
                     OBSERVACAO()
                     Moveto "LPresenI"
             EndIf
        Case RetVal="F6":  
             Del
             If [LPresenC->Status]="CANCELADO" 
                Then Mensagem("Lan‡amento CANCELADO!")
                     QuitLoop
             EndIf
             If RecordStatus("New")=False 
                Then ConfGeral("Deseja imprimir em PDF a lista de presentes ?")
                     If OK="S"
                        Then ORDENACAO=""
                             ShowPopup "Ordena‡Æo" CENTERED
                               "~P~re‡o        " : " Ordena‡Æo por faixa de pre‡o" : "ORD_PR",
                               "~D~epartamento " : " Ordena‡Æo por Departamento  " : "ORD_DEP",
                               Separator,
                               "~C~ancelar     " : " Cancelar a Opera‡„o         " : "CANCELAR"
                             EndMenu
                             To MenuVar
                             Echo Off
                             
                             If MenuVar="CANCELAR" or MenuVar="Esc"
                                Then QuitLoop
                             EndIf                                         
                             ORDENACAO=MenuVar

                             DispositivoI("FAT")
                             If OK<>""
                                Then Seta_Lista_Presente()
                             EndIf   
                     EndIf
                Else Mensagem("NÆo h  itens na rela‡Æo do cliente!")       
             EndIf
             QuitLoop
        Case RetVal="F8":  
             Del
             Importa_Txt()
             ;If RecordStatus("New")=True 
             ;   Then Importa_Txt()
             ;   Else Mensagem("NÆo ‚ poss¡vel adicionar novos itens em um lan‡amento j  existente!")
             ;EndIf
             QuitLoop 
        Case Retval="F10" Or RetVal=-68 : 
             Del
             Switch
               Case RecordStatus("New")=True :  
                    MENSAGEM("O lan‡amento deve ter pelo menos 1(um) item!")
                    QuitLoop
               Case [LPresenC->Status]="CANCELADO" : 
                    Mensagem("Lan‡amento CANCELADO!")
                    QuitLoop     
             EndSwitch   
             If [LPresenC->Status]<>"FINALIZADO"
                Then If Not Verifica_Status_Entrega()
                        Then QuitLoop
                     EndIf
                     If ConfGeral("Deseja realmente FINALIZAR este lan‡amento?") 
                        Then Moveto "LPresenC"
                             [Status]="FINALIZADO"
                             Mensagem("Lan‡amento Finalizado!")
                             FACA_CHAVE  = False
                             FACA_CHAVEI = False
                             CHAVEC=9
                             CHAVEI=9
                             Return
                     EndIf
               Else FastMsg("Lan‡amento j  foi FINALIZADO!")      
             EndIf   
             QuitLoop
        Case Retval="F11" Or RetVal=-133 : 
             Del
             Switch
               Case [LPresenC->Status]="CANCELADO" : 
                    Mensagem("Lan‡amento j  foi CANCELADO!")
                    QuitLoop
               Case Not Checa_Supervisor()         :
                    Mensagem("Permiss„o para CANCELAMENTO apenas para o supervisor!")
                    QuitLoop
             EndSwitch      
             If [LPresenC->Status]="FINALIZADO"
                Then If Not Verifica_Status_Entrega()
                        Then QuitLoop
                     EndIf         
                     MSG = "Deseja realmente CANCELAR este lan‡amento?"
                     If ConfGeral(MSG) 
                       Then Moveto "LPresenC"
                            [Status]="CANCELADO"
                            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 ConfGeral("Deseja sair desta rotina ?")
                Then CHAVEC=9
                     CHAVEI=9
                     FACA_CHAVE  = False
                     FACA_CHAVEI = False
                Else QuitLoop        
             EndIf
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               PAGINA("LPresenI","MR")
               ITEM = [Sequencia]
               Switch                                    
                 Case EDITAR="S"  : If [LPresenC->Status]="FINALIZADO" Or [LPresenC->Status]="CANCELADO" 
                                      Then ImageRights ReadOnly
                                           SetaCorRegistro("Paginar")
                                           FastMsg("Lan‡amento "+[LPresenC->Status]+", edi‡Æo nÆo permitida!")
                                      Else If IsBlank([Quantidade_Compra])    And 
                                              Isblank([Quantidade_Conferida]) And
                                              Isblank([Quantidade_Devolvida]) And
                                              Isblank([Quantidade_Entregue]) 
                                              Then ;If Checa_Supervisor()
                                                   ;    Then CHAVEI=0
                                                   ;         Controla_EdicaoI()                                        
                                                   ;    Else FastMsg("Edi‡Æo nÆo permitida!")
                                                   ;EndIf  
                                                   CHAVEI=0
                                                   Controla_EdicaoI()     
                                                   ;Calc_Itens()
                                              Else FastMsg("NÆo ‚ poss¡vel editar este item!")
                                                   UnLockRecord
                                           EndIf                   
                                    EndIf
                 Case EXCLUIR="S" : If [LPresenC->Status]="FINALIZADO" Or [LPresenC->Status]="CANCELADO" 
                                       Then ImageRights ReadOnly
                                            SetaCorRegistro("Paginar")
                                            FastMsg("Lan‡amento "+[LPresenC->Status]+", exclusÆo nÆo permitida!")
                                       Else If IsBlank([Quantidade_Compra])    And 
                                               Isblank([Quantidade_Conferida]) And
                                               Isblank([Quantidade_Devolvida]) And
                                               Isblank([Quantidade_Entregue]) 
                                               Then If QuerExcluir("")
                                                       Then ;If Checa_Supervisor()
                                                            ;    Then Grava_LogEx("Lista_Item")
                                                            ;         Del
                                                            ;    Else FastMsg("ExclusÆo nÆo permitida!")     
                                                            ;EndIf
                                                            Grava_LogEx("Lista_Item")
                                                            Del
                                                            ;Calc_Itens()
                                                       Else UnLockRecord     
                                                    EndIf         
                                               Else FastMsg("NÆo ‚ poss¡vel excluir este item!")
                                                    UnLockRecord
                                            EndIf
                                    EndIf       
                 OtherWise        : QuitLoop
               EndSwitch
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ENTER": 
             ;FastMsg("NÆo ‚ poss¡vel inclusÆo/altera‡Æo do item!")
             ;Loop
             
             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 Digitacao das Cidades                                           *
;*******************************************************************************
Proc DIGITAI()

Moveto "LPresenC"
SetaCorRegistro("Padrao")    

Moveto "LPresenI"       
SetaCorRegistro("Editar")   

If CHAVEI=0
   Then Moveto [Quantidade]
   Else Moveto [Codigo do Item]
EndIF

While True
  TECLA=" Esc=Retornar  "

  MSGCAMPO=Field()
    
  Prompt TECLA
  Wait Field
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","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()="Codigo do Item"        : If CHAVEI=1 
                                                   Then CHAVEI=8
                                                        Del
                                                        QuitLoop
                                                EndIf  
       EndSwitch
  Case Retval="ENTER" :  
       Switch
         Case Field()="Codigo do Item"       : 
              If Not IsBlank([]) 
                 Then GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
                      If Not RetVal 
                         Then FastMsg("Item "+[]+" nÆo localizado no cadastro de itens!")
                         Else [Unidade] = REG_ITEM["Unidade Interna"]
                      EndIf   
                      Moveto [Quantidade] 
              EndIf
         Case Field()="Quantidade"          :
              If Not IsBlank([]) 
                 Then CHAVEI=8
                      QuitLoop
                 Else FastMsg("Informe a Quantidade do Item!")     
              EndIf             
       EndSwitch
  EndSwitch
EndWhile

EndProc ;DIGITA_PESSOA_ITEM() 

;*******************************************************************************
;* Rotina para Verificar Cancelamento                                          *
;*******************************************************************************
Proc Verifica_Status_Entrega()
Private TEMP,ANT_TAB,ANT_FIE

TEMP = True
ANT_TAB = Table()
ANT_FIE = Field()

Moveto "LPresenC"
FormKey
Do_It!

View "LPresenP"
Moveto [Lancamento_Lista]
Locate NLANC
If RetVal
   Then While [Lancamento_Lista] = NLANC  
          If [Status]<>"FINALIZADO" And [Status]<>"CANCELADO"
             Then TEMP=False 
          EndIf  
          Skip
          If Eot() Then QuitLoop EndIf
          Locate Next NLANC
          If Not RetVal Then QuitLoop EndIf
        EndWhile
EndIf

ClearAll
Sair_Processo()

If Not TEMP
   Then Mensagem("H  lan‡amento(s) de entrega referente … esta lista de presentes em ABERTO!")    
EndIf   

Moveto ANT_TAB
Moveto Field ANT_FIE 

Return TEMP

EndProc ;Verifica_Status_Entrega()


;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc Calc_Itens()
Private TAB_ANT, FIE_ANT

TAB_ANT = Table()
FIE_ANT = Field()

Moveto "LPresenI"
Moveto [Quantidade          ] TOT_QTD           = ImageCSum()
Moveto [Quantidade_Compra   ] TOT_QTD_COMPRA    = ImageCSum()
Moveto [Quantidade_Devolvida] TOT_QTD_DEVOLVIDA = ImageCSum()
Moveto [Quantidade_Entregue ] TOT_QTD_ENTREGUE  = ImageCSum()
Moveto [Quantidade_Conferida] TOT_QTD_CONFERIDA = ImageCSum()

If TOT_QTD=0         Then TOT_QTD = BlankNum()           EndIf
If TOT_QTD_COMPRA    Then TOT_QTD_COMPRA = BlankNum()    EndIf
If TOT_QTD_CONFERIDA Then TOT_QTD_CONFERIDA = BlankNum() EndIf 
If TOT_QTD_DEVOLVIDA Then TOT_QTD_DEVOLVIDA = BlankNum() EndIf
If TOT_QTD_ENTREGUE  Then TOT_QTD_ENTREGUE = BlankNum()  EndIf

Moveto TAB_ANT
Moveto Field FIE_ANT

EndProc   ; (ChaveCdBar)

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

;PRESENTE_ENDERECO
;PRESENTE_NOME  
;PRESENTE_COD_VEND
;PRESENTE_NOM_VEND 
;PRESENTE_DATA
;PRESENTE_STATUS
;PRESENTE_OBS
;PRESENTE_USUARIO
;PRESENTE_DATA_EVENTO
;PRESENTE_OBS 
 
Print File ARQIMP Chr(27)+Chr(77) + "\n"
Print File ARQIMP "\014"+CI_INEG+Spaces(34)+""+Format("W12,AL","ORDEM "+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",PRESENTE_NOM_VEND)+Spaces(45)+Format("D13",PRESENTE_DATA)+"\n\n"
Print File ARQIMP Spaces(14)+Format("W25",PRESENTE_CODIGO+" "+PRESENTE_NOME)+"\n\n"
Print File ARQIMP Spaces(14)+PRESENTE_ENDERECO+"\n\n"

Switch  
  Case TIPO_LISTA = "P" : Print File ARQIMP Spaces(21) 
  Case TIPO_LISTA = "N" : Print File ARQIMP Spaces(16) 
  OtherWise             : Print File ARQIMP Spaces(19) 
EndSwitch
Print File ARQIMP Format("D13",PRESENTE_DATA_EVENTO)+Spaces(19)+Format("W46",PRESENTE_OBS)+"\n\n"

Print File ARQIMP Chr(27)+Chr(77) + "\n\n\n\n"
Print File ARQIMP CI_10CPP+CI_F_TIMES

Imprime_Titulo_Item=False

If Imprime_Titulo_Item
   Then 
   Print File ARQIMP CI_INEG+"Item                                      UN  Cod.Barras   Quantidade PrUnitario "+CI_FNEG+"\n"   
   Print File ARQIMP CI_INEG+"----------------------------------------- -- ------------- ---------- ---------- "+CI_FNEG+"\n"
   
   ;Item                                      UN  Cod.Barras   Quantidade PrUnitario   
   ;----------------------------------------- -- ------------- ---------- ----------  
   ;1234567890_123456789012345678901234567890_12_1234567890123_999.999.99_999.999.99
   
   LINHA_CABECALHO = 2
   Else 
   LINHA_CABECALHO = 0
EndIf

EndProc ;Cabecalho()

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

Cabecalho()

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()
          EndIf
          CONTADOR = CONTADOR + 1
          Print File ARQIMP CI_INEG + LINHA_DEP + CI_FNEG + "\n"
     Else 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()
          
          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
                  Print File ARQIMP CI_INEG + LINHA_DEP + CI_FNEG + "\n"
          EndIf        
  EndIf   
Endfor

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

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

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

Copia_Imagem()
DynArray ARRAY_DEPARTAMENTO[]

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

PRESENTE_CODIGO = [LPresenC->Codigo      ]
TABELA_PRECO    = [LPresenC->Tabela_Preco]
TIPO_LISTA      = [LPresenC->Tipo_Lista  ]

Do_it!
ClearAll

{Ask} {LPresenI} 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 
          
{Ask} TypeIn Tabela Enter
Moveto [Codigo do Item] Check
Moveto [Preco_Unitario] TypeIn "Blank"
Do_it!
ClearAll

If Not IsEmpty("Answer")
   Then {Ask} {Answer}
        Moveto [Codigo do Item] TypeIn "_Cod"
        {Ask} TypeIn Tabela Enter
        Moveto [Codigo do Item] TypeIn "_Cod"
        Moveto [Preco_Unitario] TypeIn "Blank, Changeto _Pr"
        {Ask} {\\Sistemas\\Vendas\\TbPrIte}
        Moveto [Codigo da Tabela] TypeIn "~TABELA_PRECO"
        Moveto [Codigo do Item  ] TypeIn "_Cod"
        Moveto [Preco Unitario  ] TypeIn "_Pr"
        Do_it!
        ClearAll
EndIf
     
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 "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   

Sort Tabela On "Ordena"
ClearAll

CONTA_ITEM = 0
Array ARRAY_ITEM[NRecords(Tabela)]

View "LPresenI"
CoEdit Tabela
Scan 
  Barra(NRecords(Tabela), RecNo())
  Aguarde("Aguarde, imprimindo lista de itens "+(Ltrim(StrVal(RecNo())))+"/"+Ltrim(StrVal(NRecords(Tabela))))
  
  GetRecord "LPresenI" [Numero do Lancamento],[Sequencia] To REG_LPresenI
  If Not RetVal Then Loop EndIf  
  
  ;---- Dados do Item -------------------------------------------------
  LPresenI_SEQ         = REG_LPresenI["Sequencia"           ]
  LPresenI_ITEM        = REG_LPresenI["Codigo do Item"      ]
  LPresenI_ITEM_DESC   = REG_LPresenI["Descricao do Item"   ]
  LPresenI_ITEM_UN     = REG_LPresenI["Unidade"             ]
  LPresenI_CDBARRA     = REG_LPresenI["Codigo de Barras"    ]
  LPresenI_QTD         = REG_LPresenI["Quantidade"          ]
  LPresenI_QTD_COMPRA  = REG_LPresenI["Quantidade_Compra"   ]
  LPresenI_QTD_DEVOL   = REG_LPresenI["Quantidade_Devolvida"]
  LPresenI_QTD_ENT     = REG_LPresenI["Quantidade_Entregue" ]
  LPresenI_QTD_CONF    = REG_LPresenI["Quantidade_Conferida"]
  LPresenI_PRECO       = REG_LPresenI["Preco_Unitario"      ] 
  LPresenI_DATA_ENT    = REG_LPresenI["Data da Entrega"     ]
  LPresenI_ITEM_STATUS = REG_LPresenI["Status"              ]

  If IsBlank(LPresenI_PRECO)
     Then GetRecord "\\Sistemas\\Vendas\\TbPrite" TABELA_PRECO,LPresenI_ITEM To REG_PRRECO
          If Retval
             Then LPresenI_PRECO = REG_PRRECO["Preco Unitario"]
          EndIf
  EndIf       

  GetRecord "\\Sistemas\\Estoque\\Itens" LPresenI_ITEM To REG_ITEM
  If Not RetVal
     Then Mensagem("Item "+LPresenI_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
  
  ;---- Dados do Cliente -------------------------------------------------
  GetRecord "LPresenC" NLANC To REG_PRESENTE
  If Not RetVal
     Then Loop
  EndIf
   
  GetRecord "\\Sistemas\\Cadastro\\Destinat" PRESENTE_CODIGO To REG_DESTINAT
  If RetVal
     Then PRESENTE_ENDERECO = REG_DESTINAT["Endereco"]+" - "+REG_DESTINAT["Bairro"]
     Else PRESENTE_ENDERECO = "NAO LOCALIZADO NO CADASTRO" 
  EndIf
  PRESENTE_NOME           = REG_PRESENTE["Nome Fantasia EmitDest" ]
  PRESENTE_COD_VEND       = REG_PRESENTE["Codigo do Representante"]
  PRESENTE_NOM_VEND       = REG_PRESENTE["Nome Fantasia Represent"] 
  PRESENTE_DATA           = REG_PRESENTE["Data"                   ]
  PRESENTE_STATUS         = REG_PRESENTE["Status"                 ]
  PRESENTE_OBS            = REG_PRESENTE["Observacao"             ]
  PRESENTE_USUARIO        = REG_PRESENTE["Codigo_Usuario"         ]
  PRESENTE_DATA_EVENTO    = REG_PRESENTE["Data_Evento"            ]
  PRESENTE_OBS            = REG_PRESENTE["Observacao"             ]
  
  If ORDENACAO="ORD_PR"
     Then DEPARTAMENTO = [Ordena]
  EndIf       
 
 ;Item                                      UN  Cod.Barras   Quantidade PrUnitario 
 ;----------------------------------------- -- ------------- ---------- ---------- 
 ;1234567890_123456789012345678901234567890_12_1234567890123_999.999.99_999.999.99 
  
  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",LPresenI_ITEM)+" "+
                                                      Format("W30",LPresenI_ITEM_DESC)+" "+
                                                      Format("W2",LPresenI_ITEM_UN)+" "+
                                                      Format("W13",LPresenI_CDBARRA)+" "+
                                                      Format("W5",LPresenI_QTD)+" "+
                                                      Format("W10.2,EIC",LPresenI_PRECO)
                                                      ;Format("W5",LPresenI_QTD_COMPRA)+" "+
                                                      ;Format("W5",LPresenI_QTD_DEVOL)+" "+
                                                      ;Format("W5",LPresenI_QTD_ENT)+" "+
                                                      ;Format("W5",LPresenI_QTD_CONF)+" "+
                                                      ;Format("W13",LPresenI_ITEM_STATUS)+" "+
                                                      ;Format("D13",LPresenI_DATA_ENT) 
                                                      ;Format("W8",LPresenI_ITEM_STATUS)
EndScan
Do_it!
ClearAll

Imprimir_Item_Lista_Presente()

ImpriArq(ARQIMP)
Deleta_Arquivo(ARQIMP)

Abre_Tabelas()
PickForm "1"
Moveto [Numero do Lancamento]
Locate NLANC

Moveto "LPresenC"
SetaCorRegistro("Editar")

Release Vars PRESENTE_CODIGO,LPresenI_CODIGO,LPresenI_SEQ,LPresenI_ITEM,LPresenI_ITEM_DESC,LPresenI_ITEM_UN,
             LPresenI_CDBARRA,LPresenI_QTD,LPresenI_QTD_COMPRA,LPresenI_QTD_DEVOL,LPresenI_QTD_ENT,LPresenI_QTD_CONF,
             LPresenI_DATA_ENT,LPresenI_ITEM_STATUS,PRESENTE_NOME,PRESENTE_DATA,PRESENTE_STATUS,PRESENTE_OBS,PRESENTE_USUARIO
                       
EndProc ;Seta_Lista_Presente()

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

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

Switch  
  Case [LPresenC->Tipo_Lista] = "P" : IMAGEM_FUNDO = "LP_CHA"
  Case [LPresenC->Tipo_Lista] = "N" : IMAGEM_FUNDO = "LP_CN"
  OtherWise                         : IMAGEM_FUNDO = "LP_CAS"
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()

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc CarregarLista()

DynArray Array_Registro[]

Wcs=0
If IsFile(PrivDir()+"Dir.Txt")
   Then Deleta_Arquivo(PrivDir()+"Dir.Txt")
EndIf

Switch
  Case TIPO_LISTA="P" : Lista_DiretorioF(VSDGDRIVE+VSDGPASTA,"*CHA.TXT")
  Case TIPO_LISTA="N" : Lista_DiretorioF(VSDGDRIVE+VSDGPASTA,"*CN.TXT") 
  OtherWise           : Lista_DiretorioF(VSDGDRIVE+VSDGPASTA,"*CAS.TXT")   
EndSwitch

For i from 1 to 7
  If Not IsFile(PrivDir()+"Dir.Txt")
     Then Sleep(1000)
          Loop
     Else Editor Open PrivDir()+"Dir.Txt"
          If ErrorCode()=27
             Then Sleep 1000
                  Loop
          EndIf
          
          While True
            Extrair_Linha()
            If IsBlank(ELinha) Then QuitLoop EndIf
            wcs=wcs+1
            Array_Registro[wcs] = Completa(SubStr(ELINHA,1,Len(ELINHA)-1),90," ")+" "
          EndWhile
          CancelEdit

          QuitLoop
  EndIf
EndFor

EndProc ;CarregarLista()
         
;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
                                    
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or
          Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
          SYS_TECLA_ACIONADA=Evento["KeyCode"]
          Seta_Tecla_Acionada()
          CancelDialog
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_Registro"      : Campo="NO"
            Case Campo="YES" Or Campo="NO": Campo="TG_Registro"
          EndSwitch
     Case Evento["KeyCode"] = 32 And Campo="TG_Registro":
          Temp=False
          If SubStr(Array_Registro[ControlValue("TG_Registro")],41,1)=" "
             Then Array_Registro[ControlValue("TG_Registro")]=SubStr(Array_Registro[ControlValue("TG_Registro")],1,40)+"X"
             Else Array_Registro[ControlValue("TG_Registro")]=SubStr(Array_Registro[ControlValue("TG_Registro")],1,40)+" "
          EndIf
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_Registro": Campo="YES"
                  EndSwitch
          EndIf                     
   EndSwitch 
EndIf

Switch  
  Case Campo="TG_Registro":
       MSG_CAMPO="Selecione o arquivo"
       TECLA="Barra de Espa‡o=Marca/Desmarca"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina para Grava‡Æo de Registros                                           *
;*******************************************************************************
Proc Exporta_Txt()

CHAVEI          = 0
VSDGDRIVE       = SubStr(Directory(),1,2)
VSDGPASTA       = "\\Controle\\Noivas\\Site"
PRESENTE_CODIGO = [LPresenC->Codigo]

If DirExists(VSDGDRIVE+VSDGPASTA)=0
     Then Mensagem("NÆo foi localizado o diret¢rio "+VSDGDRIVE+VSDGPASTA+"!")
          Return
EndIf

Aguarde("Exportando lista de presente para arquivo...")

Moveto "LPresenC"
FormKey
Do_It!

Tipo_Ext = "*.TXT"
ARQ_TEMP = VSDGDRIVE + VSDGPASTA + "\\"+NLANC+"_"+PRESENTE_CODIGO+".txt"
ARQIMP   = VSDGDRIVE + VSDGPASTA + "\\"+NLANC+".txt"
  
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
EndIf

Moveto "LPresenI"
Moveto [Numero do Lancamento]
Locate NLANC
If RetVal
   Then While NLANC = [Numero do Lancamento]
          If [Quantidade] > 0
             Then If [Codigo de Barras]<>""
                     Then CODIGO_BARRA = [Codigo de Barras]
                     Else CODIGO_BARRA = "SEM CODBAR -> ITEM "+[Codigo do Item]
                  EndIf    
                  Print File ARQIMP CODIGO_BARRA+chr(59)+StrVal([Quantidade])+"\n"
          EndIf
          Skip
          If Eot() Then QuitLoop EndIf
        EndWhile   
EndIf

FileWrite PrivDir()+"funcop.txt" From "COP|"+ARQIMP+"|"+ARQ_TEMP+"\n"
ExecVisecf(PrivDir()+"funcop.txt","")
Sleep 1000
Deleta_Arquivo(ARQIMP)

Mensagem("Arquivo gerado em "+ARQ_TEMP+"!")
Do_it!
ClearAll

Sair_Processo()

EndProc ;Exporta_Txt()

;*******************************************************************************
;* Rotina para Grava‡Æo de Registros                                           *
;*******************************************************************************
Proc Importa_Txt()

;LUCIA E MARCOS - CAS.TXT   Casamento (CAS)
;LUCIA E MARCOS - CHA.TXT   Ch        (CHA)
;LUCIA E MARCOS - CN.TXT    Casa Nova (CN)

TIPO_LISTA       = [LPresenC->Tipo_Lista  ]
TABELA_PRECO     = [LPresenC->Tabela_Preco]          
PRESENTE_CODIGO  = [LPresenC->Codigo      ]
LISTA_PRESENTE   = [LPresenC->Codigo      ]+" "+[LPresenC->Nome Fantasia EmitDest]

;NOME_ARQ = PRESENTE_CODIGO
;ARQUIVO  = VSDGDRIVE + VSDGPASTA + "\\"+NOME_ARQ+".txt"
  
;If Not IsFile(ARQUIVO)
;   Then Mensagem("Arquivo "+ARQUIVO+" nÆo foi localizado!")
;        Return
;EndIf

VSDGDRIVE = SubStr(Directory(),1,2)
VSDGPASTA = "\\Controle\\Noivas\\L2020"

If DirExists(VSDGDRIVE+VSDGPASTA)=0
     Then Mensagem("NÆo foi localizado o diret¢rio "+VSDGDRIVE+VSDGPASTA+"!")
          Return
EndIf

Moveto "LPresenC"
FormKey
Do_It!

;---- Cria o diret¢iro dos arquivos da lista de Presentes ----------------------
;For ii From 1 To 3
;  Switch
;    Case ii = 1 : VSDGDRIVE = SubStr(Directory(),1,2)
;                  VSDGPASTA = "\\Controle"
;    Case ii = 2 : VSDGPASTA = "\\Controle\\Noivas" 
;    Case ii = 3 : VSDGPASTA = "\\Controle\\Noivas\\L2020"
;  EndSwitch
;  
;  If DirExists(VSDGPASTA)=0
;     Then Cria_Pasta(VSDGPASTA)
;          Sleep 2000
;  EndIf
;EndFor  

ARQ_TEMP = ""
Tipo_Ext = "*.TXT"

While True
  CarregarLista()
  ShowDialog "Itens do Cliente" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
       Key "F1","ENTER","ESC",32,
           -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
        @ 02,12   Height 14 Width 72
      
        @ 00,00 ?? "Lista de arquivos"
        PickDynArray @01,00 Height 08 width 69
        Columns 1
        Array_Registro
          Tag "TG_Registro"
            To ArrayElement
      
       Pushbutton @ 10,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
       Pushbutton @ 10,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
      
  EndDialog
  
  If Not RetVal 
     Then ClearAll
          Sair_Processo()
          Return     
  EndIf
  LimpaRodape(0)
      
  If Not IsAssigned(Array_Registro[ArrayElement]) 
     Then Mensagem("Impossivel localizar o arquivo!// //Verifique se adicionou o arquivo no local correto!")
          Loop
  EndIf
  
  If PRESENTE_CODIGO="" 
     Then ARQ_TEMP = VSDGDRIVE + VSDGPASTA + "\\"+PRESENTE_CODIGO+".txt"
     Else ARQ_TEMP = VSDGDRIVE + VSDGPASTA + "\\0000.txt"
  EndIf
  
  If IsFile(ARQ_TEMP)
     Then Deleta_Arquivo(ARQ_TEMP)
  EndIf
  
  NOME_ARQ = Rtrim(Ltrim(Array_Registro[ArrayElement]))
  If Search(".TXT",Upper(NOME_ARQ))>0
     Then NOME_ARQ = SubStr(NOME_ARQ,1,Len(NOME_ARQ)-4)
  EndIf
  ARQUIVO  = VSDGDRIVE + VSDGPASTA + "\\"+NOME_ARQ+".txt"
  
  FileWrite PrivDir()+"funcop.txt" From "COP|"+ARQUIVO+"|"+ARQ_TEMP+"\n"
  ExecVisecf(PrivDir()+"funcop.txt","")
  Sleep 1000
      
  QuitLoop
EndWhile

{Ask} {LPresenI} 
Moveto [Numero do Lancamento] Check TypeIn NLANC
Moveto [Sequencia           ] Check
Do_It!

Moveto "LPresenI" ClearImage
Moveto "Answer" ClearImage 

PESSOA_SEQ = 0
If Not IsEmpty("Answer")
   Then View "Answer"
        End 
        PESSOA_SEQ = [Sequencia]
        ClearImage
EndIf
Delete "Answer"

If IsAssigned(Varinner) Then Release Vars Varinner  EndIf
    
LINHA=0                            
FileRead ARQ_TEMP to Varinner

Copy "\\Sistemas\\Vendas\\Imp_Temp" "Answer"
Empty "Answer"

CRIAR_TABELA = False
Adiciona_Campo("Answer","Quantidade(N)")

Edit "Answer"
Pos=1
While True
  LINHA = LINHA + 1
  Posf=SearchFrom("\n",Varinner,Pos)
  ;If LINHA = 1
  ;   Then Pos=Posf+1                                      ;Pula a primeira linha
  ;   Else 
          AUX_LINHA = Substr(Varinner,Pos,(Posf-Pos))
          If Posf=0 Then QuitLoop EndIf
          PosV=Search(";",AUX_LINHA)
          If PosV>0
             Then While PosV>0
                    COD_BARRA = Rtrim(Ltrim(SubStr(AUX_LINHA,1,PosV-1)))
                    AUX_LINHA = Rtrim(Ltrim(SubStr(AUX_LINHA,PosV+1,Len(AUX_LINHA))))
                    [Field-1]=COD_BARRA
                    Pos=Posf+1
                    PosV=Search(";",AUX_LINHA)
                    If PosV=0 
                       Then If Len(AUX_LINHA)>0 And Type(NumVal(Rtrim(Ltrim(AUX_LINHA))))="N"
                               Then [Quantidade] = NumVal(Rtrim(Ltrim(AUX_LINHA)))
                                    Down
                                    Pos=Posf+1
                               Else Down     
                            EndIf   
                            QuitLoop
                       Else Down      
                    EndIf    
                  EndWhile
             Else COD_BARRA = Rtrim(Ltrim(AUX_LINHA))
                  [Field-1]=COD_BARRA
                  Down
                  Pos=Posf+1
          EndIf
 ; EndIf         
EndWhile
Do_It!
ClearAll
          
If IsAssigned(Varinner) Then Release Vars Varinner  EndIf

CONTA_ERRO = 0
DynArray ARRAY_ERRO[]

View "\\Sistemas\\Estoque\\Itens"
View "LPresenI" 
Coedit "Answer"     SetHighLight Current Record 23 Field 31

NR=NRecords("Answer")
Scan
  CODBAR = [Field-1   ]
  QTD    = [Quantidade]
  Barra(NR, RecNo())
  Aguarde("Adicionando itens: "+CODBAR+" "+BARRA_STRING)
 
  PESSOA_SEQ = PESSOA_SEQ + 1
  If IsBlank(QTD) Or Type(NumVal(QTD))<>"N" 
     Then QTD = 1 
  EndIf 
   
  Moveto "\\Sistemas\\Estoque\\Itens"
  Moveto [Codigo de Barras ]
  Locate CODBAR
  If RetVal
     Then CopyToArray REG_ITEM
     Else CONTA_ERRO = CONTA_ERRO +1
          ARRAY_ERRO[CONTA_ERRO] = CODBAR
          Moveto "Answer"
          Loop
  EndIf    
  
  GetRecord "\\Sistemas\\Vendas\\TbPrIte" TABELA_PRECO,REG_ITEM["Codigo do Item"] To REG_PRECO
  If RetVal
     Then PRECO = REG_PRECO["Preco Unitario"]
     Else FastMsg("Item "+REG_ITEM["Codigo do Item"]+" "+REG_ITEM["Descricao do Item"]+" sem pre‡o informado!")
          PRECO = Blanknum()
  EndIf   
   
  Moveto "LPresenI" 
  End Down
  [Numero do Lancamento] = NLANC
  [Sequencia           ] = PESSOA_SEQ
  [Codigo do Item      ] = REG_ITEM["Codigo do Item"]
  [Descricao do Item   ] = REG_ITEM["Descricao do Item"]
  [Unidade             ] = REG_ITEM["Unidade Interna"]
  [Codigo de Barras    ] = REG_ITEM["Codigo de Barras"]
  [Quantidade          ] = QTD                                                  ;AJUSTAR QUANTIDADE 
  [Preco_Unitario      ] = PRECO
  UnLockRecord
    
  Moveto "Answer"
EndScan
Do_It!
ClearAll

Delete "Answer"

If IsFile(ARQ_TEMP)
   Then Deleta_Arquivo(ARQ_TEMP)
EndIf

aux_dia  = AlinhM(StrVal(Day(Today())),2)+AlinhM(StrVal(Month(Today())),2)+StrVal(Year(Today()))
aux_hora = Substr(Time(),1,2)+Substr(Time(),4,2)+Substr(Time(),7,2)

ARQ_TEMP = VSDGDRIVE + VSDGPASTA + "\\"+"IMPORTADO_"+NOME_ARQ+"_"+aux_dia+"."+aux_hora+".txt"

FileWrite PrivDir()+"funcop.txt" From "COP|"+ARQUIVO+"|"+ARQ_TEMP+"\n"
ExecVisecf(PrivDir()+"funcop.txt","")
Sleep 1000

FileWrite PrivDir()+"fundel.txt" From "DELT|"+ARQUIVO+"\n"
ExecVisecf(PrivDir()+"fundel.txt","")
Sleep 1000

If DynArraySize(ARRAY_ERRO)>0
   Then ARQIMP=PrivDir()+"LERRO.Txt"
        If IsFile(ARQIMP)
           Then Deleta_Arquivo(ARQIMP)
        EndIf
        
        Aguarde("Aguarde, imprimindo rela‡Æo de erros localizados"+BARRA_STRING)
        
        Cabecalho_Erro()
        For ii From 1 To DynArraySize(ARRAY_ERRO)  
          If NLINHA >= 82
             Then Print File ARQIMP "\f"
                  Cabecalho_Erro()
          EndIf
          NLINHA = NLINHA + 1
          Print File ARQIMP ARRAY_ERRO[ii]+"\n"                                       
        EndFor 
        
        Mensagem("Ser  exibido um relat¢rio com erros encontrados na importa‡Æo dos itens!")
        PDFZEBRA=False
        DISPOSITIVO_OPCAO="V"
        ImpriArq(ARQIMP)    
EndIf   

Sair_Processo()

Endproc ;Importa_Txt()

;*******************************************************************************
;* Rotina p/ Imprimir Cabe‡alho                                                *
;*******************************************************************************
Proc Cabecalho_Erro()

Print File ARQIMP Chr(27)+Chr(77)
Print File ARQIMP Chr(27)+Chr(48)
Print File ARQIMP "\n\n"
Print File ARQIMP Fill("-",94)+"\n"

Switch
  Case TIPO_LISTA="P" : TITULO = "RELACAO DE ERROS NA IMPORTACAO DE ITENS - LISTA DO CHA DE PANELA"
  Case TIPO_LISTA="N" : TITULO = "RELACAO DE ERROS NA IMPORTACAO DE ITENS - LISTA DE CASA NOVA"
  OtherWise           : TITULO = "RELACAO DE ERROS NA IMPORTACAO DE ITENS - LISTA DE CASAMENTO" 
EndSwitch   

Print File ARQIMP Format("W94,AC",TITULO)+"\n"
Print File ARQIMP Format("W94,AC","CODIGO DE BARRAS NAO LOCALIZADO NO CADASTRO DE ITENS")+"\n"
Print File ARQIMP Fill("-",94)+"\n"
Print File ARQIMP "\n"

NLINHA = 11

Print File ARQIMP "\n"
Print File ARQIMP "Cliente: "+LISTA_PRESENTE+"\n"
Print File ARQIMP "\n"
Print File ARQIMP "C¢digo de Barras"+"\n"
Print File ARQIMP "------------------------------------------------------------"+"\n"    

EndProc ;Cabecalho_Erro()

;*******************************************************************************
;* Rotina para sair do processo                                                *
;*******************************************************************************
Proc Sair_Processo()

Abre_Tabelas()
PickForm "1"
Moveto [Numero do Lancamento]
Locate NLANC

Moveto "LPresenC"
SetaCorRegistro("Padrao")

Moveto "LPresenI"

EndProc ;Sair_Processo()

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

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

EndProc ;Controla_EdicaoI()

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

FACA_CHAVE  = True
FACA_CHAVEI = False

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
  
  While FACA_CHAVEI
    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
  EndWhile
  SetaCorRegistro("Padrao")

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

If RecordStatus("Locked") Then UnLockRecord EndIf

If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

EndProc ;Controla_EdicaoC()

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

View NoWindow "LPresenI"     SetaCorRegistro("Padrao")  
CoEdit NoWindow "LPresenC"

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()

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

Release Vars All
Release Procs All
