;** Rm_3210F *******************************************************************
;* Curva ABC Representante                                                     *
;*******************************************************************************
;Autor: Visao/Vise
;Desenvolvido    : 30/10/2018 por Anivel Augusto Rodrigues
;Ultima Alteracao: 30/10/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: sem valores
;Ultima Alteracao: 05/11/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes devido a totalizadores gerando registro em branco sem valores
;Ultima Alteracao: 17/06/2019 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes indice errado e indice acumulado da classe
;Ultima Alteracao: 12/12/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desfazer ask com representante nÆo cadastrado

;*******************************************************************************
;* Rotina p/ Selecionar Registros                                              *
;*******************************************************************************
Proc Rm_3210F_Seleciona()
private wi
ClearAll

;****** Vendas *****************************************************************
If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") And
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then
        for wi from 1 to 4 
          
          switch
            case wi=1 : ExibeRodape(1,"Aguarde, processando vendas") 
            case wi=2 : ExibeRodape(1,"Aguarde, processando n£mero de vendas") 
            case wi=3 : ExibeRodape(1,"Aguarde, processando n£mero de produtos") 
            case wi=4 : ExibeRodape(1,"Aguarde, processando n£mero de clientes") 
          endswitch 

          {Ask} TypeIn "\\Sistemas\\Cadastro\\Destinat" Enter
          Moveto [Codigo                 ]       TypeIn "_cpes"
          Moveto [Codigo da Area         ]       TypeIn "~VSDGAREA.."

          {Ask} TypeIn "\\Sistemas\\Cadastro\\Represen" Enter
          Moveto [Codigo do Representante]       TypeIn "_crep"
          Moveto [Codigo da Gerencia     ]       TypeIn "~VSDGGERENCIA.."        
  
          {Ask} {\\Sistemas\\Estoque\\Itens}
          Moveto [Codigo do Item         ]       TypeIn "_cite"
          Moveto [Codigo da Marca        ]       TypeIn "~VSDGMARCA.."
          Moveto [Codigo da Familia      ]       TypeIn "~VSDGFAMI.."
          Moveto [Codigo do Grupo        ]       TypeIn "~VSDGGRP.."

          {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
          Moveto [Codigo da Empresa      ] Check TypeIn "_cemp, ~VSDGEMPRESA2.."
          Moveto [Numero do Documento    ]       TypeIn "_ndoc"
          Moveto [Serie do Documento     ]       TypeIn "_sdoc"
          Moveto [Data de Emissao        ]       TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
          Moveto [Descricao da Destinacao]       TypeIn "..VEND.. or ..SERV.. or ..SAIDA.."
          Moveto [Tipo Movimento Estoque ]       TypeIn "S"
          Moveto [Situacao               ]       TypeIn "Not C"
          Moveto [Codigo                 ]       TypeIn "_cpes"
          Moveto [Codigo do Representante] Check TypeIn "_crep, ~VSDGREPRESEN.."

          switch
            case wi=2 :
              moveto [Data de Saida] typeIn "calc _cemp+_ndoc+_sdoc As nDocto"

            case wi=4 :
              moveto [Codigo       ] check

          endswitch 
          
          {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
          Moveto [Codigo da Empresa      ]       TypeIn "_cemp"
          Moveto [Numero do Documento    ]       TypeIn "_ndoc"
          Moveto [Serie do Documento     ]       TypeIn "_sdoc"
          Moveto [Codigo do Item         ]       TypeIn "_cite"
          switch
            case wi=1 :
              Moveto [Quantidade             ]      TypeIn "Calc Sum as Quantidade"
              Moveto [Preco Total            ]      TypeIn "Calc Sum as Preco Total"
              Moveto [Valor Desconto Total   ]      TypeIn "Calc Sum as Valor Desconto Total"

            case wi=3 :
              Moveto [Codigo do Item         ] Check

          endswitch 
          Moveto [Situacao_Item          ] TypeIn "Not C"
          Do_It!
          ClearAll
  
          switch
            case wi=1 : Rm_3210F_Adiciona_Dados("VENDAS") 

            case wi=2 : 
              {Ask} {Answer}
              Moveto [Codigo da Empresa      ] Check
              Moveto [Codigo do Representante] Check 
              moveto [NDocto                 ] typein "Calc Count As NumVendas"
              Do_It!
              ClearAll

              Rm_3210F_Adiciona_Dados("NUM_VENDAS") 

            case wi=3 : 
              {Ask} {Answer}
              Moveto [Codigo da Empresa      ] Check
              Moveto [Codigo do Representante] Check 
              Moveto [Codigo do Item         ] typein "Calc Count As NumProdutos"
              Do_It!
              ClearAll

              Rm_3210F_Adiciona_Dados("NUM_PRODUTOS") 

            case wi=4 : 
              {Ask} {Answer}
              Moveto [Codigo da Empresa      ] Check
              Moveto [Codigo do Representante] Check 
              Moveto [Codigo                 ] typein "Calc Count As NumClientes"
              Do_It!
              ClearAll

              Rm_3210F_Adiciona_Dados("NUM_CLIENTES") 

          endswitch 
          
        endfor
EndIf

EndProc   ; (Seleciona)

;*******************************************************************************
;* Rotina adicionar dados na Db temporaria                                     *
;*******************************************************************************
Proc Rm_3210F_Adiciona_Dados(Tipo)

If IsEmpty("Answer")
   Then Return
EndIf

switch
  Case Tipo="VENDAS":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo do Representante] typein "_crep"
    Moveto [Quantidade             ] typein "_qtde"
    Moveto [Preco Total            ] typein "_ptot"
    Moveto [Valor Desconto Total   ] typein "_vdes"
    {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo do Representante] typein "_crep"
    Moveto [Vendas_Quantidade      ] typein "_qtde"
    Moveto [Vendas_Preco Total     ] typein "_ptot-_vdes"
    Do_It!
    ClearAll

  Case Tipo="NUM_VENDAS":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo do Representante] typein "_crep"
    Moveto [NumVendas              ] typein "_qtde"
    {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo do Representante] typein "_crep"
    Moveto [NumeroDeVendas         ] typein "_qtde"
    Do_It!
    ClearAll

  Case Tipo="NUM_PRODUTOS":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo do Representante] typein "_crep"
    Moveto [NumProdutos            ] typein "_qtde"
    {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo do Representante] typein "_crep"
    Moveto [NumeroDeProdutos       ] typein "_qtde"
    Do_It!
    ClearAll

  Case Tipo="NUM_CLIENTES":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo do Representante] typein "_crep"
    Moveto [NumClientes            ] typein "_qtde"
    {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo do Representante] typein "_crep"
    Moveto [NumeroDeClientes       ] typein "_qtde"
    Do_It!
    ClearAll

