;** VisitaR ********************************************************************
;*  Programa‡Æo de Visitas - Atualizar Registro dos Clientes                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 16/06/2015 por Bruno Carvalho
;Ultima Alteracao: 30/06/2015 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes p/ pegar apenas as destina‡äes de VENDAS dos Pedidos        
;Ultima Alteracao: 02/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes p/ controle em SCAN na proc Atualiza_Comissao() e adicionado Atualiza_Tabelas()
;Ultima Alteracao: 03/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes no ShowDialog p/ quando VSDGPROGRAMACAO<>"" nao passar nos outros campos
;Ultima Alteracao: 03/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Atualiza_Comissao() ajustado p/ pegar todas as NOTAS DE SAIDA independente da DT EMISSAO, comparando pelo numero do pedido
;Ultima Alteracao: 06/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Se cidade do pedido diferente do cadastro do cliente, ser  exibido nas ocorrˆncias de erro
;Ultima Alteracao: 07/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Alterado [Descricao da Destinacao] de "TROCA" para "TROC"
;Ultima Alteracao: 21/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Adicionado REGRA_APURACAO_COMISSAO p/ Pedidos FATURADOS ou TODOS c/ exce‡äes dos CANCELADOS E SUSPENSOS 
;Ultima Alteracao: 28/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Novos ajustes p/ REGRA_APURACAO_COMISSAO, onde esta pegando o valor da nota fiscal e a qtd das NOTAS e nÆo dos pedidos (*Regra PadrÆo)
;Ultima Alteracao: 31/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Excluir as notas canceladas  
;Ultima Alteracao: 17/08/2015 por Bruno Carvalho                       
;Motivo Alteracao: Adicionado Apura_Comissao() p/ apurar apenas comissäes de notas faturadas subtraindo as trocas ocorridas no periodo  
;Ultima Alteracao: 11/09/2015 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes Atualiza_Tabelas_Temporarias()
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 28/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 28/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 29/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado ValidarModelosRelatorios()

;*******************************************************************************
;* Rotina das Rela‡äes de Visita                                               *
;*******************************************************************************
Proc Relacao_Visitas()

Aguarde("Montando relat¢rio das visitas: Etapa 1")
TEMP = True
                                      
Empty Tabela

;---- Tabela Temporaria --------------------------------------------------------
{Ask} {VisitaC} Check
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.." 
Moveto [Numero da Programacao  ] TypeIn "~VSDGPROGRAMACAO.."   
Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
Moveto [Situacao da Programacao] TypeIn "ABERTO"
Moveto [Data Inicial           ] TypeIn ">=~VSDGDTINI"   
Moveto [Data Final             ] TypeIn "<=~VSDGDTFIM"    
Do_It!
ClearAll

TabelaC = Cria_Temp(PrivDir())
Copy "Answer" TabelaC

{Ask} TypeIn TabelaC Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
{Ask} {VisitaCD} Check
Moveto [Numero da Programacao  ] TypeIn "_NProg"   
Do_IT!
ClearAll

TabelaCD = Cria_Temp(PrivDir())
Copy "Answer" TabelaCD

{Ask} TypeIn TabelaC Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"  
{Ask} {VisitaCL} Check
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Do_It!
ClearAll

TabelaCL = Cria_Temp(PrivDir())
Copy "Answer" TabelaCL

{Ask} TypeIn TabelaC Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"  
{Ask} {VisitaCM} Check
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Do_It!
ClearAll

TabelaCM = Cria_Temp(PrivDir())
Copy "Answer" TabelaCM

If IsEmpty(TabelaC) Or IsEmpty(TabelaCD) Or IsEmpty(TabelaCL)  Or IsEmpty(TabelaCM)
   Then Return False
EndIf

Atualiza_Tabelas_Temporarias()
Aguarde("Montando relat¢rio das visitas: Etapa 2")

;---- Por Cliente --------------------------------------------------------
{Ask} TypeIn TabelaC Enter
Moveto [Codigo da Empresa      ] Check 
Moveto [Nome Fantasia Empresa  ] Check 
Moveto [Numero da Programacao  ] Check TypeIn "_NProg"   
Moveto [Codigo do Representante] Check 
Moveto [Nome Fantasia Represent] Check
Moveto [Data Inicial           ] Check   
Moveto [Data Final             ] Check
Moveto [Situacao da Programacao] Check
Moveto [Valor da Comissao      ] Check
{Ask} TypeIn TabelaCD Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
If VSDGCODMODELO="06"
   Then Moveto [Cidade         ] Check
EndIf  
{Ask} TypeIn TabelaCL Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Codigo                 ] Check 
Moveto [Nome Fantasia EmitDest ] Check
Moveto [Descricao do Status    ] Check
Moveto [Pedido_Quantidade      ] Check TypeIn "as Numero do Pedido"
Moveto [Pedido_Valor           ] Check TypeIn "as Valor Nota Fiscal"
Moveto [Pedido_NumeroItens     ] Check TypeIn "as Quantidade"
Do_It!
ClearAll

Switch
  Case VSDGCODMODELO="01" Or VSDGCODMODELO="01B" : 
       ;---- Ocorrˆncia de Erros -----------------------------------------------
       If IsAssigned(Tabela_Erro)                                                        
          Then If IsTable(Tabela_Erro)
                  Then {Ask} TypeIn Tabela_Erro Enter
                       Moveto [Codigo da Empresa      ] TypeIn "_CodE" 
                       Moveto [Nome Fantasia Empresa  ] TypeIn "_NomE"
                       Moveto [Numero da Programacao  ] TypeIn "_NProg"
                       Moveto [Codigo do Representante] TypeIn "_CodR"
                       Moveto [Nome Fantasia Represent] TypeIn "_NomF"
                       Moveto [Data Inicial           ] TypeIn "_DtI"
                       Moveto [Data Final             ] TypeIn "_DtF"
                       Moveto [Situacao da Programacao] TypeIn "_Sit"
                       Moveto [Codigo                 ] TypeIn "_CodC"
                       Moveto [Nome Fantasia EmitDest ] TypeIn "_NomC"
                       Moveto [Quantidade de Itens    ] TypeIn "_QtdI"
                       Moveto [Valor Total Pedidos    ] TypeIn "_VrP"
                       Moveto [Descricao do Status    ] TypeIn "_DesS"
                       {Ask} TypeIn Tabela Enter TypeIn "Insert"
                       Moveto [Codigo da Empresa      ] TypeIn "_CodE" 
                       Moveto [Nome Fantasia Empresa  ] TypeIn "_NomE"
                       Moveto [Numero da Programacao  ] TypeIn "_NProg"
                       Moveto [Codigo do Representante] TypeIn "_CodR"
                       Moveto [Nome Fantasia Represent] TypeIn "_NomF"
                       Moveto [Data Inicial           ] TypeIn "_DtI"
                       Moveto [Data Final             ] TypeIn "_DtF"
                       Moveto [Situacao da Programacao] TypeIn "_Sit"
                       Moveto [Codigo                 ] TypeIn "_CodC"
                       Moveto [Nome Fantasia EmitDest ] TypeIn "_NomC"
                       Moveto [Quantidade de Itens    ] TypeIn "_QtdI"
                       Moveto [Valor Total Pedidos    ] TypeIn "_VrP"
                       Moveto [Descricao do Status    ] TypeIn "_DesS"
                       Do_it!
                       ClearAll
                       
                       NR = NRecords(Tabela)
                       View Tabela_Erro
                       Coedit Tabela
                       Scan 
                         Barra(NR, RecNo())
                         Aguarde("Aguarde, verificando ocorrencias de erro -> ... "+BARRA_STRING)
                          
                         PEDIDO  = ""
                         OCORRENCIA_ERRO = ""
                         NPROG   = [Numero da Programacao]
                         CODIGO  = [Codigo]
                         
                         Moveto Tabela_Erro
                         Moveto [Numero da Programacao]
                         Locate NPROG
                         If RetVal
                            Then While NPROG=[Numero da Programacao]
                                   If CODIGO = [CODIGO]
                                      Then If PEDIDO=""
                                              Then If SubStr([Numero de Pedidos],7,1)="+"
                                                      Then OCORRENCIA_ERRO = SubStr([Numero de Pedidos],1,6)
                                                      Else PEDIDO          = [Numero de Pedidos]                 
                                                   EndIf
                                              Else If SubStr([Numero de Pedidos],7,1)="+"
                                                      Then OCORRENCIA_ERRO = OCORRENCIA_ERRO + SubStr([Numero de Pedidos],1,6)
                                                      Else PEDIDO = PEDIDO + ", " + [Numero de Pedidos]
                                                   EndIf   
                                           EndIf  
                                   EndIf
                                   Skip
                                   If Eot() Then QuitLoop EndIf
                                   Locate Next NPROG
                                   If Not RetVal Then QuitLoop EndIf 
                                 EndWhile
                         EndIf
                         Moveto Tabela
                         
                         If PEDIDO<>""
                            Then If Search(",",PEDIDO)>0
                                    Then [Ocorrencia de Erros] = "Nao Programado -> Pedidos: "+PEDIDO
                                    Else [Ocorrencia de Erros] = "Nao Programado -> Pedido: "+PEDIDO
                                 EndIf   
                                 If OCORRENCIA_ERRO<>""
                                    Then [Ocorrencia de Erros] = [Ocorrencia de Erros] + "\n"
                                 EndIf     
                         EndIf
                         If OCORRENCIA_ERRO<>""
                            Then If Search(",",OCORRENCIA_ERRO)>0
                                    Then [Ocorrencia de Erros] = [Ocorrencia de Erros] + "Cidade N„o Programada -> Pedidos: "+OCORRENCIA_ERRO
                                    Else [Ocorrencia de Erros] = [Ocorrencia de Erros] + "Cidade N„o Programada -> Pedido: "+OCORRENCIA_ERRO
                                 EndIf   
                         EndIf   
                         UnLockRecord
                       EndScan
                       Do_it!
                       ClearAll
               EndIf           
       EndIf
  Case VSDGCODMODELO="06" Or VSDGCODMODELO="03" :
       {Ask} {Answer}
       Moveto [Codigo da Empresa      ] Check 
       Moveto [Nome Fantasia Empresa  ] Check 
       Moveto [Codigo do Representante] Check            
       Moveto [Nome Fantasia Represent] Check
       If VSDGCODMODELO="06"
          Then Moveto [Codigo               ] TypeIn "_Cod"
               Moveto [Numero do Pedido     ] Check Typein "Not Blank"
               Moveto [Valor Nota Fiscal    ] Check Typein "Not Blank"
               Moveto [Quantidade           ] Check Typein "Not Blank"
               {Ask} {\\Sistemas\\Cadastro\\Destinat}
               Moveto [Codigo               ] Check TypeIn "_Cod"
               Moveto [Cidade               ] Check
               Do_It!
               ClearAll
               
               {Ask} {Answer}
               Moveto [Codigo da Empresa      ] Check 
               Moveto [Nome Fantasia Empresa  ] Check 
               Moveto [Codigo do Representante] Check            
               Moveto [Nome Fantasia Represent] Check                                                
               Moveto [Cidade                 ] Check
               Moveto [Codigo                 ] TypeIn "Calc Count as Numero de Clientes"
               Moveto [Numero do Pedido       ] Typein "Calc Sum as Numero de Pedidos"
               Moveto [Valor Nota Fiscal      ] Typein "Calc Sum as Valor Nota Fiscal"
               Moveto [Quantidade             ] Typein "Calc Sum as Quantidade"
               Do_It!
               ClearAll
               
               {Ask} {Answer}
               Moveto [Numero de Clientes     ] TypeIn "Changeto Blank"
               Do_It!
               ClearAll
               
               Tabela_Aux=Cria_Temp(PrivDir())
               Copy "Answer" Tabela_Aux
               
               {Ask} TypeIn TabelaC Enter
               Moveto [Numero da Programacao  ] TypeIn "_NProg"
               Moveto [Codigo do Representante] Check               
               {Ask} TypeIn TabelaCD Enter
               Moveto [Numero da Programacao  ] TypeIn "_NProg"
               Moveto [Cidade                 ] TypeIn "_Cid"
               {Ask} TypeIn TabelaCL Enter
               Moveto [Numero da Programacao  ] TypeIn "_NProg" 
               Moveto [Codigo                 ] TypeIn "_Cod"
               {Ask} {\\Sistemas\\Cadastro\\Destinat}
               Moveto [Codigo                 ] TypeIn "_Cod, Calc Count as Numero de Clientes"
               Moveto [Cidade                 ] Check TypeIn "_Cid"
               Do_It!
               ClearAll
                
               NR = NRecords("Answer")
               View TabelaC
               View TabelaCD
               View Tabela_Aux
               Coedit "Answer"
               Scan
                 Barra(NR, RecNo())
                 Aguarde("Aguarde, verificando cidades "+BARRA_STRING)
                 
                 ACHOU_CIDADE = False
                 Moveto Tabela_Aux
                 Moveto [Cidade]
                 Locate [Answer->Cidade]
                 If RetVal
                    Then While [Cidade]=[Answer->Cidade]
                           If [Codigo do Representante]=[Answer->Codigo do Representante]
                              Then [Numero de Clientes] = [Answer->Numero de Clientes]
                                   ACHOU_CIDADE = True
                                   QuitLoop
                           EndIf
                           Skip
                           If Eot() Then QuitLoop EndIf
                           Locate Next [Answer->Cidade]
                           If Not RetVal Then QuitLoop EndIf
                         EndWhile
                 EndIf        
                 If Not ACHOU_CIDADE
                    Then Moveto TabelaCD
                         Moveto [Cidade]
                         Locate [Answer->Cidade]
                         If RetVal
                            Then While [Cidade]=[Answer->Cidade]
                                   NPROG = [Numero da Programacao]
                                   Moveto TabelaC
                                   Moveto [Numero da Programacao]
                                   Locate NPROG
                                   If RetVal
                                      Then If [Codigo do Representante]=[Answer->Codigo do Representante]
                                              Then AUX_REP  = [Nome Fantasia Represent]
                                                   AUX_EMP  = [Codigo da Empresa      ]
                                                   AUX_NEMP = [Nome Fantasia Empresa  ]
                                                   ACHOU_CIDADE = True
                                                   QuitLoop
                                              Else Moveto TabelaCD     
                                           EndIf        
                                   EndIf
                                   Skip
                                   If Eot() Then QuitLoop EndIf
                                   Locate Next [Answer->Cidade]
                                   If Not RetVal Then QuitLoop EndIf
                                 EndWhile 
                         EndIf
                         If ACHOU_CIDADE 
                            Then Moveto Tabela_Aux  
                                 End Down
                                 [Codigo da Empresa      ] = AUX_EMP
                                 [Nome Fantasia Empresa  ] = AUX_NEMP
                                 [Codigo do Representante] = [Answer->Codigo do Representante]
                                 [Nome Fantasia Represent] = AUX_REP
                                 [Cidade                 ] = [Answer->Cidade]
                                 [Numero de Clientes     ] = [Answer->Numero de Clientes]
                                 UnLockRecord
                         EndIf        
                 EndIf 
                 Moveto "Answer"
               EndScan
               Do_It!
               ClearAll
               Rename Tabela_Aux "Answer"
               
          Else Moveto [Codigo                 ] TypeIn "Calc Count as Numero de Clientes"
               Moveto [Numero do Pedido       ] TypeIn "Calc Sum as Numero de Pedidos"
               Moveto [Valor Nota Fiscal      ] TypeIn "Calc Sum as Valor Nota Fiscal"
               Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
               Do_It!
               ClearAll
       EndIf
  Case VSDGCODMODELO="02" Or VSDGCODMODELO="04" Or VSDGCODMODELO="05" : 
       {Ask} {Answer}
       Moveto [Codigo da Empresa      ] Check
       Moveto [Numero da Programacao  ] Check
       Moveto [Valor da Comissao      ] Check  
       Moveto [Nome Fantasia Empresa  ] Check 
       Moveto [Codigo do Representante] Check            
       Moveto [Nome Fantasia Represent] Check
       Moveto [Situacao da Programacao] Check
       Moveto [Data Inicial           ] Check "_DtI"
       Moveto [Data Final             ] Check "_DtF"
       Moveto [Numero do Pedido       ] TypeIn "Calc Sum as Numero de Pedidos"
       Moveto [Codigo                 ] TypeIn "Calc Count as Numero de Clientes"
       Moveto [Valor Nota Fiscal      ] TypeIn "Calc Sum as Valor Nota Fiscal"
       Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
       Do_it!
       ClearAll         
