;** RM_0009 ********************************************************************
;* Rela‡Æo da Pontua‡Æo de Clientes                                            *
;*******************************************************************************
;Autor: Visao/Vise
;Desenvolvido    : 06/09/2019 por Bruno Carvalho
;Ultima Alteracao: 11/11/2019 por Bruno Carvalho                   
;Motivo Alteracao: Ajustes filtro por faixa de pontos -> Selecao_Pontos() 
;Ultima Alteracao: 05/02/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado ValidarModelosRelatorios()
;Ultima Alteracao: 05/02/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado ValidarModelosRelatorios()
;Ultima Alteracao: 07/04/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog     

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc Seleciona()

If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"ConsPtoC") And
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"ConsPtoI")
   Then {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"ConsPtoC" Enter 
        Moveto [Numero do Lancamento  ] TypeIn "_NLanc"
        Switch
          Case VSDGCODMODELO="05" Or
               VSDGCODMODELO="05A" : Moveto [Situacao] TypeIn "..FINALIZAD.."
          Case VSDGCODMODELO="06"  : Moveto [Situacao] TypeIn "..CANCELAD.."
          Case VSDGCODMODELO="01"  : Moveto [Situacao] TypeIn "Not ..CANCELAD.."
        EndSwitch  
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"ConsPtoI" Enter 
        Moveto [Numero do Lancamento  ] Check TypeIn "_NLanc"
        Moveto [Sequencia             ] Check
        Moveto [Codigo da Empresa     ] Check
        Moveto [Codigo do Documento   ] Check
        Moveto [Numero do Documento   ] Check
        Moveto [Serie do Documento    ] Check
        Moveto [Codigo                ] Check TypeIn  "~VSDGDESTINAT.."
        Moveto [Data de Emissao       ] Check TypeIn ">=~DATA_LIMITE"
        Moveto [Pontos Quantidade     ] Check
        Moveto [Pontos Saldo          ] Check
        Moveto [Pontos Resgate        ] Check
        Moveto [Pontos Valor          ] Check
        Do_It!                               
        ClearAll
        
        Adiciona_Campo("Answer","Pontos Total(N),Pontos AResgatar(N)")
        ClearAll
EndIf
                             
EndProc ;Seleciona()      

;*******************************************************************************
;* Rotina p/ Verificar a Pontua‡Æo A Expirar/Expirada                          *
;*******************************************************************************
Proc Verifica_Pontuacao()    

{Ask} {PontoC} 
Moveto [Codigo da Empresa       ] Check
Moveto [Codigo do Documento     ] Check
Moveto [Numero do Documento     ] Check
Moveto [Serie do Documento      ] Check
Switch
  Case VSDGCODMODELO="02" : 
       Moveto [Data de Emissao] Check TypeIn "<~DATA_LIMITE"
  Case VSDGCODMODELO="03" : 
       Moveto [Data de Emissao] Check TypeIn ">=~DATA_LIMITE,<~DATA_LIMITE+30"        
EndSwitch 
Moveto [Codigo                  ] Check TypeIn "~VSDGDESTINAT.."  
Moveto [Pontos Quantidade       ] Check 
Moveto [Pontos Saldo            ] Check TypeIn "Not 0" 
Moveto [Pontos Valor            ] Check
Moveto [Situacao                ]       TypeIn "Not C"
Do_it!
ClearAll

EndProc ;Verifica_Pontuacao()      

;*******************************************************************************
;* Rotina p/ Montar Extrato                                                    *
;*******************************************************************************
Proc Monta_Extrato()
Private TabelaAux,REG_EXTRATO,ii,AUX_LANC,SEQ

If IsEmpty(Tabela)
   Then Return
EndIf   

TabelaAux=Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Vendas\\RM_0009A" TabelaAux
Empty TabelaAux

AUX_LANC = "***"

View TabelaAux
CoEdit Tabela
Scan
  Barra(NRecords(Tabela), RecNo())
  Aguarde("Aguarde, ajustando dados "+BARRA_STRING)
  
  CopyToArray REG_EXTRATO
  
  If AUX_LANC<>[Numero do Lancamento]
     Then AUX_LANC = [Numero do Lancamento]
          SEQ      = 0
          GetRecord "\\Sistemas\\Cadastro\\Destinat" REG_EXTRATO["Codigo"] To REG_DESTINAT   
  EndIf   
  SEQ = SEQ + 1
  Moveto TabelaAux
  For ii From 1 To 2
    If ii=1
       Then Moveto [Codigo da Empresa]
            Locate IndexOrder by "Ind01" REG_EXTRATO["Codigo da Empresa"], 
                                         REG_EXTRATO["Codigo do Documento"],
                                         REG_EXTRATO["Numero do Documento"],
                                         REG_EXTRATO["Serie do Documento"]
            If RetVal
               Then Loop
            EndIf                                   
    EndIf                                            
    End Down
    [Numero do Lancamento  ] = REG_EXTRATO["Numero do Lancamento"]
    [SeqLanc               ] = SEQ
    [Sequencia             ] = ii                        
    [Codigo da Empresa     ] = REG_EXTRATO["Codigo da Empresa"]
    [Codigo do Documento   ] = REG_EXTRATO["Codigo do Documento"]
    [Numero do Documento   ] = REG_EXTRATO["Numero do Documento"]
    [Serie do Documento    ] = REG_EXTRATO["Serie do Documento"]
    [Codigo                ] = REG_EXTRATO["Codigo"]
    [Razao Social          ] = REG_DESTINAT["Razao Social"]
    [Nome Fantasia EmitDest] = REG_DESTINAT["Nome Fantasia EmitDest"]
    [CGC                   ] = REG_DESTINAT["CGC"]
    [Cidade                ] = REG_DESTINAT["Cidade"]
    [UF                    ] = REG_DESTINAT["UF"]
    [Telefone              ] = REG_DESTINAT["Telefone"]
    [Celular               ] = REG_DESTINAT["Celular"]    
    [Data de Emissao       ] = REG_EXTRATO["Data de Emissao"]
    Switch
     ;Case ii=1 : [Pontos Total        ] = REG_EXTRATO["Pontos Total"]
     ;            [Pontos AResgatar    ] = REG_EXTRATO["Pontos AResgatar"]
      Case ii=1 : [Pontos Quantidade   ] = REG_EXTRATO["Pontos Quantidade"]
                  [Pontos Valor        ] = REG_EXTRATO["Pontos Valor"]
      Case ii=2 : [Pontos Resgate      ] = REG_EXTRATO["Pontos Resgate"] 
                  [Pontos Saldo        ] = REG_EXTRATO["Pontos Saldo"]
    EndSwitch
  EndFor
  UnLockRecord
  
  Moveto Tabela
EndScan
Do_it!
ClearAll

{Ask} TypeIn TabelaAux Enter Check
Moveto [Sequencia          ] TypeIn "1"
Do_it!
ClearAll

Rename "Answer" Tabela

{Ask} TypeIn TabelaAux Enter Check
Moveto [SeqLanc            ] Check TypeIn "Calc Sum as SeqLanc"
Moveto [Sequencia          ]       TypeIn "2"
Moveto [Codigo da Empresa  ] Check
Moveto [Codigo do Documento] Check
Moveto [Numero do Documento] Check
Moveto [Serie do Documento ] Check
Moveto [Data de Emissao    ] Check
Moveto [Pontos Quantidade  ] Check
Moveto [Pontos Saldo       ] Check TypeIn "Calc Sum as Pontos Saldo"
Moveto [Pontos Resgate     ] Check TypeIn "Calc Sum as Pontos Resgate"
Moveto [Pontos Valor       ] Check
Moveto [Pontos AResgatar   ] Check
Do_it!
ClearAll

{Ask} {Answer}
Moveto [Numero do Lancamento  ] TypeIn "_NLanc"
Moveto [Sequencia             ] TypeIn "_Seq"
Moveto [Codigo                ] TypeIn "_Cod"
Moveto [Razao Social          ] TypeIn "_Raz"
Moveto [Nome Fantasia EmitDest] TypeIn "_Nom"
Moveto [CGC                   ] TypeIn "_CGC"
Moveto [Cidade                ] TypeIn "_Cid"
Moveto [UF                    ] TypeIn "_UF"
Moveto [Telefone              ] TypeIn "_Tel"
Moveto [Celular               ] TypeIn "_Cel"
Moveto [Pontos Saldo          ] TypeIn "_PtoS"
Moveto [Pontos Resgate        ] TypeIn "_PtoR"
{Ask} TypeIn Tabela Enter "Fast Insert"
Moveto [Numero do Lancamento  ] TypeIn "_NLanc"
Moveto [SeqLanc               ] TypeIn "1"
Moveto [Sequencia             ] TypeIn "_Seq"
Moveto [Codigo                ] TypeIn "_Cod"
Moveto [Razao Social          ] TypeIn "_Raz"
Moveto [Nome Fantasia EmitDest] TypeIn "_Nom"
Moveto [CGC                   ] TypeIn "_CGC"
Moveto [Cidade                ] TypeIn "_Cid"
Moveto [UF                    ] TypeIn "_UF"
Moveto [Telefone              ] TypeIn "_Tel"
Moveto [Celular               ] TypeIn "_Cel"
Moveto [Pontos Saldo          ] TypeIn "_PtoS"
Moveto [Pontos Resgate        ] TypeIn "_PtoR"
Do_it!
ClearAll

{Ask} {Consptoc}
Moveto [Numero do Lancamento] TypeIn "_NLanc" 
Moveto [Data                ] TypeIn "_Data"
{Ask} TypeIn Tabela Enter 
Moveto [Numero do Lancamento] TypeIn "_NLanc"            
Moveto [Sequencia           ] TypeIn "2" 
Moveto [Data de Emissao     ] TypeIn "Changeto _Data"
Do_it!
ClearAll
        
CopyReport "\\Base\\Sistemas\\Vendas\\RM_0009A" "R"  Tabela "R"
Sort Tabela On "Sequencia","Codigo da Empresa","Codigo do Documento","Numero do Documento","Serie do Documento"
ClearAll

Delete TabelaAux

EndProc ;Monta_Extrato()

;*******************************************************************************
;* Rotina p/ ajustar dados sint‚ticos                                          *
;*******************************************************************************
Proc Ajusta_Dados()

If VSDGCODMODELO="04A" 
   Then {Ask} TypeIn Tabela_ConsPtoI Enter           
   Else {Ask} TypeIn Tabela          Enter
EndIf
Moveto [Codigo        ] Check
Moveto [Pontos Resgate] TypeIn "Calc Sum as Pontos Resgate"
If VSDGCODMODELO="04A" 
   Then Moveto [Pontos Quantidade] TypeIn "Calc Sum as Pontos Quantidade"
        Moveto [Pontos Saldo     ] TypeIn "Calc Sum as Pontos Saldo"
        Moveto [Pontos Valor     ] TypeIn "Calc Sum as Pontos Valor"
   Else Moveto [Pontos AResgatar ] Check
        Moveto [Pontos Total     ] Check
EndIf
Do_It!     
ClearAll

Empty Tabela_ConsPtoI
Adiciona_Campo(Tabela_ConsPtoI,"Pontos Total(N),Pontos AResgatar(N)")
CleaRall

If Not IsEmpty("Answer")
   Then Adiciona_Campo("Answer","Numero do Lancamento(A6)")
        
        SEQ = 0
        CoEdit "Answer"
        Scan 
           Barra(NRecords("Answer"), RecNo())
           Aguarde("Aguarde, ajustando dados "+BARRA_STRING)
           SEQ = SEQ + 1
          [Numero do Lancamento]=AlinhM(StrVal(SEQ),6) 
        EndScan
        Do_it!
        ClearAll
   
        {Ask} {Answer}
        Moveto [Codigo                ] TypeIn "_Cod"
        Moveto [Pontos Resgate        ] TypeIn "_PtR" 
        Moveto [Numero do Lancamento  ] TypeIn "_NLanc"
        If VSDGCODMODELO="04A" 
           Then Moveto [Pontos Quantidade     ] TypeIn "_PtQ"
                Moveto [Pontos Saldo          ] TypeIn "_PtS"
                Moveto [Pontos Valor          ] TypeIn "_PtV"
           Else Moveto [Pontos AResgatar      ] TypeIn "_PtA"
                Moveto [Pontos Total          ] TypeIn "_PtT" 
        EndIf
        {Ask} TypeIn Tabela_ConsPtoI Enter TypeIn " Insert" 
        Moveto [Numero do Lancamento  ] TypeIn "_NLanc" 
        Moveto [Codigo                ] TypeIn "_Cod"
        Moveto [Pontos Resgate        ] TypeIn "_PtR"
        If VSDGCODMODELO="04A" 
           Then Moveto [Pontos Quantidade     ] TypeIn "_PtQ"
                Moveto [Pontos Saldo          ] TypeIn "_PtS"
                Moveto [Pontos Valor          ] TypeIn "_PtV"                 
           Else Moveto [Pontos AResgatar      ] TypeIn "_PtA"
                Moveto [Pontos Total          ] TypeIn "_PtT" 
        EndIf
        Do_It!
        ClearAll
EndIf

EndProc ;Ajusta_Dados()
                 
;*******************************************************************************
;* Rotina para selecionar clientes com pontos determinados pela faixa          *
;*******************************************************************************
Proc Selecao_Pontos(TABELA)
Private TABELA

{Ask} TypeIn Tabela Enter Check
If VSDGCODMODELO="05A"
   Then Moveto [Pontos Resgate] 
   Else Moveto [Pontos Saldo  ]
EndIf
If VSDGFAIXAFIM=0 Or IsBlank(VSDGFAIXAFIM)
   Then TypeIn  ">=~VSDGFAIXAINI"
   Else TypeIn  ">=~VSDGFAIXAINI,<=~VSDGFAIXAFIM"
EnDIf   
Do_it!
CleaRAll

Empty Tabela
Add "Answer" Tabela

EndProc ; Selecao_Pontos()

;*******************************************************************************
;* 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"] =  27:
          Temp=False
         Switch
            Case Campo="TG_DESTINAT"       : Campo="NO"
            Case Campo="TG_DTINI"          : Campo="TG_DESTINAT"
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"
            Case Campo="TG_FAIXAINI"       : Campo="TG_DTFIM"
            Case Campo="TG_FAIXAFIM"       : campo="TG_FAIXAINI"
            Case Campo="TG_CODMODELO"      : Campo="TG_FAIXAFIM"
            Case Campo="YES" Or Campo="NO" : Campo="TG_DESTINAT"
          EndSwitch
     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"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_DESTINAT"       : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"          : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"          : Campo="TG_FAIXAINI"
                    Case Campo="TG_FAIXAINI"       : Campo="TG_FAIXAFIM"
                         VSDGFAIXAINI=ControlValue("TG_FAIXAINI") 
                    Case Campo="TG_FAIXAFIM"       : Campo="TG_CODMODELO"
                         VSDGFAIXAFIM=ControlValue("TG_FAIXAFIM")
                    Case Campo="TG_CODMODELO"      : Campo="YES"                   
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="TG_FAIXAINI" :   MSG_CAMPO="Informe a faixa inicial de pontos"
  Case Campo="TG_FAIXAFIM" :   MSG_CAMPO="Informe a faixa final de pontos (Em Branco=TODOS a partir da faixa inicial)"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc                     

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ModeloRelatoriosCarregaLista()

VSDGCODMODELO     = ""
VSDGMODELO        = ""

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

MSG_CAMPO="Situa‡Æo: (E)EXTRATO  (A)A RESGATAR  (R)RESGATADOS  (C)CANCELADO"

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01  Extrato de Pontos")
ModeloRelatoriosAdd("02  Pontua‡Æo Expirada")
ModeloRelatoriosAdd("03  Pontua‡Æo a Expirar nos pr¢ximos 30 Dias")
ModeloRelatoriosAdd("04  Pontua‡Æo a Resgatar - Anal¡tico")
ModeloRelatoriosAdd("04A Pontua‡Æo a Resgatar - Sint‚tico")
ModeloRelatoriosAdd("05  Pontua‡Æo Resgatada  - Anal¡tico")
ModeloRelatoriosAdd("05A Pontua‡Æo Resgatada  - Sint‚tico")
ModeloRelatoriosAdd("06  Pontua‡Æo Cancelada")
ModeloRelatoriosAdd("Fim")

EndProc ;ModeloRelatoriosCarregaLista

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()

PARAM_RELATORIO    = True

VSDGEMPRESA        = ""
VSDGNOMEMP         = ""
VSDGDESTINAT       = ""
VSDGNOMDEST        = ""
VSDGDTINI          = BlankDate()
VSDGDTFIM          = BlankDate()
VSDGCODMODELO      = ""
VSDGMODELO         = ""
VSDGFAIXAINI       = BlankNum()
VSDGFAIXAFIM       = BlankNum()

ModeloRelatoriosCarregaLista()

While True

  ShowDialog "Consulta de Pontua‡Æo" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
     -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
     @ 05,12   Height 14 Width 72

    Label  @ 00,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMDEST"  To VSDGNOMDEST
    
    Label  @ 02,00 "Periodo Referente de" For "TG_DTINI"
    Accept @ 03,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,16 "at‚" For "TG_DTFIM"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
    
    Label  @ 04,00 "Faixa de Pontos de" For "TG_FAIXAINI"
    Accept @ 05,03 Width 13 "N"  Picture "#*#" Tag "TG_FAIXAINI" To VSDGFAIXAINI
    Label  @ 05,16 "at‚" For "TG_FAIXAFIM"
    Accept @ 05,21 Width 13 "N"  Picture "#*#" Tag "TG_FAIXAFIM" To VSDGFAIXAFIM
    
    Label  @ 07,00  "Modelo de ~R~elat¢rio"  For "TG_CODMODELO"
    Accept @ 08,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 08,06  Width 63 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO        

    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 QuitLoop EndIf
  If Not ValidarModelosRelatorios() Then Loop EndIf

  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf
  
  If VSDGFAIXAFIM=0 Then VSDGFAIXAFIM = BlankNum() EndIf
  If VSDGFAIXAFIM>0 And VSDGFAIXAINI>VSDGFAIXAFIM 
     Then Mensagem("A faixa final informada ‚ menor que a faixa inicial!")
          Loop
  EndIf
  
  If VSDGFAIXAINI>0 Or VSDGFAIXAFIM>0    
     Then If VSDGCODMODELO="04" Or VSDGCODMODELO="01" Or VSDGCODMODELO="05"  Or VSDGCODMODELO="06"
             Then Mensagem("NÆo h  sele‡Æo de faixa para modelos ANALÖTICOS/EXTRATO DE PONTOS/CANCELADOS!")
                  VSDGFAIXAINI = BlankNum()
                  VSDGFAIXAFIM = BlankNum()                               
          EndIf     
  EndIf                  
         
  If VSDGCODMODELO="04" Or VSDGCODMODELO="04A"
     Then PARAM_PONTOS="PONTUACAO"
          Play "ConsPto"
          If Not PARAM_PONTOS
             Then Loop
          EndIf  
          If Not IsAssigned(Tabela_ConsPtoI) Or IsEmpty(Tabela_ConsPtoI)
             Then MENSAGEM("N„o existem registros a processar")
                  Loop
          EndIf        
  EndIf   
 
  DISPOSITIVO()
  If OK=""  Then Loop EndIf
                   
  Switch
    Case VSDGCODMODELO="02" Or VSDGCODMODELO="03" :
         PARAM_PONTOS="DATA_LIMITE"
         Play "ConsPto"
         
         AGUARDE("Aguarde, gerando o relat¢rio")
         Verifica_Pontuacao()
         
         If IsEmpty("Answer")  
            Then MENSAGEM("N„o existem registros a processar")
                 Delete "Answer"
                 Loop
         EndIf
         
         Tabela=Cria_Temp(PrivDir())
         Copy "\\Base\\Sistemas\\Vendas\\RM_0009" Tabela
         
         NLANC     = 0
         
         DOCTO_EMP = "***"
         DOCTO_COD = "***"
         DOCTO_NUM = "***"        
         DOCTO_SER = "***"
         DOCTO_CLI = "***"
         
         View Tabela
         CoEdit "Answer"
         Scan
           Barra(NRecords("Answer"), RecNo())
           Aguarde("Aguarde, ajustando dados "+BARRA_STRING)
           CopyToArray REG_ANSWER
           
           If [Codigo da Empresa  ]<>DOCTO_EMP And 
              [Codigo do Documento]<>DOCTO_COD And 
              [Numero do Documento]<>DOCTO_NUM And
              [Serie do Documento ]<>DOCTO_SER And 
              [Codigo             ]<>DOCTO_CLI
              Then DOCTO_EMP = [Codigo da Empresa  ] 
                   DOCTO_COD = [Codigo do Documento]   
                   DOCTO_NUM = [Numero do Documento]       
                   DOCTO_SER = [Serie do Documento ]
                   DOCTO_CLI = [Codigo             ]
                   
                   NLANC = NLANC + 1
                   SEQ   = 0
           EndIf
           SEQ = SEQ + 1       
           
           Moveto Tabela
           End Down
           [Numero do Lancamento] = AlinhM(Strval(NLANC),6)  
           [Sequencia           ] = SEQ   
           [Codigo da Empresa   ] = REG_ANSWER["Codigo da Empresa"]  
           [Codigo do Documento ] = REG_ANSWER["Codigo do Documento"] 
           [Numero do Documento ] = REG_ANSWER["Numero do Documento"] 
           [Serie do Documento  ] = REG_ANSWER["Serie do Documento"] 
           [Codigo              ] = REG_ANSWER["Codigo"] 
           [Data de Emissao     ] = REG_ANSWER["Data de Emissao"] 
           [Pontos Quantidade   ] = REG_ANSWER["Pontos Quantidade"] 
           [Pontos Saldo        ] = REG_ANSWER["Pontos Saldo"]  
           [Pontos Valor        ] = REG_ANSWER["Pontos Valor"]   
           UnLockRecord
           
           Moveto "Answer"
         EndScan
         Do_it!
         ClearAll
         
         If VSDGFAIXAINI>0 Or VSDGFAIXAFIM>0 Then Selecao_Pontos(Tabela) EndIf
                           
         Switch
           Case VSDGCODMODELO = "02"  : TITULO_RELATORIO = "Extrato de Pontos Expirados at‚ "+Format("D13",DATA_LIMITE-1)
                                        IMPRIREL(Tabela,"7")
           Case VSDGCODMODELO = "03"  : TITULO_RELATORIO = "Extrato de Pontos a Expirar em 30 Dias de "+Format("D13",DATA_LIMITE)+" at‚ "+Format("D13",DATA_LIMITE+30)
                                        IMPRIREL(Tabela,"8") 
         EndSwitch         
    
    Case VSDGCODMODELO="04" Or VSDGCODMODELO="04A" :
         If IsEmpty(Tabela_ConsPtoI)  
            Then MENSAGEM("N„o existem registros a processar")
                 Delete Tabela_ConsPtoI
                 Loop
         EndIf
                                  
         TITULO_RELATORIO = "Consulta da Pontuacao em Aberto de "+Format("D13",VSDGDTINI)+" at‚ "+Format("D13",VSDGDTFIM)
         If Search("A",VSDGCODMODELO)=0 ;Sint‚tico
            Then CopyReport "\\Base\\Sistemas\\Vendas\\RM_0009"  "R"  Tabela_ConsPtoI "R"
                 IMPRIREL(Tabela_ConsPtoI,"R")
            Else Ajusta_Dados()
                 If VSDGFAIXAINI>0 Or VSDGFAIXAFIM>0 Then Selecao_Pontos(Tabela_ConsPtoI) EndIf
                 CopyReport "\\Base\\Sistemas\\Vendas\\RM_0009"  "4"  Tabela_ConsPtoI "R"
                 IMPRIREL(Tabela_ConsPtoI,"R")
         EndIf     
    OtherWise :  
         AGUARDE("Aguarde, gerando o relat¢rio")
         Tabela=Cria_Temp(PrivDir())
         Copy "\\Base\\Sistemas\\Vendas\\RM_0009" Tabela
          
         Switch
           Case VSDGCODMODELO = "01"  : TITULO_RELATORIO = "Extrato de Pontos de "+Format("D13",VSDGDTINI)+" at‚ "+Format("D13",VSDGDTFIM)
           Case VSDGCODMODELO = "05" Or  
                VSDGCODMODELO = "05A" : TITULO_RELATORIO = "Consulta de Pontos RESGATADOS de "+Format("D13",VSDGDTINI)+" at‚ "+Format("D13",VSDGDTFIM)
           Case VSDGCODMODELO = "06"  : TITULO_RELATORIO = "Consulta de Pontos CANCELADOS de "+Format("D13",VSDGDTINI)+" at‚ "+Format("D13",VSDGDTFIM)
         EndSwitch  
          
         PARAM_PONTOS="DATA_LIMITE"
         Play "ConsPto"
         
         Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
         While Novo_Dir_Trab()
          If IsTable("Answer")     Then Delete "Answer" EndIf
           Seleciona()
           If Not IsTable("Answer") Then Loop EndIf
           If IsTable(Tabela)
              Then Add "Answer" Tabela
              Else Rename "Answer" Tabela
           EndIf
         EndWhile
        
         If IsEmpty(Tabela) And VSDGCODMODELO="01"  
            Then MENSAGEM("N„o existem registros a processar")
                 Delete Tabela
                 Loop
         EndIf
         
         PARAM_PONTOS="PONTUACAO"
         Play "ConsPto"      
         
         If IsAssigned(Tabela_ConsPtoI) And IsTable(Tabela_ConsPtoI)
            Then If IsAssigned(TabelaPontos) And IsTable(TabelaPontos)
                    Then {Ask} TypeIn TabelaPontos Enter
                         Moveto [Codigo      ] Check
                         Moveto [Pontos Valor]       TypeIn "Calc Sum as Pontos Total"
                         Do_it!
                         ClearAll
                         
                         If Not IsEmpty("Answer")
                            Then Adiciona_Campo("Answer","Pontos Total2(N)")
                                 ClearAll     
                                 
                                 CoEdit "Answer"
                                 Scan
                                   Barra(NRecords("Answer"), RecNo())
                                   Aguarde("Aguarde, ajustando dados "+BARRA_STRING)     
                                   [Pontos Total2] = Round(NumVal([Pontos Total]),0)
                                 EndScan
                                 Do_It!
                                 ClearAll
                                 
                                 Tabela_Aux=Cria_Temp(PrivDir())
                                 Copy "Answer" Tabela_Aux
                           
                                 {Ask} TypeIn Tabela_Aux Enter
                                 Moveto [Codigo          ] TypeIn "_Cod"
                                 Moveto [Pontos Total2   ] TypeIn "_Ponto"
                                 {Ask} TypeIn Tabela Enter
                                 Moveto [Codigo          ] TypeIn "_Cod"
                                 Moveto [Pontos Total    ] TypeIn "Changeto _Ponto"
                                 Do_it!
                                 ClearAll
                                 
                                 Delete Tabela_Aux
                                 
                                 If VSDGCODMODELO = "05A"
                                    Then {Ask} TypeIn Tabela Enter
                                         Moveto [Codigo          ] Check
                                         Moveto [Pontos Resgate  ] TypeIn "Calc Sum as Pontos Resgate"
                                         Moveto [Pontos Total    ] Check
                                         Do_it!
                                         ClearAll
                                         
                                         Empty Tabela
                                         
                                         {Ask} {Answer}
                                         Moveto [Codigo              ] TypeIn "_Cod"
                                         Moveto [Pontos Resgate      ] TypeIn "_PtR"
                                         Moveto [Pontos Total        ] TypeIn "_PtT"
                                         {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
                                         Moveto [Numero do Lancamento] TypeIn "_Cod"
                                         Moveto [Codigo              ] TypeIn "_Cod"
                                         Moveto [Pontos Resgate      ] TypeIn "_PtR"
                                         Moveto [Pontos Total        ] TypeIn "_PtT"
                                         Do_it!
                                         ClearAll
                                 EndIf
                                 
                         EndIf         
                 EndIf   
                 
                 {Ask} TypeIn Tabela_ConsPtoI Enter
                 Moveto [Codigo      ] Check
                 Moveto [Pontos Saldo] TypeIn "Calc Sum as Pontos"
                 Do_it!
                 ClearAll
                 
                 If Not IsEmpty("Answer")
                    Then {Ask} {Answer}
                         Moveto [Codigo          ] TypeIn "_Cod"
                         Moveto [Pontos          ] TypeIn "_Ponto"
                         {Ask} TypeIn Tabela Enter
                         Moveto [Codigo          ] TypeIn "_Cod"
                         Moveto [Pontos AResgatar] TypeIn "Changeto _Ponto"
                         Do_it!
                         ClearAll
                 EndIf 
         EndIf
         
         Switch
           Case VSDGCODMODELO = "01"        : Monta_Extrato()
           Case Search("A",VSDGCODMODELO)>0 : Ajusta_Dados()
         EndSwitch
         
         If VSDGFAIXAINI>0 Or VSDGFAIXAFIM>0 Then Selecao_Pontos(Tabela) EndIf
         
         Switch
           Case VSDGCODMODELO = "01"  : IMPRIREL(Tabela,"R")
           Case VSDGCODMODELO = "06"  : IMPRIREL(Tabela,"2")
           Case VSDGCODMODELO = "05"  : IMPRIREL(Tabela,"3")
           Case VSDGCODMODELO = "05A" : IMPRIREL(Tabela,"6")
         EndSwitch          
         Delete Tabela
         
  EndSwitch
  If IsAssigned(Tabela)          And IsTable(Tabela)          Then Delete Tabela          EndIf
  If IsAssigned(TabelaPontos)    And IsTable(TabelaPontos)    Then Delete TabelaPontos    EndIf
  If IsAssigned(Tabela_ConsPtoI) And IsTable(Tabela_ConsPtoI) Then Delete Tabela_ConsPtoI EndIf
EndWhile
ClearAll
Release Vars All
Release Procs All