endswitch

EndProc

;*******************************************************************************
;* Rotina p/ processar Db temporaria                                           *
;*******************************************************************************
Proc Rm_3210F_Processa()
private empant, VrAcumulada, NR, classeant, grupo

LimpaRodape(0)
AGUARDE("Aguarde, processando dados")

;***** Ajusta Dados ************************************
If VSDGEMPRESA="0000"
   Then {Ask} TypeIn Tabela Enter TypeIn "Fast"
        Moveto [Codigo da Empresa      ] TypeIn "changeto 0000"
        Moveto [Nome Fantasia Empresa  ] TypeIn "changeto TOTALIZA EMPRESAS"
        Do_It!
        ClearAll
   Else {Ask} {\\Sistemas\\Cadastro\\Empresas}
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Nome Fantasia Empresa  ] Example "nemp"
        {Ask} TypeIn Tabela Enter TypeIn "Fast"
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Nome Fantasia Empresa  ] TypeIn "changeto _nemp"
        Do_It!
        ClearAll
EndIf

{Ask} {\\Sistemas\\Cadastro\\Represen}
Moveto [Codigo do Representante] typeIn "_crep"
Moveto [Nome Fantasia Represent] typeIn "_nrep"
{Ask} TypeIn Tabela Enter TypeIn "Fast"
Moveto [Codigo do Representante] typeIn "_crep"
Moveto [Nome Fantasia Represent] typeIn "changeto _nrep"
Do_It!
ClearAll