EndSwitch

{Ask} {Answer}
Moveto [Codigo da Empresa      ] TypeIn "_CodE" 
Moveto [Nome Fantasia Empresa  ] TypeIn "_NomE" 
Moveto [Codigo do Representante] TypeIn "_CodR"
Moveto [Nome Fantasia Represent] TypeIn "_NomR"
Moveto [Valor Nota Fiscal      ] TypeIn "_NumP"
Moveto [Quantidade             ] TypeIn "_Qtd" 
Switch
  Case VSDGCODMODELO="01" Or VSDGCODMODELO="01B"                   :
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [Data Inicial           ] TypeIn "_DtI"
       Moveto [Data Final             ] TypeIn "_DtF"
       Moveto [Situacao da Programacao] TypeIn "_Sit"  
       Moveto [Descricao do Status    ] TypeIn "_DesS"
       Moveto [Codigo                 ] TypeIn "_CodC"
       Moveto [Nome Fantasia EmitDest ] TypeIn "_NomF" 
       Moveto [Valor da Comissao      ] TypeIn "_VrC"
  Case VSDGCODMODELO="06" Or VSDGCODMODELO="03"  :  
       If VSDGCODMODELO="06"
          Then Moveto [Cidade         ] TypeIn "_Cid"
       EndIf   
       Moveto [Numero de Clientes     ] TypeIn "_QtdC"
       Moveto [Numero de Pedidos      ] TypeIn "_QtdP"
  Case VSDGCODMODELO="02" Or VSDGCODMODELO="04" Or VSDGCODMODELO="05" :
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [Valor da Comissao      ] TypeIn "_VrC"
       Moveto [Situacao da Programacao] TypeIn "_Sit"
       Moveto [Data Inicial           ] TypeIn "_DtI" 
       Moveto [Data Final             ] TypeIn "_DtF"
       Moveto [Numero de Pedidos      ] TypeIn "_QtdP"
       Moveto [Numero de Clientes     ] TypeIn "_QtdC"           
EndSwitch
{Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
Moveto [Codigo da Empresa      ] TypeIn "_CodE" 
Moveto [Nome Fantasia Empresa  ] TypeIn "_NomE"
Moveto [Codigo do Representante] TypeIn "_CodR"
Moveto [Nome Fantasia Represent] TypeIn "_NomR"
Moveto [Valor Total Pedidos    ] TypeIn "_NumP"
Moveto [Quantidade de Itens    ] TypeIn "_Qtd"
Switch
  Case VSDGCODMODELO="01" Or VSDGCODMODELO="01B"      :
       Moveto [Numero da Programacao  ] TypeIn "_NProg" 
       Moveto [Data Inicial           ] TypeIn "_DtI" 
       Moveto [Data Final             ] TypeIn "_DtF" 
       Moveto [Situacao da Programacao] TypeIn "_Sit"   
       Moveto [Descricao do Status    ] TypeIn "_DesS"
       Moveto [Codigo                 ] TypeIn "_CodC"
       Moveto [Nome Fantasia EmitDest ] TypeIn "_NomF"     
       Moveto [Valor da Comissao      ] TypeIn "_VrC"
  Case VSDGCODMODELO="06" Or VSDGCODMODELO="03"  :
       If VSDGCODMODELO="06"               
          Then Moveto [Cidade         ] TypeIn "_Cid"
       EndIf   
       Moveto [Numero de Clientes     ] TypeIn "_QtdC"                          
       Moveto [Numero de Pedidos      ] TypeIn "_QtdP"
  Case VSDGCODMODELO="02" Or VSDGCODMODELO="04" Or VSDGCODMODELO="05" :
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [Valor da Comissao      ] TypeIn "_VrC"
       Moveto [Situacao da Programacao] TypeIn "_Sit"
       Moveto [Data Inicial           ] TypeIn "_DtI" 
       Moveto [Data Final             ] TypeIn "_DtF"
       Moveto [Numero de Pedidos      ] TypeIn "_QtdP"
       Moveto [Numero de Clientes     ] TypeIn "_QtdC"    
EndSwitch
Do_It!             
ClearAll

If VSDGCODMODELO="03" Or VSDGCODMODELO="04" Or VSDGCODMODELO="05"
   Then {Ask} TypeIn Tabela Enter
        Moveto [Codigo da Empresa      ] Check 
        Moveto [Nome Fantasia Empresa  ] Check
        Moveto [Valor Total Pedidos    ] TypeIn "Calc Sum as Valor Total Pedidos"
        Moveto [Quantidade de Itens    ] TypeIn "Calc Sum as Quantidade de Itens"
        Moveto [Numero de Pedidos      ] TypeIn "Calc Sum as Numero de Pedidos"
        Moveto [Numero de Clientes     ] TypeIn "Calc Sum as Numero de Clientes"
        Switch
          Case VSDGCODMODELO="03" :
               Moveto [Codigo do Representante] Check
               Moveto [Nome Fantasia Represent] Check
          Case VSDGCODMODELO="04" :
               Moveto [Data Inicial           ] Check
               Moveto [Data Final             ] Check
          Case VSDGCODMODELO="05" :
               Moveto [Numero da Programacao  ] Check
               Moveto [Codigo do Representante] Check
               Moveto [Nome Fantasia Represent] Check
               Moveto [Valor da Comissao      ] Check
               Moveto [Situacao da Programacao] Check 
               Moveto [Data Inicial           ] Check 
               Moveto [Data Final             ] Check
        EndSwitch
        Do_It!
        ClearAll
        
        Empty Tabela
        
        {Ask} {Answer}
        Moveto [Codigo da Empresa      ] TypeIn "_CodE" 
        Moveto [Nome Fantasia Empresa  ] TypeIn "_NomE"
        Moveto [Valor Total Pedidos    ] TypeIn "_NumP"
        Moveto [Quantidade de Itens    ] TypeIn "_Qtd"
        Moveto [Numero de Pedidos      ] TypeIn "_QtdP"
        Moveto [Numero de Clientes     ] TypeIn "_QtdC"
        Switch
          Case VSDGCODMODELO="03" :
               Moveto [Codigo do Representante] TypeIn "_CodR"
               Moveto [Nome Fantasia Represent] TypeIn "_CodN"
          Case VSDGCODMODELO="04" :
               Moveto [Data Inicial           ] TypeIn "_DtI"
               Moveto [Data Final             ] TypeIn "_DtF"
          Case VSDGCODMODELO="05" :
               Moveto [Numero da Programacao  ] TypeIn "_NProg"
               Moveto [Codigo do Representante] TypeIn "_CodR"
               Moveto [Nome Fantasia Represent] TypeIn "_NomF"
               Moveto [Valor da Comissao      ] TypeIn "_VrC"
               Moveto [Situacao da Programacao] TypeIn "_Sit" 
               Moveto [Data Inicial           ] TypeIn "_DtI"
               Moveto [Data Final             ] TypeIn "_DtF"
        EndSwitch
        {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
        Moveto [Codigo da Empresa      ] TypeIn "_CodE" 
        Moveto [Nome Fantasia Empresa  ] TypeIn "_NomE"
        Moveto [Valor Total Pedidos    ] TypeIn "_NumP"
        Moveto [Quantidade de Itens    ] TypeIn "_Qtd"
        Moveto [Numero de Pedidos      ] TypeIn "_QtdP"
        Moveto [Numero de Clientes     ] TypeIn "_QtdC"
        Switch
          Case VSDGCODMODELO="03" :
               Moveto [Codigo do Representante] TypeIn "_CodR"
               Moveto [Nome Fantasia Represent] TypeIn "_CodN"
          Case VSDGCODMODELO="04" :
               Moveto [Data Inicial           ] TypeIn "_DtI"
               Moveto [Data Final             ] TypeIn "_DtF"
          Case VSDGCODMODELO="05" :
               Moveto [Numero da Programacao  ] TypeIn "_NProg"
               Moveto [Codigo do Representante] TypeIn "_CodR"
               Moveto [Nome Fantasia Represent] TypeIn "_NomF"
               Moveto [Valor da Comissao      ] TypeIn "_VrC" 
               Moveto [Situacao da Programacao] TypeIn "_Sit" 
               Moveto [Data Inicial           ] TypeIn "_DtI"
               Moveto [Data Final             ] TypeIn "_DtF"               
        EndSwitch  
        Do_It!
        ClearAll 
EndIf     

If VSDGCODMODELO="01B"  
   Then If IsTable(Tabela_Erro)
           Then {Ask} TypeIn Tabela_Erro Enter
                Moveto [Numero da Programacao] TypeIn "_NProg"
                Moveto [Codigo               ] TypeIn "_Cod"
                {Ask} TypeIn Tabela Enter TypeIn "Delete" 
                Moveto [Numero da Programacao] TypeIn "_NProg"
                Moveto [Codigo               ] TypeIn "_Cod"
                Moveto [Ocorrencia de Erros  ] TypeIn "Not Blank"
                Do_it!
                ClearAll
                
                If IsTable("Deleted")
                   Then If Not IsEmpty("Deleted")
                           Then Empty Tabela
                                Add "Deleted" Tabela
                                ClearAll
                                {Ask} TypeIn TabelaC Enter
                                Moveto [Numero da Programacao] TypeIn "_Prog"
                                Moveto [Valor da Comissao    ] TypeIn "_VrC"
                                {Ask} TypeIn Tabela Enter
                                Moveto [Numero da Programacao] TypeIn "_Prog"
                                Moveto [Valor da Comissao    ] TypeIn "Changeto _VrC"
                                Do_it!
                                ClearAll
                           Else TEMP = False
                        EndIf
                   Else TEMP = False     
                EndIf       
           Else TEMP = False 
        EndIf   
EndIf

If Not TEMP
   Then MSG = "N„o h  registros com ocorrˆncia de erros!"
EndIf     
                            
;---- Calcular Comissao --------------------------------------------------------
Aguarde("Verificando a porcentagem da comiss„o... ")

{Ask} TypeIn TabelaCL Enter
Moveto [Numero da Programacao] Check
Moveto [Codigo               ] TypeIn "_Cli"
Moveto [Pedido_Valor         ] TypeIn "Calc Sum as PedValor"
{Ask} {\\Sistemas\\Cadastro\\Destinat}
Moveto [Codigo               ] TypeIn "_Cli"
Moveto [Cidade               ] Check
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Numero da Programacao] TypeIn "_NProg"
Moveto [Cidade               ] TypeIn "_Cid"
Moveto [PedValor             ] TypeIn "_NVr"
{Ask} TypeIn TabelaCD Enter
Moveto [Numero da Programacao] TypeIn "_NProg"
Moveto [Cidade               ] TypeIn "_Cid"
Moveto [Pedido_Valor         ] TypeIn "Changeto _NVr"
Do_It!
ClearAll
                    
{Ask} TypeIn TabelaC Enter    
Moveto [Numero da Programacao  ] Check TypeIn "_NProg"
{Ask} TypeIn TabelaCL Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Pedido_Valor           ] TypeIn "Calc Sum as PedMeta" 
Do_It!
ClearAll

;---- Apura‡Æo das Comissäes subtraindo as trocas relacionadas aos pedidos
;Processo p/ fazer a apura‡Æo apenas em notas faturadas j  subtraindo as trocas ocorridas no per¡odo de acordo com os pedidos
PARAM_SUBTRAI_TROCA = True 
If PARAM_SUBTRAI_TROCA
   Then Tabela_Comissao = Cria_Temp(PrivDir())
        Copy "Answer" Tabela_Comissao
        Apura_Comissao()
        Rename Tabela_Comissao "Answer"
EndIf

;---- Atribuindo as Cidades ---------------------------------------------
If VSDGCODMODELO="01" Or VSDGCODMODELO="01B"
   Then {Ask} {\\Sistemas\\Cadastro\\Destinat}
        Moveto [Codigo] TypeIn "_Cod"
        Moveto [Cidade] TypeIn "_Cid"
        {Ask} TypeIn Tabela Enter
        Moveto [Codigo] TypeIn "_Cod"
        Moveto [Cidade] TypeIn "Changeto _Cid"
        Do_It!
        ClearAll
EndIf

NPROG = "***"

NR=NRecords("Answer")

View Tabela
View TabelaC
View TabelaCM
CoEdit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, verificando a porcentagem da comiss„o "+BARRA_STRING)
  If NPROG <> [Numero da Programacao]
     Then COMISSAO = 0
          NPROG = [Numero da Programacao]
          Moveto TabelaCM
          Moveto [Numero da Programacao]         
          Locate NPROG
          While NPROG = [Numero da Programacao]
            If [Answer->PedMeta] >= [Meta_Inicial] And ([Answer->PedMeta] <= [Meta_Final] Or [Meta_Final]=0)
               Then COMISSAO = [Meta_Porcentagem]
                    QuitLoop
            EndIf
            Skip
            If Eot() Then QuitLoop EndIf
            Locate Next NPROG
            If Not RetVal Then QuitLoop EndIf 
          EndWhile
          If COMISSAO > 0
             Then Moveto TabelaC
                  Moveto [Numero da Programacao]
                  Locate NPROG
                  If RetVal 
                     Then [Valor da Comissao] = COMISSAO
                          UnLockRecord
                  EndIf
                  
                  Moveto Tabela
                  Moveto [Numero da Programacao]
                  Locate NPROG
                  If RetVal 
                     Then While NPROG = [Numero da Programacao]
                            [Valor da Comissao] = COMISSAO
                            Skip
                            If Eot() Then QuitLoop EndIf
                            Locate Next NPROG
                            If Not RetVal Then QuitLoop EndIf
                          EndWhile  
                  EndIf      
          EndIf   
  EndIf    
  Moveto "Answer"
EndScan
Do_It!
ClearAll


{Ask} TypeIn Tabela Enter TypeIn "Fast Delete"
Moveto [Codigo do Representante] TypeIn "Blank"
Do_It!
ClearAll

;---- Atribuindo Valor da Meta por cidade -------------------------------
Switch
  Case VSDGCODMODELO="06" : 
       {Ask} TypeIn TabelaC Enter
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [Codigo do Representante] Check TypeIn "Not Blank"
       Moveto [Codigo da Empresa      ] Check
       {Ask} TypeIn TabelaCD Enter
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [Cidade                 ] Check 
       Moveto [Pedido_Meta            ] TypeIn "Calc Sum as VrMeta"
       Do_It!
       ClearAll
        
       {Ask} {Answer} Enter
       Moveto [Codigo do Representante] TypeIn "_Rep"
       Moveto [Cidade                 ] TypeIn "_Cid"
       Moveto [VrMeta                 ] TypeIn "_VrM"
       {Ask} TypeIn Tabela Enter                     
       Moveto [Codigo do Representante] TypeIn "_Rep"
       Moveto [Cidade                 ] TypeIn "_Cid"
       Moveto [Valor da Meta          ] TypeIn "Changeto _VrM"
       Do_It!
       ClearAll
  Case VSDGCODMODELO="02" : 
       {Ask} TypeIn TabelaCD Enter
       Moveto [Numero da Programacao  ] TypeIn "_NProg"            
       Moveto [Pedido_Meta            ] TypeIn "Calc Sum as VrMeta"
       {Ask} TypeIn TabelaC Enter
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [Codigo do Representante] Check TypeIn "Not Blank"
       Moveto [Data Inicial           ] Check
       Moveto [Data Final             ] Check
       Do_It!
       ClearAll
       
       {Ask} {Answer} Enter
       Moveto [Codigo do Representante] TypeIn "_Rep"
       Moveto [VrMeta                 ] TypeIn "_VrM"
       Moveto [Data Inicial           ] TypeIn "_DtI"
       Moveto [Data Final             ] TypeIn "_DtF"
       {Ask} TypeIn Tabela Enter
       Moveto [Codigo do Representante] TypeIn "_Rep"                     
       Moveto [Data Inicial           ] TypeIn "_DtI"
       Moveto [Data Final             ] TypeIn "_DtF"
       Moveto [Valor da Meta          ] TypeIn "Changeto _VrM"
       Do_It!
       ClearAll      
  Case VSDGCODMODELO="03" :
       {Ask} TypeIn TabelaCD Enter                   
       Moveto [Numero da Programacao  ] TypeIn "_NProg"            
       Moveto [Pedido_Meta            ] TypeIn "Calc Sum as VrMeta"
       {Ask} TypeIn TabelaC Enter
                      Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [Codigo do Representante] Check            
       Do_It!                                
       ClearAll
       
       {Ask} {Answer} Enter                          
       Moveto [Codigo do Representante] TypeIn "_Rep"
       Moveto [VrMeta                 ] TypeIn "_VrM"
       {Ask} TypeIn Tabela Enter        
       Moveto [Codigo do Representante] TypeIn "_Rep"
       Moveto [Valor da Meta          ] TypeIn "Changeto _VrM"
       Do_It!   
       ClearAll
  Case VSDGCODMODELO="03" :
       {Ask} TypeIn TabelaCD Enter
       Moveto [Numero da Programacao  ] TypeIn "_NProg"            
       Moveto [Pedido_Meta            ] TypeIn "Calc Sum as VrMeta"
       {Ask} TypeIn TabelaC Enter
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [Codigo do Representante] Check
       Do_It!
       ClearAll
       
       {Ask} {Answer} Enter  
       Moveto [Codigo do Representante] TypeIn "_Rep"
       Moveto [VrMeta                 ] TypeIn "_VrM"
       {Ask} TypeIn Tabela Enter                     
       Moveto [Codigo do Representante] TypeIn "_Rep"
       Moveto [Valor da Meta          ] TypeIn "Changeto _VrM"
       Do_It!
       ClearAll
  Case VSDGCODMODELO="04" :
       {Ask} TypeIn TabelaCD Enter
       Moveto [Numero da Programacao  ] TypeIn "_NProg"            
       Moveto [Pedido_Meta            ] TypeIn "Calc Sum as VrMeta"
       {Ask} TypeIn TabelaC Enter
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [Data Inicial           ] Check
       Moveto [Data Final             ] Check
       Do_It!
       ClearAll
  
       {Ask} {Answer} Enter
       Moveto [Data Inicial           ] TypeIn "_DtI"
       Moveto [Data Final             ] TypeIn "_DtF"
       Moveto [VrMeta                 ] TypeIn "_VrM"
       {Ask} TypeIn Tabela Enter                     
       Moveto [Data Inicial           ] TypeIn "_DtI"
       Moveto [Data Final             ] TypeIn "_DtF"
       Moveto [Valor da Meta          ] TypeIn "Changeto _VrM"
       Do_It!
       ClearAll
  Case VSDGCODMODELO="05" Or VSDGCODMODELO="01" Or VSDGCODMODELO="01B" :
       {Ask} TypeIn TabelaCD Enter
       Moveto [Numero da Programacao  ] Check TypeIn "_NProg"            
       Moveto [Pedido_Meta            ] TypeIn "Calc Sum as VrMeta"
       {Ask} TypeIn TabelaC Enter
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Do_It!
       ClearAll
       
       {Ask} {Answer} Enter     
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [VrMeta                 ] TypeIn "_VrM"
       {Ask} TypeIn Tabela Enter
       Moveto [Numero da Programacao  ] TypeIn "_NProg"
       Moveto [Valor da Meta          ] TypeIn "Changeto _VrM"
       Do_It!
       ClearAll      
EndSwitch
                   
Return TEMP

EndProc ;Relacao_Visitas()

;*******************************************************************************
;* Rotina p/ Atualizar as Tabelas Tempor rias                                  *
;*******************************************************************************
Proc Atualiza_Tabelas_Temporarias()

Aguarde("Verificando os registros das visitas...")

;---- Limpando Registros Anteriores --------------------------------------
{Ask} TypeIn TabelaC Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"   
Moveto [Situacao da Programacao] TypeIn "ABERTO"
{Ask} TypeIn TabelaCL Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Pedido_Quantidade      ] TypeIn "Changeto Blank"
Moveto [Pedido_Valor           ] TypeIn "Changeto Blank"
Moveto [Pedido_NumeroItens     ] TypeIn "Changeto Blank"
Do_It!
ClearAll      

{Ask} TypeIn TabelaC Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"   
Moveto [Situacao da Programacao] TypeIn "ABERTO"
{Ask} TypeIn TabelaCD Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Pedido_Quantidade      ] TypeIn "Changeto Blank"
Moveto [Pedido_Valor           ] TypeIn "Changeto Blank"
Do_It!
ClearAll       

{Ask} TypeIn TabelaC Enter
Moveto [Situacao da Programacao] TypeIn "ABERTO"
Moveto [Valor da Comissao      ] TypeIn "Changeto Blank"
Do_It!
ClearAll

Aguarde("Capturando os registros das visitas: PEDIDOS")

{Ask} TypeIn TabelaC Enter
Moveto [Data Inicial           ] Check    
Moveto [Data Final             ] Check 
Do_It!
ClearAll

DATAI = BlankDate()
DATAF = BlankDate()

NR=NRecords("Answer")

CONT_DATA = 0
Array DATA_INI[NR]
Array DATA_FIM[NR]