;***** Totaliza Dados ************************************
Aguarde("Aguarde, totalizando dados 1/4")
{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa       ] Check
Moveto [Nome Fantasia Empresa   ] Check
Moveto [Codigo do Representante ] Check
Moveto [Nome Fantasia Represent ] Check

Moveto [Vendas_Quantidade       ] TypeIn "Calc Sum as \"Vendas_Quantidade\""
Moveto [Vendas_Preco Total      ] TypeIn "Calc Sum as \"Vendas_Preco Total\""
Moveto [NumeroDeVendas          ] TypeIn "Calc Sum as \"NumeroDeVendas\""
Moveto [NumeroDeProdutos        ] TypeIn "Calc Sum as \"NumeroDeProdutos\""
Moveto [NumeroDeClientes        ] TypeIn "Calc Sum as \"NumeroDeClientes\""
Do_It!
ClearAll
         
Empty Tabela
Adiciona_Dados_Tabela(Tabela)

{Ask} TypeIn Tabela Enter TypeIn "Fast Delete"
Moveto [Codigo da Empresa      ] typein "blank"
Do_It!
ClearAll

;*** Totaliza Empresa *****
Aguarde("Aguarde, totalizando dados 2/4")
{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa      ] Check
Moveto [Codigo do Representante] typein "Calc Count as Registros"
Switch
  case VSDGOPANALISE="1" : Moveto [Vendas_Preco Total     ] TypeIn "Calc Sum as VendasPreco"
  case VSDGOPANALISE="2" : Moveto [Vendas_Quantidade      ] TypeIn "Calc Sum as VendasPreco"
  case VSDGOPANALISE="4" : Moveto [NumeroDeVendas         ] TypeIn "Calc Sum as VendasPreco"
  case VSDGOPANALISE="5" : Moveto [NumeroDeProdutos       ] TypeIn "Calc Sum as VendasPreco"
endSwitch
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [VendasPreco            ] Example "vp"
Moveto [Registros              ] Example "rg"
{Ask} TypeIn Tabela Enter TypeIn "Fast"
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [TotalEmpresa           ] TypeIn "changeto _vp"
Moveto [TotalRepresent         ] TypeIn "changeto _rg"
Do_It!
ClearAll

;---- Calculando a Porcentagem diante do total dos itens ---------------
Aguarde("Aguarde, organizando a curva")
Switch
  case VSDGOPANALISE="1" : Sort Tabela On "Codigo da Empresa", "Vendas_Preco Total" D
  case VSDGOPANALISE="2" : Sort Tabela On "Codigo da Empresa", "Vendas_Quantidade" D
  case VSDGOPANALISE="4" : Sort Tabela On "Codigo da Empresa", "NumeroDeVendas" D
  case VSDGOPANALISE="5" : Sort Tabela On "Codigo da Empresa", "NumeroDeProdutos" D
endSwitch
ClearAll

empant     ="***"
grupo      =0
VrAcumulada=0