View "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, verificando o per¡odo... "+BARRA_STRING)
  
  If [Data Inicial] < DATAI Or DATAI  = BlankDate()
     Then DATAI = [Data Inicial]
  EndIf
  If [Data Final] > DATAF Or DATAF  = BlankDate()
     Then DATAF = [Data Final]
  EndIf
  
  CONT_DATA = CONT_DATA + 1
  DATA_INI[CONT_DATA] = [Data Inicial]
  DATA_FIM[CONT_DATA] = [Data Final]
EndScan
ClearAll

Aguarde("Gerando tabela temporaria dos PEDIDOS 1/2")
;---- Tabela Temporaria de Pedidos ---------------------------------------
{Ask} {\\Sistemas\\Vendas\\PedidoC} Check
Moveto [Codigo da Empresa        ] Check TypeIn "_Emp, ~VSDGEMPRESA.."
Moveto [Data de Emissao          ] TypeIn ">=~DATAI,<=~DATAF"
Moveto [Codigo do Representante  ] TypeIn "~VSDGREPRESEN.."
Moveto [Descricao da Destinacao  ] Check TypeIn "..VEND.."
Switch
  Case REGRA_APURACAO_COMISSAO = "PEDIDO ABERTO OU FATURADO" :                          
       Moveto [Situacao do Pedido] TypeIn "Not CANCELADO, Not SUSPENSO"
  Case REGRA_APURACAO_COMISSAO = "PEDIDO FATURADO"           :
       Moveto [Situacao do Pedido] TypeIn "FATURADO"                            
  Case REGRA_APURACAO_COMISSAO = "PEDIDO E NOTA"             :
       Moveto [Numero do Pedido         ] TypeIn "_NPed"
       {Ask} {\\Sistemas\\Vendas\\NotaC}       
       Moveto [Codigo da Empresa       ] Check TypeIn "_Emp"
       Moveto [Numero do Documento     ] Check
       Moveto [Serie do Documento      ] Check
       Moveto [Numero do Pedido        ] TypeIn "_NPed"
       Moveto [Descricao da Destinacao ] Check TypeIn "..VEND.."
       Moveto [Situacao                ] TypeIn "Not C"
EndSwitch  
Do_It!
ClearAll

Coedit "Answer"
While True
  If Search("TROC",[Descricao da Destinacao])>0 Or Search("DEVOL",[Descricao da Destinacao])>0
     Then Del
          Home
  EndIf   
  Skip
  If Eot() Then QuitLoop EndIf
EndWhile
Do_It!
ClearAll

Tabela_PedC = Cria_Temp(PrivDir())
Copy "Answer" Tabela_PedC

If REGRA_APURACAO_COMISSAO = "PEDIDO E NOTA"
   Then {Ask} TypeIn Tabela_PedC Enter
        Moveto [Numero do Pedido         ] TypeIn "_NPed"
        {Ask} {\\Sistemas\\Vendas\\NotaC} Check
        Moveto [Numero do Pedido         ] TypeIn "_NPed"
        Moveto [Situacao                 ] TypeIn "Not C"
        Do_It!
        ClearAll              
        
        Tabela_NotC = Cria_Temp(PrivDir())
        Copy "Answer" Tabela_NotC
        
        {Ask} TypeIn Tabela_PedC Enter
        Moveto [Numero do Pedido         ] TypeIn "_NPed"
        {Ask} {\\Sistemas\\Vendas\\NotaI} Check
        Moveto [Numero Pedido_Orcamento  ] TypeIn "_NPed"
        Do_It!
        ClearAll   
        
        Tabela_NotI = Cria_Temp(PrivDir())
        Copy "Answer" Tabela_NotI
EndIf

Aguarde("Gerando tabela temporaria dos PEDIDOS 2/2")
{Ask} TypeIn Tabela_PedC Enter
Moveto [Numero do Pedido       ] TypeIn "_NPed"
{Ask} {\\Sistemas\\Vendas\\PedidoI}
Moveto [Numero do Pedido       ] Check TypeIn "_NPed"
Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
Do_It!
ClearAll  
      
Tabela_PedI = Cria_Temp(PrivDir())
Copy "Answer" Tabela_PedI
      
;---- Valores Totais dos Pedidos -----------------------------------------
{Ask} TypeIn TabelaC Enter
Moveto [Codigo da Empresa      ] Check 
Moveto [Nome Fantasia Empresa  ] Check 
Moveto [Numero da Programacao  ] Check TypeIn "_NProg"   
Moveto [Codigo do Representante] Check 
Moveto [Nome Fantasia Represent] Check
Moveto [Data Inicial           ] Check    
Moveto [Data Final             ] Check 
Moveto [Situacao da Programacao] Check TypeIn "ABERTO"
{Ask} TypeIn TabelaCL Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Codigo                 ] Check
Moveto [Nome Fantasia EmitDest ] Check
Moveto [Descricao do Status    ] Check
Do_It!
ClearAll     
   
Tabela_Temp   = Cria_Temp(PrivDir())                      
Copy "Answer" Tabela_Temp
  
TabelaAux = Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Visita\\RM_0100" TabelaAux
Empty TabelaAux

TabelaErro = Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Visita\\RM_0100" TabelaErro
Empty TabelaErro

For i From 1 To NR
  AUX_INI = DateVal(DATA_INI[i])
  AUX_FIM = DateVal(DATA_FIM[i])
  
  MSG = "Pedidos de "+StrVal(AUX_INI)+" at‚ "+StrVal(AUX_FIM)+" "
  
  Barra(NR,i)
  Aguarde(MSG+"1/2 "+BARRA_STRING)
  
  {Ask} TypeIn Tabela_Temp Enter Check
  Moveto [Codigo do Representante] TypeIn "_Rep"                 
  Moveto [Codigo                 ] TypeIn "_Cod"
  Moveto [Data Inicial           ] TypeIn ">=~AUX_INI"
  Moveto [Data Final             ] TypeIn "<=~AUX_FIM"
  {Ask} TypeIn Tabela_PedC Enter
  Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
  Moveto [Numero do Pedido       ] Check TypeIn "_NPed"
  Moveto [Descricao da Destinacao] Check TypeIn "..VEND.."
  Moveto [Data de Emissao        ] TypeIn ">=~AUX_INI,<=~AUX_FIM"
  Moveto [Codigo                 ] TypeIn "_Cod" 
  Moveto [Codigo do Representante] TypeIn "_Rep"
  Switch
    Case REGRA_APURACAO_COMISSAO = "PEDIDO ABERTO OU FATURADO" :                          
         Moveto [Valor Nota Fiscal      ] Check
         Moveto [Situacao do Pedido     ] TypeIn "Not CANCELADO, Not SUSPENSO"
         {Ask} TypeIn Tabela_PedI Enter
         Moveto [Numero do Pedido       ] TypeIn "_NPed"
         Moveto [Quantidade             ] Check
    Case REGRA_APURACAO_COMISSAO = "PEDIDO FATURADO"           :
         Moveto [Valor Nota Fiscal      ] Check
         Moveto [Situacao do Pedido     ] TypeIn "FATURADO"
         {Ask} TypeIn Tabela_PedI Enter
         Moveto [Numero do Pedido       ] TypeIn "_NPed"
         Moveto [Quantidade             ] Check
    Case REGRA_APURACAO_COMISSAO = "PEDIDO E NOTA"             :
         {Ask} TypeIn Tabela_NotC Enter
         Moveto [Numero do Pedido       ] TypeIn "_NPed"
         Moveto [Valor Nota Fiscal      ] Check
         {Ask} TypeIn Tabela_NotI Enter
         Moveto [Numero Pedido_Orcamento] TypeIn "_NPed"
         Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
  EndSwitch  
  Do_It!
  ClearAll
  
  If IsEmpty("Answer") Then Loop EndIf
  
  Coedit "Answer"
  While True
    If Search("TROC",[Descricao da Destinacao])>0 Or Search("DEVOL",[Descricao da Destinacao])>0
       Then Del
            Home
    EndIf   
    Skip
    If Eot() Then QuitLoop EndIf
  EndWhile
  Do_It!
  ClearAll
  
  {Ask} {Answer}
  Moveto [Codigo da Empresa      ] TypeIn "_CodE"
  Moveto [Nome Fantasia Empresa  ] TypeIn "_NomF" 
  Moveto [Codigo do Representante] TypeIn "_CodR"
  Moveto [Nome Fantasia Represent] TypeIn "_NomR"
  Moveto [Numero da Programacao  ] TypeIn "_NumP"
  Moveto [Data Inicial           ] TypeIn "_DtI"
  Moveto [Data Final             ] TypeIn "_DtF"
  Moveto [Situacao da Programacao] TypeIn "_Sit"  
  Moveto [Descricao do Status    ] TypeIn "_DesS"
  Moveto [Codigo                 ] TypeIn "_CodC"
  Moveto [Nome Fantasia EmitDest ] TypeIn "_NomC"
  Moveto [Numero do Pedido       ] TypeIn "_Ped"
  Moveto [Quantidade             ] TypeIn "_Qtd"
  Moveto [Valor Nota Fiscal      ] TypeIn "_VrN"
  {Ask} TypeIn TabelaAux Enter TypeIn "Fast Insert"
  Moveto [Codigo da Empresa      ] TypeIn "_CodE"
  Moveto [Nome Fantasia Empresa  ] TypeIn "_NomF" 
  Moveto [Codigo do Representante] TypeIn "_CodR"
  Moveto [Nome Fantasia Represent] TypeIn "_NomR"
  Moveto [Numero da Programacao  ] TypeIn "_NumP"
  Moveto [Data Inicial           ] TypeIn "_DtI"
  Moveto [Data Final             ] TypeIn "_DtF"
  Moveto [Situacao da Programacao] TypeIn "_Sit"  
  Moveto [Descricao do Status    ] TypeIn "_DesS"
  Moveto [Codigo                 ] TypeIn "_CodC"
  Moveto [Nome Fantasia EmitDest ] TypeIn "_NomC"
  Moveto [Ocorrencia de Erros    ] TypeIn "_Ped"
  Moveto [Quantidade de Itens    ] TypeIn "_Qtd"
  Moveto [Valor Total Pedidos    ] TypeIn "_VrN"
  Do_It!
  ClearAll  
  
  Aguarde(MSG+"2/2 "+BARRA_STRING)
      
  ;----- Para Encontrar Erros -----------------------------
  {Ask} TypeIn Tabela_Temp Enter 
  Moveto [Codigo da Empresa      ] TypeIn "_Ped"
  Moveto [Codigo do Representante] TypeIn "_Rep" 
  {Ask} TypeIn Tabela_PedC Enter 
  Moveto [Numero do Pedido       ] Check 
  Moveto [Codigo da Empresa      ] Check TypeIn "_Ped"
  Moveto [Nome Fantasia Empresa  ] Check 
  Moveto [Codigo do Representante] Check
  Moveto [Nome Fantasia Represent] Check 
  Moveto [Descricao da Destinacao] Check TypeIn "..VEND.."
  Moveto [Data de Emissao        ] Check TypeIn ">=~AUX_INI,<=~AUX_FIM"
  Moveto [Codigo                 ] Check
  Moveto [Nome Fantasia EmitDest ] Check 
  Moveto [Valor Nota Fiscal      ] Check 
  Moveto [Codigo do Representante] TypeIn "_Rep"     
  Switch
    Case REGRA_APURACAO_COMISSAO = "PEDIDO ABERTO OU FATURADO" :                          
         Moveto [Situacao do Pedido] TypeIn "Not CANCELADO, Not SUSPENSO"
    Case REGRA_APURACAO_COMISSAO = "PEDIDO FATURADO"           :
         Moveto [Situacao do Pedido] TypeIn "FATURADO"                            
    Case REGRA_APURACAO_COMISSAO = "PEDIDO E NOTA"             :
         Moveto [Numero do Pedido  ] TypeIn "_NPed"
         {Ask} TypeIn Tabela_NotC Enter
         Moveto [Numero do Pedido  ] TypeIn "_NPed"
  EndSwitch 
  Do_It!
  ClearAll         
  
  Coedit "Answer"
  While True
    If Search("TROC",[Descricao da Destinacao])>0 Or Search("DEVOL",[Descricao da Destinacao])>0
       Then Del
            Home
    EndIf   
    Skip
    If Eot() Then QuitLoop EndIf
  EndWhile
  Do_It!
  ClearAll                                           
  
  {Ask} {Answer}
  Moveto [Numero do Pedido       ] Check TypeIn "_NPed"
  Moveto [Codigo da Empresa      ] Check
  Moveto [Nome Fantasia Empresa  ] Check 
  Moveto [Codigo do Representante] Check
  Moveto [Nome Fantasia Represent] Check                 
  Moveto [Codigo                 ] Check 
  Moveto [Data de Emissao        ] Check
  Moveto [Nome Fantasia EmitDest ] Check 
  Moveto [Valor Nota Fiscal      ] Check
  {Ask} TypeIn Tabela_PedI Enter
  Moveto [Numero do Pedido       ] TypeIn "_NPed"
  Moveto [Quantidade             ] Check
  Do_It!
  ClearAll
  
  If IsEmpty("Answer") Then Loop EndIf
    
  {Ask} {Answer}
  Moveto [Codigo da Empresa      ] TypeIn "_CodE"
  Moveto [Nome Fantasia Empresa  ] TypeIn "_NomF" 
  Moveto [Codigo do Representante] TypeIn "_CodR"
  Moveto [Nome Fantasia Represent] TypeIn "_NomR"
  Moveto [Data de Emissao        ] TypeIn "_DtI"
  Moveto [Codigo                 ] TypeIn "_CodC"
  Moveto [Nome Fantasia EmitDest ] TypeIn "_NomC"
  Moveto [Numero do Pedido       ] TypeIn "_Ped"
  Moveto [Quantidade             ] TypeIn "_Qtd"
  Moveto [Valor Nota Fiscal      ] TypeIn "_VrN"
  {Ask} TypeIn TabelaErro Enter TypeIn "Fast Insert"
  Moveto [Codigo da Empresa      ] TypeIn "_CodE"
  Moveto [Nome Fantasia Empresa  ] TypeIn "_NomF" 
  Moveto [Codigo do Representante] TypeIn "_CodR"
  Moveto [Nome Fantasia Represent] TypeIn "_NomR"
  Moveto [Data Inicial           ] TypeIn "_DtI"
  Moveto [Codigo                 ] TypeIn "_CodC"
  Moveto [Nome Fantasia EmitDest ] TypeIn "_NomC"
  Moveto [Ocorrencia de Erros    ] TypeIn "_Ped"
  Moveto [Quantidade de Itens    ] TypeIn "_Qtd"
  Moveto [Valor Total Pedidos    ] TypeIn "_VrN"
  Do_It!
  ClearAll  
EndFor

Rename TabelaAux "Answer"

DynArray PED_ERRO[]
NR=NRecords("Answer")

If Not IsEmpty(TabelaErro)
   Then View TabelaCD
        View TabelaErro                  
        Coedit "Answer"
        Scan
          Barra(NR, RecNo())
          Aguarde("Aguarde, verificando ocorrencias de erro -> ... "+BARRA_STRING)
          PED = [Ocorrencia de Erros]
          
          ERRO_CIDADE = False
          GetRecord "\\Sistemas\\Vendas\\PedidoC" PED To REG_PEDC
          If RetVal
             Then CIDADE     = REG_PEDC["Cidade"]
                  
                  Moveto TabelaCD
                  Moveto [Cidade]
                  Locate CIDADE
                  If Not RetVal
                     Then ERRO_CIDADE = True
                  EndIf   
                  Moveto "Answer"
          EndIf  
          
          Moveto TabelaErro
          Moveto [Ocorrencia de Erros]
          Locate PED
          If RetVal
             Then If Not ERRO_CIDADE
                     Then Del
                     Else Mensagen("Pedido "+PED+" esta com a cidade diferente do cadastro!")
                          [Ocorrencia de Erros  ]=[Ocorrencia de Erros]+"+"
                          [Numero da Programacao]=[Answer->Numero da Programacao]                    
                          GetRecord "\\Sistemas\\Visita\\VisitaC" [Answer->Numero da Programacao] To REG_PROG
                          If RetVal
                             Then [Data Inicial           ] = REG_PROG["Data Inicial"]
                                  [Data Final             ] = REG_PROG["Data Final"]
                                  [Situacao da Programacao] = REG_PROG["Situacao da Programacao"]
                          EndIf        
                  EndIf
          EndIf        
          Moveto "Answer"
        EndScan
        Do_It!
        ClearAll   
        
        CONT = 0
        View "Answer"
        Coedit TabelaErro
        Scan
          PED = [Ocorrencia de Erros]
          If SubStr(PED,7,1)="+"
             Then PED = SubStr(PED,1,6)
                  Moveto "Answer"
                  Moveto [Ocorrencia de Erros]
                  Locate PED
                  If RetVal
                     Then Del
                  EndIf
                  Moveto TabelaErro
          EndIf   
          CONT = CONT + 1
          PED_ERRO[CONT] = Format("W7",[Ocorrencia de Erros])+Format("D13",[Data Inicial])+Format("W4",[Codigo do Representante])
        EndScan
        Do_It!
        ClearAll
                     
        Add TabelaErro "Answer" 
EndIf         
ClearAll        
        
If IsAssigned(Tabela_PedC)
   Then If IsTable(Tabela_PedC)
           Then Delete Tabela_PedC
        EndIf
EndIf

If IsAssigned(Tabela_PedI)
   Then If IsTable(Tabela_PedI)
           Then Delete Tabela_PedI
        EndIf
EndIf
                     
If IsEmpty("Answer")
   Then Return
EndIf 

Aguarde("Capturando os registros das visitas: CLIENTES")

{Ask} {Answer}
Moveto [Codigo da Empresa      ] Check
Moveto [Nome Fantasia Empresa  ] Check 
Moveto [Codigo do Representante] Check
Moveto [Nome Fantasia Represent] Check
Moveto [Numero da Programacao  ] Check
Moveto [Data Inicial           ] Check
Moveto [Data Final             ] Check
Moveto [Situacao da Programacao] Check  
Moveto [Descricao do Status    ] Check
Moveto [Codigo                 ] Check
Moveto [Nome Fantasia EmitDest ] Check
Moveto [Ocorrencia de Erros    ] Check "as Numero de Pedidos" 
Moveto [Quantidade de Itens    ] Check 
Moveto [Valor Total Pedidos    ] Check
Do_It!
ClearAll
Copy "Answer" Tabela_Temp

Tabela_Erro = Cria_Temp(PrivDir())
Copy "Answer" Tabela_Erro
Empty Tabela_Erro 

If DynArraySize(PED_ERRO)>0
   Then Aguarde("Aguarde, verificando ocorrencias de erro -> ...")
        View TabelaC
        View Tabela_Temp
        View Tabela_Erro
       
        Coedit "Answer"        
        For i From 1 To DynArraySize(PED_ERRO)
          Moveto [Numero de Pedidos]
          Locate Pattern SubStr(PED_ERRO[i],1,6)+".."
          If RetVal
             Then CopyToArray REG_PEDC            
                  ;---- Colocando-o na Programa‡Æo com a Data Correspondente ---
                  AUX_PED = False
                  AUX_REF = DateVal(SubStr(PED_ERRO[i],8,2)+"."+SubStr(PED_ERRO[i],11,2)+"."+SubStr(PED_ERRO[i],14,4))
                  Moveto TabelaC
                  Scan
                    If AUX_REF>=[Data Inicial] And AUX_REF<=[Data Final] And SubStr(PED_ERRO[i],18,4)=[Codigo do Representante]
                       Then REG_PEDC["Codigo do Representante"]  = [Codigo do Representante]
                            REG_PEDC["Nome Fantasia Represent"]  = [Nome Fantasia Represent]
                            REG_PEDC["Numero da Programacao"]    = [Numero da Programacao]
                            REG_PEDC["Data Inicial"]             = [Data Inicial]
                            REG_PEDC["Data Final"]               = [Data Final]
                            REG_PEDC["Situacao da Programacao"]  = [Situacao da Programacao]
                            REG_PEDC["Descricao do Status"]      = ""
                            AUX_PED = True
                            QuitLoop
                       Else Loop
                    EndIf        
                  EndScan
                  If AUX_PED
                     Then Moveto Tabela_Erro 
                          End Down
                          CopyFromArray REG_PEDC
                  EndIf        
                  Moveto Tabela_Temp
                  Moveto [Numero de Pedidos]
                  Locate Pattern SubStr(PED_ERRO[i],1,6)+".."
                  If RetVal
                     Then Del
                          UnLockRecord
                  EndIf   
                  Moveto "Answer"
          EndIf
        EndFor
EndIf   
Do_It!
ClearAll
                     
Aguarde("Capturando os registros das visitas: CLIENTES")
Rename Tabela_Temp "Answer"

{Ask} {Answer}
Moveto [Codigo da Empresa      ] Check
Moveto [Nome Fantasia Empresa  ] Check 
Moveto [Codigo do Representante] Check
Moveto [Nome Fantasia Represent] Check
Moveto [Numero da Programacao  ] Check
Moveto [Data Inicial           ] Check
Moveto [Data Final             ] Check
Moveto [Situacao da Programacao] Check  
Moveto [Descricao do Status    ] Check
Moveto [Codigo                 ] Check
Moveto [Nome Fantasia EmitDest ] Check
Moveto [Numero de Pedidos      ] TypeIn "Calc Count as Numero de Pedidos" 
Moveto [Quantidade de Itens    ] TypeIn "Calc Sum as Quantidade"
Moveto [Valor Total Pedidos    ] TypeIn "Calc Sum as Valor Nota Fiscal"
Do_It!
ClearAll

{Ask} TypeIn TabelaCD Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
{Ask} {Answer}
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Codigo                 ] TypeIn "_Cod"
Moveto [Numero de Pedidos      ] TypeIn "_QtdP"
Moveto [Quantidade             ] TypeIn "_Qtd"
Moveto [Valor Nota Fiscal      ] TypeIn "_NumP"
{Ask} TypeIn TabelaCL Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Codigo                 ] TypeIn "_Cod"
Moveto [Pedido_Quantidade      ] TypeIn "Changeto _QtdP"
Moveto [Pedido_Valor           ] TypeIn "Changeto _NumP"
Moveto [Pedido_NumeroItens     ] TypeIn "Changeto _Qtd"
Do_It!
ClearAll

Aguarde("Capturando os registros das visitas: CIDADES")

;----- Limpando regstros anteriores [Pedido_Quantidade] ------------------------
{Ask} TypeIn TabelaC Enter 
Moveto [Numero da Programacao  ] Check TypeIn "_NProg"   
Moveto [Situacao da Programacao] Check TypeIn "ABERTO"
{Ask} TypeIn TabelaCL Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
{Ask} TypeIn TabelaCD Enter  
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Pedido_Quantidade      ] TypeIn "Changeto Blank"       
Do_It!
ClearAll

;----- Atualizando registros [Pedido_Quantidade] da tabela de Cidades ---
{Ask} {\\Sistemas\\Cadastro\\Destinat}
Moveto [Codigo                 ] TypeIn "_Cod"
Moveto [Cidade                 ] Check
{Ask} TypeIn TabelaC Enter
Moveto [Codigo da Empresa      ] Check 
Moveto [Numero da Programacao  ] Check TypeIn "_NProg"   
Moveto [Situacao da Programacao] TypeIn "ABERTO"
{Ask} TypeIn TabelaCL Enter               
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Codigo                 ] TypeIn "_Cod"
Moveto [Pedido_Quantidade      ] TypeIn "Not Blank, Calc Sum as QtdPedido"
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Cidade                 ] TypeIn "_Cod"
Moveto [QtdPedido              ] TypeIn "_QtdP"
{Ask} TypeIn TabelaCD Enter
Moveto [Numero da Programacao  ] TypeIn "_NProg"
Moveto [Cidade                 ] TypeIn "_Cod"
Moveto [Pedido_Quantidade      ] TypeIn "Changeto _QtdP"
Do_It!
ClearAll

EndProc ;Atualiza_Tabelas_Temporarias()

;*******************************************************************************
;* Rotina para Finalizar Visitas                                               *
;*******************************************************************************
Proc Finalizar_Visitas()

{Ask} TypeIn TabelaC Enter
Moveto [Situacao da Programacao] TypeIn "Changeto FINALIZADO" 
Do_It!
ClearAll

{Tools} {More} {Add} TyPeIn TabelaC Enter {VisitaC}
If MenuChoice()="NewEntries"
   Then {Update}
EndIf
ClearAll
{Tools} {More} {Add} TyPeIn TabelaCD Enter {VisitaCD}
If MenuChoice()="NewEntries"
   Then {Update}
EndIf
ClearAll
{Tools} {More} {Add} TyPeIn TabelaCL Enter {VisitaCL}
If MenuChoice()="NewEntries"
   Then {Update}
EndIf
ClearAll

EndProc ;Finalizar_Visitas()

;*******************************************************************************
;* Rotina para Apurar a ComissÆo                                               *
;*******************************************************************************
Proc Apura_Comissao()