NR = NRecords(Tabela)
CoEdit Tabela
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, calculando a curva 3/4"+BARRA_STRING)
  
  if [Codigo da Empresa]<>empant
     then empant     =[Codigo da Empresa]
          VrAcumulada=0
          grupo      =0
  endif          
  grupo=grupo+1

  Switch
    case VSDGOPANALISE="1" : [ClassePorcentagem]=([Vendas_Preco Total]/[TotalEmpresa])*100 
                             VrAcumulada        =VrAcumulada+[Vendas_Preco Total]   

    case VSDGOPANALISE="2" : [ClassePorcentagem]=([Vendas_Quantidade ]/[TotalEmpresa])*100
                             VrAcumulada        =VrAcumulada+[Vendas_Quantidade ]   
    
    case VSDGOPANALISE="4" : [ClassePorcentagem]=([NumeroDeVendas    ]/[TotalEmpresa])*100
                             VrAcumulada        =VrAcumulada+[NumeroDeVendas ]   
    
    case VSDGOPANALISE="5" : [ClassePorcentagem]=([NumeroDeProdutos  ]/[TotalEmpresa])*100
                             VrAcumulada        =VrAcumulada+[NumeroDeProdutos ]   

  endSwitch
  [ClasseAcumulada]=((VrAcumulada*100)/[TotalEmpresa])
  
  indice=((grupo*100)/[TotalRepresent])
  
  Switch
    Case indice          <=VSDGCURVAABCA                 : [Classe]="A" [ClasseParametro]=VSDGCURVAABCA
    Case indice          <=(VSDGCURVAABCA+VSDGCURVAABCB) : [Classe]="B" [ClasseParametro]=VSDGCURVAABCB
    otherwise                                            : [Classe]="C" [ClasseParametro]=VSDGCURVAABCC
  EndSwitch

  [ValorMedioVendas]=Round([Vendas_Preco Total]/[NumeroDeVendas    ],2)

  if VSDGCOMVALOR="2" ;sem valor
     then
          [TotalEmpresa      ]=blankNum()
          [TotalRepresent    ]=blankNum()
          [Vendas_Preco Total]=blankNum()
          [ValorMedioVendas  ]=blankNum()
  endif  
  
EndScan
Do_It!             
ClearAll       

empant     ="***"
classeant  ="***"
VrAcumulada=0
NR = NRecords(Tabela)
CoEdit Tabela
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, calculando a curva 4/4"+BARRA_STRING)

  if [Codigo da Empresa]<>empant
     then empant     =[Codigo da Empresa]
          classeant  ="***"
  endif          
  
  if [classe]<>classeant
     then classeant  =[classe]
          VrAcumulada=0
  endif          
  VrAcumulada=VrAcumulada+[ClassePorcentagem]
  [ClassePorcentagemAcumula]=VrAcumulada
EndScan
Do_It!             
ClearAll       


EndProc    ;  (Processa)

;*******************************************************************************
;* Organiza Registro p/ Exibir em Arquivo                                      *
;*******************************************************************************
Proc Rm_3210F_Gera_Arquivo()

{Ask} TypeIn Tabela Enter Check
Do_It!
ClearAll

Sort "Answer" On "Codigo da Empresa", "Codigo do Representante", "ClassePorcentagem" D 

Adiciona_Campo_EmOrdem("Answer","Codigo da Empresa(A4),"+      
                                "Nome Fantasia Empresa(A20),"+
                                "Codigo do Representante(A4),"+      
                                "Nome Fantasia Represent(A20),"+
                                "NumeroDeClientes(N),"+    
                                "NumeroDeVendas(N),"+    
                                "NumeroDeProdutos(N),"+    
                                "Vendas_Preco Total($),"+    
                                "ValorMedioVendas($),"+
                                "Vendas_Quantidade(N),"+    
                                "Classe(A1),"+    
                                "ClassePorcentagem(N)")    
                               
Delete Tabela
Rename "Answer" Tabela     
                                                  
clearAll
EndProc ;Gera_Arquivo()

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AGUARDE("Aguarde, gerando o relat¢rio")
While True

  Tabela=Cria_Temp(PrivDir())
  Empty "\\Base\\Sistemas\\Vendas\\Rm_3210b"
  Copy "\\Base\\Sistemas\\Vendas\\Rm_3210b" Tabela

  Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
  While Novo_Dir_Trab()
    Rm_3210F_Seleciona()
  EndWhile

  If IsEmpty(Tabela)
     Then MENSAGEM("N„o existem registros a processar")
          Delete Tabela
          QuitLoop
  EndIf
  Rm_3210F_Processa()

  If IMPRIME_ARQUIVO
     Then Rm_3210F_Gera_Arquivo()
  EndIf

  Switch
    case VSDGOPANALISE="*" : 

    otherwise              : Impressao_Orientacao="Paisagem"
                             IMPRIREL(Tabela,"5")
  endSwitch

  Delete Tabela
  
  QuitLoop

EndWhile
ClearAll
Release Vars Rm_3210F_Seleciona, Rm_3210F_Adiciona_Dados, Rm_3210F_Processa, Rm_3210F_Gera_Arquivo