Aguarde("Aguarde, apurando comiss„o: Etapa 1/5")
{Ask} TypeIn Tabela_Comissao Enter
Moveto [Numero da Programacao  ] TypeIn "_Prog"
{Ask} TypeIn TabelaC Enter
Moveto [Numero da Programacao  ] TypeIn "_Prog"
Moveto [Data Inicial           ] Check    
Moveto [Data Final             ] Check 
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Data Inicial           ] Check    
Moveto [Data Final             ] Check 
Do_It!
ClearAll

If IsAssigned(Tabela_PedC)
   Then If IsTable(Tabela_PedC)
           Then Delete Tabela_PedC
        EndIf
EndIf
If IsAssigned(Tabela_NotC)
   Then If IsTable(Tabela_NotC)
           Then Delete Tabela_NotC
        EndIf
EndIf
If IsAssigned(Tabela_Troca)
   Then If IsTable(Tabela_Troca)
           Then Delete Tabela_Troca
        EndIf
EndIf

Release Vars NR,CONT_DATA,DATA_INI,DATA_FIM
NR=NRecords("Answer")
CONT_DATA = 0
Array DATA_INI[NR]
Array DATA_FIM[NR]

DATAI = BlankDate()
DATAF = BlankDate()

NR = NRecords("Answer")
View "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, apurando comiss„o: Etapa 2/5... "+BARRA_STRING)
  
  If [Data Inicial] < DATAI Or DATAI  = BlankDate()
     Then DATAI = [Data Inicial]
  EndIf
  If [Data Final] > DATAF Or DATAF  = BlankDate()
     Then DATAF = [Data Final]
  EndIf
  
  CONT_DATA = CONT_DATA + 1
  DATA_INI[CONT_DATA] = [Data Inicial]
  DATA_FIM[CONT_DATA] = [Data Final]
EndScan
ClearAll

Aguarde("Aguarde, apurando comiss„o: Etapa 3/5")
;---- PedidoC ---------------------------------------------------
{Ask} {\\Sistemas\\Vendas\\PedidoC} Check
Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
Moveto [Data de Emissao          ] TypeIn ">=~DATAI,<=~DATAF"
Moveto [Descricao da Destinacao  ] TypeIn "..VEND.. Or ..DEVOL.. Or ..TROC.."
Moveto [Codigo do Representante  ] TypeIn "~VSDGREPRESEN.."
Moveto [Situacao do Pedido       ] TypeIn "Not CANCELADO, Not SUSPENSO"
Do_It!
ClearAll

Tabela_PedC = Cria_Temp(PrivDir())
Copy "Answer" Tabela_PedC

Aguarde("Aguarde, apurando comiss„o: Etapa 4/5")
;---- Notas de Saida --------------------------------------------
{Ask} TypeIn Tabela_PedC Enter
Moveto [Numero do Pedido         ] Check TypeIn "_NPed"
Moveto [Codigo da Empresa        ] TypeIn "_Emp"
Moveto [Data de Emissao          ] Check TypeIn "as DataPedido"
Moveto [Codigo do Representante  ] TypeIn "_Rep"
Switch
  Case REGRA_APURACAO_COMISSAO = "PEDIDO ABERTO OU FATURADO" Or 
       REGRA_APURACAO_COMISSAO = "PEDIDO FATURADO"            :
       Moveto [Situacao do Pedido] TypeIn "FATURADO" 
EndSwitch
{Ask} {\\Sistemas\\Vendas\\NotaC} Check
Moveto [Codigo da Empresa        ] TypeIn "_Emp" 
Moveto [Codigo do Representante  ] TypeIn "_Rep"
Moveto [Numero do Pedido         ] TypeIn "_NPed"
Moveto [Situacao                 ] TypeIn "Not C"
Do_It!
ClearAll

Coedit "Answer"
While True
  If Search("TROC",[Descricao da Destinacao])>0 Or Search("DEVOL",[Descricao da Destinacao])>0
     Then Del
          Home
  EndIf   
  Skip
  If Eot() Then QuitLoop EndIf
EndWhile
Do_It!
ClearAll    

Tabela_NotC = Cria_Temp(PrivDir())
Copy "Answer" Tabela_NotC 

Aguarde("Aguarde, apurando comiss„o: Etapa 5/5")
;---- Notas de Troca --------------------------------------------
{Ask} TypeIn Tabela_PedC Enter
Moveto [Numero do Pedido         ] Check TypeIn "_NPed"
Moveto [Codigo da Empresa        ] TypeIn "_Emp"
Moveto [Data de Emissao          ] Check TypeIn "as DataPedido"
Moveto [Codigo do Representante  ] TypeIn "_Rep"
{Ask} {\\Sistemas\\Vendas\\NotaC} Check
Moveto [Codigo da Empresa        ] TypeIn "_Emp" 
Moveto [Codigo do Representante  ] TypeIn "_Rep"
Moveto [Numero do Pedido         ] TypeIn "_NPed"
Moveto [Descricao da Destinacao  ] TypeIn "..TROC.."
Moveto [Situacao                 ] TypeIn "Not C"
Do_It!
ClearAll  

Tabela_Troca = Cria_Temp(PrivDir())
Copy "Answer" Tabela_Troca

{Ask} TypeIn Tabela_Comissao Enter
Moveto [PedMeta                  ] TypeIn "Changeto Blank"
Do_It!
ClearAll  

Aguarde("Aguarde, apurando comiss„o: Finalizando Etapas 1/2")

View TabelaC
View TabelaCL
View Tabela_PedC
View Tabela_NotC
View Tabela_Troca
Coedit Tabela_Comissao
While True
  PROG = [Numero da Programacao]

  Moveto TabelaC
  Moveto [Numero da Programacao]
  Locate PROG
  If Not RetVal
     Then Moveto Tabela_Comissao
          Loop
     Else If [Situacao da Programacao] <> "ABERTO"
             Then Moveto Tabela_Comissao
                  Loop
          EndIf 
  EndIf  
  COD_REP = [Codigo do Representante]
  AUX_INI = [Data Inicial]
  AUX_FIM = [Data Final]

  VALOR = 0
  Moveto TabelaCL
  Moveto [Numero da Programacao]
  Locate PROG
  If RetVal
     Then While PROG = [Numero da Programacao]
            COD_CLI = [Codigo]
            Moveto Tabela_NotC
            Home
            Scan
              If [Codigo da Empresa] = VSDGEMPRESA   And
                 [Codigo do Representante] = COD_REP And
                 [Codigo] = COD_CLI
                 Then VALOR = VALOR + [Valor Nota Fiscal]
              EndIf   
            EndScan
            
            Moveto Tabela_Troca
            Home
            Scan
              If [Codigo da Empresa] = VSDGEMPRESA   And
                 [Codigo do Representante] = COD_REP And
                 [Codigo] = COD_CLI
                 Then VALOR = VALOR - [Valor Nota Fiscal]
              EndIf   
            EndScan
            
            Moveto TabelaCL
            Moveto [Numero da Programacao] 
            Skip
            If Eot() Then QuitLoop EndIf
            Locate Next PROG
            If Not RetVal Then QuitLoop EndIf
          EndWhile
  EndIf
    
  Moveto Tabela_Comissao
  [PedMeta] = VALOR
  Skip
  If Eot() Then QuitLoop EndIf
EndWhile
Do_it!                     
ClearAll

;---- Tabela Erro -------------------------------------------------------
Aguarde("Aguarde, apurando comiss„o: Finalizando Etapas 2/2")
View TabelaC
View TabelaCL
View TabelaErro
Coedit Tabela_Comissao
While True
  PROG = [Numero da Programacao]

  Moveto TabelaC
  Moveto [Numero da Programacao]
  Locate PROG
  If Not RetVal
     Then Moveto Tabela_Comissao
          Loop
     Else If [Situacao da Programacao] <> "ABERTO"
             Then Moveto Tabela_Comissao
                  Loop
          EndIf 
  EndIf  
  COD_REP = [Codigo do Representante]
  AUX_INI = [Data Inicial]
  AUX_FIM = [Data Final]

  Moveto TabelaErro
  Home
  Scan
    VALOR = 0
    PEDIDO = [Ocorrencia de Erros]
    GetRecord "\\Sistemas\\Vendas\\PedidoC" PEDIDO To REG_PED
    If RetVal
       Then If REG_PED["Data de Emissao"] >= AUX_INI And REG_PED["Data de Emissao"] <= AUX_FIM And 
               REG_PED["Codigo da Empresa"] = VSDGEMPRESA And
               REG_PED["Codigo do Representante"] = COD_REP 
               Then VALOR = [Valor Total Pedidos]
            EndIf 
    EndIf
    
    If VALOR > 0
       Then Moveto Tabela_Comissao
            [PedMeta] = [PedMeta] + VALOR
    EndIf
    Moveto TabelaErro
  EndScan
  Moveto Tabela_Comissao
  Skip
  If Eot() Then QuitLoop EndIf
EndWhile
Do_it!                     
ClearAll

If IsAssigned(Tabela_PedC)
   Then If IsTable(Tabela_PedC)
           Then Delete Tabela_PedC
        EndIf
EndIf
If IsAssigned(Tabela_NotC)
   Then If IsTable(Tabela_NotC)
           Then Delete Tabela_NotC
        EndIf
EndIf
If IsAssigned(Tabela_Troca)
   Then If IsTable(Tabela_Troca)
           Then Delete Tabela_Troca
        EndIf
EndIf

EndProc ;Apura_Comissao()

;*******************************************************************************
;* Rotina para Atualizar Valor da Comissao de cada representante nos pedidos   *
;*******************************************************************************
Proc Atualiza_Comissao()

{Ask} TypeIn TabelaC Enter
Moveto [Data Inicial           ] Check    
Moveto [Data Final             ] Check 
Do_It!
ClearAll

Release Vars NR,CONT_DATA,DATA_INI,DATA_FIM
NR=NRecords("Answer")
CONT_DATA = 0
Array DATA_INI[NR]
Array DATA_FIM[NR]

DATAI = BlankDate()
DATAF = BlankDate()

NR = NRecords("Answer")
View "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, verificando o per¡odo... "+BARRA_STRING)
  
  If [Data Inicial] < DATAI Or DATAI  = BlankDate()
     Then DATAI = [Data Inicial]
  EndIf
  If [Data Final] > DATAF Or DATAF  = BlankDate()
     Then DATAF = [Data Final]
  EndIf
  
  CONT_DATA = CONT_DATA + 1
  DATA_INI[CONT_DATA] = [Data Inicial]
  DATA_FIM[CONT_DATA] = [Data Final]
EndScan
ClearAll

Aguarde("Gerando tabela temporaria dos PEDIDOS")
;---- PedidoC ---------------------------------------------------
{Ask} {\\Sistemas\\Vendas\\PedidoC} Check
Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.." 
Moveto [Data de Emissao          ] TypeIn ">=~DATAI,<=~DATAF"
Moveto [Descricao da Destinacao  ] TypeIn "..VEND.. Or ..DEVOL.."
Moveto [Codigo do Representante  ] TypeIn "~VSDGREPRESEN.."
Moveto [Situacao do Pedido       ] TypeIn "Not CANCELADO, Not SUSPENSO"
Do_It!
ClearAll               

Tabela_PedC = Cria_Temp(PrivDir())
Copy "Answer" Tabela_PedC

Aguarde("Gerando tabela temporaria das VENDAS/TROCA")
;---- Notas de Saida --------------------------------------------
{Ask} TypeIn Tabela_PedC Enter
Moveto [Codigo da Empresa        ] TypeIn "_Emp"
Moveto [Numero do Pedido         ] TypeIn "_NPed"
Moveto [Codigo do Representante  ] TypeIn "_Rep"
Switch
  Case REGRA_APURACAO_COMISSAO = "PEDIDO ABERTO OU FATURADO" Or 
       REGRA_APURACAO_COMISSAO = "PEDIDO FATURADO"            :
       Moveto [Situacao do Pedido] TypeIn "FATURADO" 
EndSwitch
{Ask} {\\Sistemas\\Vendas\\NotaC} Check
Moveto [Codigo da Empresa        ] TypeIn "_Emp" 
Moveto [Codigo do Representante  ] TypeIn "_Rep"
Moveto [Numero do Pedido         ] TypeIn "_NPed"
Moveto [Situacao                 ] TypeIn "Not C"
Do_It!
ClearAll               

Tabela_NotC = Cria_Temp(PrivDir())
Copy "Answer" Tabela_NotC

Aguarde("Gerando tabela temporaria das DEVOLUCOES")
;---- Notas de Entrada ------------------------------------------

{Ask} {\\Sistemas\\Estoque\\NotaEc} Check
Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.." 
Moveto [Data de Entrada          ] TypeIn ">=~DATAI+7,<=~DATAF+7"
Moveto [Tipo de Operacao         ] TypeIn "D"
Moveto [Codigo do Representante  ] TypeIn "~VSDGREPRESEN.."
Do_It!
ClearAll

Tabela_NotEC = Cria_Temp(PrivDir())
Copy "Answer" Tabela_NotEC

;---- Comissionamento para as Ocorrencias de Erro ---------------
If Not IsEmpty(TabelaErro) And COMISSAO_OCORRENCIA_ERROS
   Then View TabelaC
        Coedit TabelaErro  
        Scan
          Barra(NRecords(TabelaErro), RecNo())
          Aguarde("Aguarde, Verificando a programa‡„o das ocorrˆncias de erro "+BARRA_STRING)
          
          DT   = [Data Inicial]
          COR  = [Codigo do Representante]
          PROG = ""
          
          Moveto TabelaC
          Moveto [Codigo do Representante]
          Locate COR
          If RetVal
             Then While [Codigo do Representante] = COR
                    If DT >= [Data Inicial] And DT <= [Data Final] And [Codigo da Empresa] = VSDGEMPRESA
                       Then PROG = [Numero da Programacao] 
                            QuitLoop
                    EndIf   
                    Skip
                    If Eot() Then QuitLoop EndIf
                    Locate Next COR
                    If Not RetVal Then QuitLoop EndIf
                  EndWhile
          EndIf   
          Moveto TabelaErro
          If PROG <> "" Then [Numero da Programacao] = PROG EndIf
        EndScan
        Do_It!          
        Release Vars PROg,COR,DTI,DTF
EndIf         
ClearAll    

;---- Processo de Atualiza‡Æo das Comissoes ---------------------
If COMISSAO_OCORRENCIA_ERROS
   Then View TabelaErro
EndIf   
View Tabela_PedC
View Tabela_NotC
View Tabela_NotEC
View TabelaCL
Coedit TabelaC
For i From 1 To NR
  AUX_INI = DateVal(DATA_INI[i])
  AUX_FIM = DateVal(DATA_FIM[i])
  
  Aguarde("Atualizando comissao nos PEDIDOS de "+StrVal(AUX_INI)+" at‚ "+StrVal(AUX_FIM))
    
  CONT_NPROG = 0
  Release Vars NPROG
  DynArray NPROG[]
    
  Moveto TabelaC       
  Home
  Scan
    If [Data Inicial] >= AUX_INI And 
       [Data Final  ] <= AUX_FIM And
       [Codigo da Empresa] = VSDGEMPRESA And 
       [Situacao da Programacao] = "ABERTO"
       Then CONT_NPROG = CONT_NPROG + 1
            NPROG[CONT_NPROG] = [Numero da Programacao]
    EndIf   
  EndScan
    
  If CONT_NPROG = 0 Then Loop EndIf    
  For oi From 1 To DynArraySize(NPROG)
    Moveto TabelaC      
    Home
    Moveto [Numero da Programacao]
    Locate NPROG[oi]
    If RetVal
       Then COD_REP = [Codigo do Representante]       
            VR_COMI = [Valor da Comissao]
            COD_EMP = [Codigo da Empresa]
            
            For ii From 1 To 2
              If ii=2 And Not COMISSAO_OCORRENCIA_ERROS Then Loop EndIf
              If ii = 1
                 Then Moveto TabelaCL
                 Else Moveto TabelaErro      
              EndIf
              Moveto [Numero da Programacao]
              Locate NPROG[oi]
              If Retval
                 Then While [Numero da Programacao] = NPROG[oi]
                        FAZ_ROTNA = False
                        Switch
                          Case ii=1 : If [Pedido_Valor] <> BlankNum()
                                         Then FAZ_ROTNA = True
                                      EndIf   
                          Case ii=2 : If [Valor Total Pedidos] <> BlankNum()
                                         Then NPED = [Ocorrencia de Erros] 
                                              If NPED<>"" Then FAZ_ROTNA = True EndIf
                                      EndIf               
                        EndSwitch   
                        If FAZ_ROTNA   
                           Then CODIGO = [Codigo]
                                Aguarde("Atualizando comissao dos Pedidos de "+StrVal(AUX_INI)+" at‚ "+StrVal(AUX_FIM))        
                                Moveto Tabela_PedC
                                Home
                                Scan For (([Codigo da Empresa]  = COD_EMP  And 
                                           [Data de Emissao  ] >= AUX_INI  And 
                                           [Data de Emissao  ] <= AUX_FIM  And
                                           (Search("VEND",[Descricao da Destinacao]) > 0 Or Search("DEVOL",[Descricao da Destinacao])>0) And
                                           [Codigo do Representante] = COD_REP And
                                           [Codigo           ]=CODIGO)  
                                           Or
                                           (ii=2 And [Numero do Pedido]=PED))
                                                                                        
                                  NPED = [Numero do Pedido  ]
                                  SITU = [Situacao do Pedido]       
                                  [Comissao do Representante] = VR_COMI
                                  UnLockRecord  
                             
                                  Moveto Tabela_NotC
                                  Moveto [Numero do Pedido]
                                  Locate NPED
                                  If ReTVal
                                     Then Aguarde("Atualizando comissao das Notas de Saida de "+StrVal(AUX_INI)+" at‚ "+StrVal(AUX_FIM))
                                          While [Numero do Pedido ] = NPED
                                            If [Codigo da Empresa]  = COD_EMP And 
                                               ;(Search("VEND",[Descricao da Destinacao]) > 0 Or Search("DEVOL",[Descricao da Destinacao])>0)And 
                                               [Codigo do Representante] = COD_REP And
                                               [Codigo                 ] = CODIGO
                                               Then [Comissao do Representante] = VR_COMI
                                                    UnLockRecord
                                            EndIf
                                            Skip
                                            If Eot()Then QuitLoop EndIf
                                            Locate Next NPED
                                            If Not RetVal Then QuitLoop EndIf
                                          EndWhile            
                                  EndIf
                                  Moveto Tabela_PedC  
                                EndScan
                        EndIf
                        Moveto TabelaCL
                        Skip
                        If Eot() Then QuitLoop EndIf
                      EndWhile
              EndIf     
            Endfor        
            Aguarde("Atualizando comissao das Devolu‡”es de "+StrVal(AUX_INI)+" at‚ "+StrVal(AUX_FIM))
            
            Moveto Tabela_NotEC  
            Home
            Scan For [Codigo da Empresa]  = COD_EMP And 
                     [Data de Entrada  ] >= AUX_INI+7 And 
                     [Data de Entrada  ] <= AUX_FIM+7 And
                     [Tipo de Operacao ]  = "D"     And
                     [Codigo do Representante] = COD_REP 
                     
                     [Comissao do Representante] = VR_COMI
                     UnLockRecord
            EndScan
    EndIf
  Endfor  
EndFor
Do_it!
ClearAll

Atualiza_Tabelas()

If IsAssigned(Tabela_PedC)
   Then If IsTable(Tabela_PedC)
           Then Delete Tabela_PedC
        EndIf
EndIf
If IsAssigned(Tabela_NotC)
   Then If IsTable(Tabela_NotC)
           Then Delete Tabela_NotC
        EndIf
EndIf
If IsAssigned(Tabela_NotEC)
   Then If IsTable(Tabela_NotEC)
           Then Delete Tabela_NotEC
        EndIf
EndIf

EndProc ;Atualiza_Comissao()

;*******************************************************************************
;* Atualiza Tabelas do Sistema                                                 *
;*******************************************************************************
Proc Atualiza_Tabelas()
;Processo em SCAN p/ evitar erros se tiver algum usu rio utilizando a rotina

View "\\Sistemas\\Vendas\\PedidoC"
Coedit Tabela_PedC
Scan
  NLANC  = [Numero do Pedido]
  VR_COMI = [Comissao do Representante]
  
  Moveto "\\Sistemas\\Vendas\\PedidoC"
  Moveto [Numero do Pedido]
  Locate NLANC
  If RetVal
     Then [Comissao do Representante] = VR_COMI
          UnLockRecord
  EndIf   
  Moveto Tabela_PedC
EndScan
Do_it!
ClearAll

View "\\Sistemas\\Vendas\\NotaC"
Coedit Tabela_NotC
Scan
  COD_EMP = [Codigo da Empresa]
  NUM_DOC = [Numero do Documento]
  SER_DOC = [Serie do Documento]
  VR_COMI = [Comissao do Representante]
  
  Moveto "\\Sistemas\\Vendas\\NotaC"
  Moveto [Codigo da Empresa]
  Locate COD_EMP,NUM_DOC,SER_DOC
  If RetVal
     Then If [Situacao]<>"C" 
             Then [Comissao do Representante] = VR_COMI
                  UnLockRecord
          EndIf        
  EndIf   
  Moveto Tabela_NotC
EndScan
Do_it!
ClearAll

View "\\Sistemas\\Estoque\\NotaEc"
Coedit Tabela_NotEC
Scan
  NLANC   = [Numero do Lancamento]
  VR_COMI = [Comissao do Representante]
  
  Moveto "\\Sistemas\\Estoque\\NotaEc"
  Moveto [Numero do Lancamento]
  Locate NLANC
  If RetVal
     Then [Comissao do Representante] = VR_COMI
          UnLockRecord
  EndIf   
  Moveto Tabela_NotEC
EndScan
Do_it!
ClearAll

EndProc ;Atualiza_Tabelas()

;*******************************************************************************
;* Carrega F1 Personalizado do ShowDialog                                      *
;*******************************************************************************
Proc SDCarrega_F1(PARAM)
Private PARAM 

Switch 
  Case PARAM = "Programacao"    : {Ask} {\\Sistemas\\Visita\\VisitaC}
                                  Moveto [Numero da Programacao  ] Check 
                                  Moveto [Nome Fantasia Represent] Check    
                                  Do_It!
                                  Moveto "\\Sistemas\\Visita\\VisitaC"
                                  ClearImage
                                  Monta_Opcoes("Programa‡„o da Visita","F1_Temp")
  Case PARAM = "Representante"  : {Ask} {\\Sistemas\\Visita\\VisitaC}
                                  Moveto [Numero da Programacao  ] TypeIn "~VSDGPROGRAMACAO.." 
                                  Moveto [Codigo do Representante] Check
                                  Moveto [Nome Fantasia Represent] Check    
                                  Do_It!
                                  Moveto "\\Sistemas\\Visita\\VisitaC"                         
                                  ClearImage                                                                                       
                                  Monta_Opcoes("Vendedor","F1_Temp")
  Case PARAM = "Cliente"        : {Ask} {\\Sistemas\\Visita\\VisitaC}
                                  Moveto [Numero da Programacao  ] TypeIn "_NProg,~VSDGPROGRAMACAO.."
                                  Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."  
                                  {Ask} {\\Sistemas\\Visita\\VisitaCL}
                                  Moveto [Numero da Programacao  ] Check TypeIn "_NProg"   
                                  Moveto [Codigo                 ] Check
                                  Moveto [Nome Fantasia EmitDest ] Check
                                  Do_It!
                                  Moveto "\\Sistemas\\Visita\\VisitaC"
                                  ClearImage   
                                  Moveto "\\Sistemas\\Visita\\VisitaCL"
                                  ClearImage                                   
                                  Monta_Opcoes("Cliente da Visita","F1_Temp")                           
EndSwitch                           

Return True

EndProc ;SDCarrega_F1()

;*******************************************************************************
;* Rotina Monta Lista de Tabelas a Processar                                   *
;*******************************************************************************
Proc ListadeTabelas()

If IsAssigned(Array_Tabelas)
   Then Release Vars Array_Tabelas
EndIf
DynArray Array_Tabelas[]

Array_Tabelas[01]="VisitaC"
Array_Tabelas[02]="VisitaCD"
Array_Tabelas[03]="VisitaCL"
Array_Tabelas[04]="VisitaCM"

EndProc

;*******************************************************************************
;* Rotina Bloqueia Tabelas da Pasta                                            *
;*******************************************************************************
Proc BloqueiaTabelas(Pasta)
Private MSG, Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  If IsTable(Pasta+Array_Tabelas[i])
     Then Lock Pasta+Array_Tabelas[i] FL
          If Not RetVal
             Then MSG=Completa("O usu rio "+Upper(ErrorUser())+" esta usando uma rotina do sistema",52," ")+"//"
                  MSG=MSG+Completa("que atualiza a programa‡„o de visitas!",52," ")+"////"
                  MSG=MSG+Completa("- Contact -lo para liberar esta rotina",52," ")+"//"            
                  MSG=MSG+Completa("- Processo Abortado",52," ")+"//"
                  Mensagem(MSG)
                  Return False
          EndIf
  EndIf
EndFor

Return True
EndProc

;*******************************************************************************
;* Rotina Desbloqueia Tabelas da Pasta                                         *
;*******************************************************************************
Proc DesbloqueiaTabelas(Pasta)
Private Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  If IsTable(Pasta+Array_Tabelas[i])
     Then UnLock Pasta+Array_Tabelas[i] FL
  EndIf
EndFor

EndProc

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

VSDGCODMODELO     = ""
VSDGMODELO        = ""

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01  Anal¡tico")
ModeloRelatoriosAdd("01B Anal¡tico - Apenas ocorrˆncia de erros")
ModeloRelatoriosAdd("Separator")
ModeloRelatoriosAdd("06  Sint‚tico - Empresa/Vendedor/Cidades")
ModeloRelatoriosAdd("02  Sint‚tico - Empresa/Vendedor/Per¡odo")
ModeloRelatoriosAdd("03  Sint‚tico - Empresa/Vendedor")
ModeloRelatoriosAdd("04  Sint‚tico - Empresa/Per¡odo")
ModeloRelatoriosAdd("05  Sint‚tico - Empresa/Programa‡Æo")
ModeloRelatoriosAdd("Fim")
                           
EndProc ;ModeloRelatoriosCarregaLista

;*******************************************************************************
;* 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()
          Switch
            Case Campo="VIS_PROGRAMACAO"   : If SDCarrega_F1("Programacao")
                                                Then AUX_MAR = "1" 
                                                     Seleciona_Opcoes("Programa‡„o da Visita","F1_Temp")   
                                             EndIf
            Case Campo="VIS_REPRESEN"      : If SDCarrega_F1("Representante")
                                                Then AUX_REF = "1"
                                                     Seleciona_Opcoes("Vendedor","F1_Temp")  
                                             EndIf                                                            
          EndSwitch      
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"        : Campo="NO"
            Case Campo="VIS_PROGRAMACAO"   : Campo="TG_EMPRESA"
            Case Campo="VIS_REPRESEN"      : Campo="VIS_PROGRAMACAO"  
            Case Campo="TG_DTINI"          : Campo="VIS_PROGRAMACAO"
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"
            Case Campo="VIS_ATUALIZA"      : Campo="VIS_PROGRAMACAO"
            Case Campo="TG_CODMODELO"      : Campo="VIS_PROGRAMACAO"
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
          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_EMPRESA"        : Campo="VIS_PROGRAMACAO"
                         If Isblank(VSDGEMPRESA)
                            Then Campo="TG_EMPRESA"
                                 Mensagem("Empresa inv lida !")
                         EndIf   
                    Case Campo="VIS_PROGRAMACAO"   : Campo="VIS_REPRESEN"
                         VSDGPROGRAMACAO = ControlValue("VIS_PROGRAMACAO")
                         If Not IsBlank(VSDGPROGRAMACAO) 
                            Then SDCarrega_F1("Programacao")
                                 VSDGPROGRAMACAO = AlinhM(VSDGPROGRAMACAO,6)
                                 If Not Checa_Opcoes("Programa‡„o da Visita",VSDGPROGRAMACAO)
                                    Then VSDGPROGRAMACAO    = ""
                                         Mensagem("Programa‡„o de Visita inv lida !")
                                         Campo="VIS_PROGRAMACAO"
                                    Else VSDGREPRESEN = ""
                                         Campo="VIS_ATUALIZA"        
                                 EndIf
                          EndIf              
                    Case Campo="VIS_REPRESEN"      : Campo="TG_DTINI"     
                         VSDGREPRESEN = ControlValue("VIS_REPRESEN")
                         If IsBlank(VSDGREPRESEN) 
                            Then VSDGNOMREPR = "TODOS"   
                            Else SDCarrega_F1("Representante")
                                 VSDGREPRESEN = AlinhM(VSDGREPRESEN,4)
                                 If Not Checa_Opcoes("Vendedor",VSDGREPRESEN)     
                                    Then VSDGREPRESEN = ""
                                         VSDGNOMREPR  = ""
                                         Switch
                                           Case Not IsBlank(VSDGPROGRAMACAO) : 
                                                MSG = "Vendedor inv lido ou n„o corresponde a programa‡„o informada!"
                                           OtherWise                         :
                                                MSG = "Vendedor inv lido"
                                         EndSwitch
                                         Mensagem(MSG)
                                         Campo="VIS_REPRESEN"   
                                 EndIf
                          EndIf  
                    Case Campo="TG_DTINI"          : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"          : Campo="VIS_ATUALIZA"
                    Case Campo="VIS_ATUALIZA"      : Campo="TG_CODMODELO"
                    Case Campo="TG_CODMODELO"      : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="VIS_PROGRAMACAO":
     MSG_CAMPO="Informe a Programa‡Æo da Visita"
  Case Campo="VIS_REPRESEN":
     MSG_CAMPO="Informe o Representante"
  Case Campo="":
     MSG_CAMPO=""     
  Case Campo="VIS_ATUALIZA":
     MSG_CAMPO="=Mover  Barra de Espa‡o=Marca/Desmarca"
Endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog()

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

;---- P/ atualiza‡Æo das comissäes nos pedidos que estÆo relacionados na ocorrˆncia de erros
COMISSAO_OCORRENCIA_ERROS = True

VSDGEMPRESA          = ""
VSDGNOMEMP           = ""
VSDGPROGRAMACAO      = ""
VSDGREPRESEN         = ""
VSDGNOMREPR          = ""  
VSDGDTINI            = BlankDate()
VSDGDTFIM            = BlankDate()       

;-------------------------------------------------------------------------------
If Not IsAssigned(REGRA_APURACAO_COMISSAO) Then REGRA_APURACAO_COMISSAO = "" EndIf
;Regra para apura‡Æo das comissäes conforme a sele‡Æo, podendo ser apenas de pedidos faturados,
;pedidos faturados e em aberto ou apenas pedidos independente do status faturado, tendo a nota
;deste pedido, o valor e a quantidade ser  verificado o que esta nesta nota.
                                                                            
;REGRA_APURACAO_COMISSAO = "PEDIDO ABERTO OU FATURADO"                          ;Seleciona os Pedidos em Aberto ou Faturado 
;REGRA_APURACAO_COMISSAO = "PEDIDO FATURADO"                                    ;Seleciona apenas os Pedidos Faturados
REGRA_APURACAO_COMISSAO = "PEDIDO E NOTA"                                       ;Seleciona os Pedidos conforme as Notas
;-------------------------------------------------------------------------------

Array VIS_ATUALIZA[2]
VIS_ATUALIZA[1]="Finaliza Visitas em ABERTO"
VIS_ATUALIZA[2]="Atualiza ComissÆo nas Vendas"

Array Check_ATUALIZA[2]
Check_ATUALIZA[1]=False
Check_ATUALIZA[2]=False

ModeloRelatoriosCarregaLista()

While True
  Echo Normal
  Echo Off
  ShowDialog "Programa‡„o de Visita" Proc "SD_Dialog"                        
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 07,12 Height 16 Width 72
                    
    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP

    Label  @ 02,00 "Programa‡Æo"  For "VIS_PROGRAMACAO"
    Accept @ 03,01 Width 33 "A6"  Picture "#*#" Tag "VIS_PROGRAMACAO"    To VSDGPROGRAMACAO

    Label  @ 04,00 "Vendedor"  For "VIS_REPRESEN"
    Accept @ 05,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "VIS_REPRESEN" To VSDGREPRESEN
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "VIS_NOMREPR"  To VSDGNOMREPR    
    
    Label  @ 06,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 07,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 07,16 "at‚" For "TG_DTFIM"
    Accept @ 07,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
    
    CheckBoxes @ 01,35 Height 2 Width 34 Tag "VIS_ATUALIZA" 
    VIS_ATUALIZA[1] to Check_ATUALIZA[1],
    VIS_ATUALIZA[2] to Check_ATUALIZA[2]
    
    Label  @ 09,00  "Modelo de ~R~elat¢rio"  For "TG_CODMODELO"
    Accept @ 10,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 10,06  Width 63 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO        
    
    Pushbutton @ 12,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 12,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  Echo Off
  If Not RetVal Then QuitLoop EndIf
  if not ValidarModelosRelatorios() then loop endif         
  ClearAll
  
  If REGRA_APURACAO_COMISSAO <> "PEDIDO ABERTO OU FATURADO" And                     
     REGRA_APURACAO_COMISSAO <> "PEDIDO FATURADO"           And                    
     REGRA_APURACAO_COMISSAO <> "PEDIDO E NOTA"
     Then Mensagem("Regra de apura‡„o da comiss„o n„o est  declarada!////Verificar com o Suporte T‚cnico VISE INFORMATICA!")
          Loop
  EndIf        

  Switch
    Case Not IsBlank(VSDGPROGRAMACAO) : GetRecord "\\Sistemas\\Visita\\VisitaC" VSDGPROGRAMACAO To REG_PROGRAMCAO
                                        If Not RetVal
                                           Then Mensagem("Programa‡„o n„o localizada!")
                                                Loop
                                        EndIf  
                                        VSDGDTINI    = REG_PROGRAMCAO["Data Inicial"]
                                        VSDGDTFIM    = REG_PROGRAMCAO["Data Final"]
                                        VSDGREPRESEN = REG_PROGRAMCAO["Codigo do Representante"]
    OtherWise : If IsBlank(VSDGDTFIM) 
                   Then Mensagem("Data Final Inv lida !")
                         Loop
                EndIf
  EndSwitch

  DISPOSITIVO()
  If OK="" Then Loop EndIf

  ListadeTabelas()
  If (BloqueiaTabelas("\\Sistemas\\Visita\\"))
     Then Tabela = Cria_Temp(PrivDir())
          Copy "\\Base\\Sistemas\\Visita\\RM_0100" Tabela
                  
          Switch
            Case Not IsBlank(VSDGPROGRAMACAO) : MSG = "N„o h  pedido(s) vinculado(s) a esta programa‡„o!" 
            Case Not IsBlank(VSDGREPRESEN)    : MSG = "N„o h  pedido(s) vinculado(s) a este vendedor!"
            OtherWise                         : MSG = "N„o h  pedido(s) vinculado(s)!"
          EndSwitch
          
          If Not Relacao_Visitas() Then Mensagem(MSG) Loop EndIf
          Switch
            Case VSDGCODMODELO="06"                   : IMPRIREL(Tabela,"1") 
            Case VSDGCODMODELO="02"                   : IMPRIREL(Tabela,"2")
            Case VSDGCODMODELO="03"                   : IMPRIREL(Tabela,"3")
            Case VSDGCODMODELO="04"                   : IMPRIREL(Tabela,"5")
            Case VSDGCODMODELO="05"                   : IMPRIREL(Tabela,"6")
            Case VSDGCODMODELO="01" Or VSDGCODMODELO="01B" : IMPRIREL(Tabela,"R")
          EndSwitch
                            
          If (Check_ATUALIZA[1] Or Check_ATUALIZA[2]) And VSDGCODMODELO="01B"  
             Then Mensagem("Para atualiza‡„o das comiss”es ou finaliza‡„o das programa‡”es//"+
                            "o modelo de relat¢rio deve ser diferente do [B]!             ")
             Else If Check_ATUALIZA[2]
                     Then ConfGeral("Deseja atualizar a comissao do representante nos pedidos ?")
                          If Ok="S"
                             Then Atualiza_Comissao()
                          EndIf
                  EndIf
                  If Check_ATUALIZA[1]
                     Then ConfGeral("Deseja realmente finalizar as visitas em ABERTO ?")
                          If Ok="S"
                             Then Finalizar_Visitas()
                          EndIf
                  EndIf        
          EndIf
          
          Delete Tabela
          Delete TabelaC
          Delete TabelaCD
          Delete TabelaCL        
          If IsAssigned(Tabela_Erro)
             Then If IsTable(Tabela_Erro)
                     Then Delete Tabela_Erro
                  EndIf
          EndIf
          If IsAssigned(TabelaErro)
             Then If IsTable(TabelaErro)
                     Then Delete TabelaErro
                  EndIf
          EndIf
          If IsAssigned(TabelaAux)
             Then If IsTable(TabelaAux)
                     Then Delete TabelaAux
                  EndIf
          EndIf
          If IsAssigned(Tabela_Temp)
             Then If IsTable(Tabela_Temp)
                     Then Delete Tabela_Temp
                  EndIf
          EndIf 
  EndIf
  ListadeTabelas()
  DesbloqueiaTabelas("\\Sistemas\\Visita\\")
EndWhile

ClearAll
Release Vars All
Release Procs All7
