;** Rm_3250A *******************************************************************
;* Curva ABC Produtos                                                          *
;*******************************************************************************
;Autor: Visao/Vise
;Desenvolvido    : 24/02/2018 por Anivel Augusto Rodrigues
;Ultima Alteracao: 26/03/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes !
;Ultima Alteracao: 18/09/2018 por Bruno Carvalho 
;Motivo Alteracao: Foi ajustado as ASK informado o campo na MARCA, pois ‚ um campo a ser levado em considera‡Æo na hora da totaliza‡Æo
;Ultima Alteracao: 19/09/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado Modelo 03A *Familia/Marca

;*******************************************************************************
;* Rotina p/ Selecionar Registros                                              *
;*******************************************************************************
Proc Rm_3250A_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 3 
          
          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 clientes") 
          endswitch 

          {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         ] Check TypeIn "~VSDGMARCA.."
          Moveto [Descricao da Marca      ] Check 
          Moveto [Codigo da Familia       ]       TypeIn "~VSDGFAMI.."
          Moveto [Codigo do Grupo         ]       TypeIn "~VSDGGRP.."
          switch
            case VSDGCODMODELO="01" :
              Moveto [Referencia          ] Check
            
            case VSDGCODMODELO="02" :
              Moveto [Referencia          ] Check
            
            case VSDGCODMODELO="03" Or
                 VSDGCODMODELO="03A" :
              Moveto [Codigo da Familia   ] Check
              Moveto [Descricao da Familia] Check 
            
          endswitch
  
          {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 "~VSDGDESTINAT.."
          Moveto [Codigo do Representante]       TypeIn "_crep, ~VSDGREPRESEN.."
          switch
            case wi=2 :
              moveto [Data de Saida] typeIn "calc _cemp+_ndoc+_sdoc As nDocto"

            case wi=3 :
              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"
          switch
            case VSDGCODMODELO="01" :
              Moveto [Codigo do Item         ] Check TypeIn "_cite"
            
            otherwise               :
              Moveto [Codigo do Item         ]       TypeIn "_cite"
            
          endswitch

          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"
              Moveto [Custo Medio Unitario   ] Check
          endswitch 
          Moveto [Situacao_Item          ] TypeIn "Not C"
          Do_It!
          ClearAll
  
          switch
            case wi=1 : Rm_3250A_Adiciona_Dados("VENDAS") 

            case wi=2 : 
              {Ask} {Answer}
              Moveto [Codigo da Empresa      ] Check
              Moveto [Codigo da Marca        ] Check 
              Moveto [Descricao da Marca     ] Check
              switch
                case VSDGCODMODELO="01" :
                     Moveto [Codigo do Item         ] Check
                     Moveto [Referencia             ] Check
                
                Case VSDGCODMODELO="02" :
                     Moveto [Referencia             ] Check
                
                case VSDGCODMODELO="03" Or
                     VSDGCODMODELO="03A" :
                     Moveto [Codigo da Familia      ] Check 
                     Moveto [Descricao da Familia   ] Check 
                
              endswitch
              moveto [NDocto                 ] typein "Calc Count As NumVendas"
              Do_It!
              ClearAll

              Rm_3250A_Adiciona_Dados("NUM_VENDAS") 

            case wi=3 : 
              {Ask} {Answer}
              Moveto [Codigo da Empresa      ] Check
              Moveto [Codigo da Marca        ] Check 
              Moveto [Descricao da Marca     ] Check
              switch
                case VSDGCODMODELO="01" :
                     Moveto [Codigo do Item         ] Check
                     Moveto [Referencia             ] Check
                
                Case VSDGCODMODELO="02" :
                     Moveto [Referencia             ] Check
                
                case VSDGCODMODELO="03" Or
                     VSDGCODMODELO="03A" :
                     Moveto [Codigo da Familia      ] Check 
                     Moveto [Descricao da Familia   ] Check 
                
              endswitch
              moveto [Codigo                 ] typein "Calc Count As NumClientes"
              Do_It!
              ClearAll

              Rm_3250A_Adiciona_Dados("NUM_CLIENTES") 

          endswitch 
          
        endfor
EndIf

EndProc   ; (Seleciona)

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

If IsEmpty("Answer")
   Then Return
EndIf

switch
  Case Tipo="VENDAS":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    If VSDGCODMODELO="03A"
       Then Moveto [Codigo da Marca   ] typein "_marc" 
            Moveto [Descricao da Marca] typein "_dmarc"
    EndIf         
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      Case VSDGCODMODELO="02" :
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" Or
           VSDGCODMODELO="03A" :
        Moveto [Codigo da Familia      ] typein "_cfam"
        Moveto [Descricao da Familia   ] typein "_dfam" 
      
    endswitch
    Moveto [Quantidade             ] typein "_qtde"
    Moveto [Preco Total            ] typein "_ptot"
    Moveto [Valor Desconto Total   ] typein "_vdes"
    Moveto [Custo Medio Unitario   ] typein "_ctm"
    {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
    Moveto [Codigo da Empresa      ] typein "_cemp"
    If VSDGCODMODELO="03A"
       Then Moveto [Codigo da Marca   ] typein "_marc" 
            Moveto [Descricao da Marca] typein "_dmarc"
    EndIf
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      Case VSDGCODMODELO="02" :
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" Or
           VSDGCODMODELO="03A" :
        Moveto [Codigo da Familia      ] typein "_cfam"
        Moveto [Descricao da Familia   ] typein "_dfam"
    endswitch
    Moveto [Vendas_Quantidade      ] typein "_qtde"
    Moveto [Vendas_Preco Total     ] typein "_ptot-_vdes"
    Moveto [Custo Total            ] typein "_qtde*_ctm"
    Moveto [Lucro                  ] typein "(_ptot-_vdes)-(_qtde*_ctm)"
    Do_It!
    ClearAll

  Case Tipo="NUM_VENDAS":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    
    Moveto [Codigo da Marca        ] typein "_marc" 
    Moveto [Descricao da Marca     ] typein "_dmarc"
    Moveto [NumVendas              ] typein "_qtde"
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      Case VSDGCODMODELO="02" :
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" Or
           VSDGCODMODELO="03A" :
        Moveto [Codigo da Familia      ] typein "_cfam"
        Moveto [Descricao da Familia   ] typein "_dfam"
    endswitch

    {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
    Moveto [Codigo da Empresa      ] typein "_cemp"
    If VSDGCODMODELO="03A"
       Then Moveto [Codigo da Marca   ] typein "_marc" 
            Moveto [Descricao da Marca] typein "_dmarc"
    EndIf
    Moveto [NumeroDeVendas         ] typein "_qtde"
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      Case VSDGCODMODELO="02" :
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" Or
           VSDGCODMODELO="03A" :
        Moveto [Codigo da Familia      ] typein "_cfam"
        Moveto [Descricao da Familia   ] typein "_dfam"
    endswitch
    Do_It!
    ClearAll

  Case Tipo="NUM_CLIENTES":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    If VSDGCODMODELO="03A"
       Then Moveto [Codigo da Marca   ] typein "_marc" 
            Moveto [Descricao da Marca] typein "_dmarc"
    EndIf
    Moveto [NumClientes            ] typein "_qtde"
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      Case VSDGCODMODELO="02" :
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" Or
           VSDGCODMODELO="03A" :
        Moveto [Codigo da Familia      ] typein "_cfam"
        Moveto [Descricao da Familia   ] typein "_dfam"
    endswitch

    {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
    Moveto [Codigo da Empresa      ] typein "_cemp"
    If VSDGCODMODELO="03A"
       Then Moveto [Codigo da Marca   ] typein "_marc" 
            Moveto [Descricao da Marca] typein "_dmarc"
    EndIf
    Moveto [NumeroDeClientes       ] typein "_qtde"
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      Case VSDGCODMODELO="02" :
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" Or
           VSDGCODMODELO="03A" :
        Moveto [Codigo da Familia      ] typein "_cfam"
        Moveto [Descricao da Familia   ] typein "_dfam"
    endswitch
    Do_It!
    ClearAll

endswitch

EndProc

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

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

if VSDGCODMODELO="02"
   then
        AGUARDE("Aguarde, processando referˆncias")

         
        {Ask} typein Tabela Enter
        moveto [Referencia] check
        Do_It!
        ClearAll

        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Tipo do Item  ] typein "D"
        moveto [Referencia    ] check typein "_ref"
        Moveto [Codigo do Item] check
        {Ask} {Answer}
        moveto [Referencia    ] typein "_ref"
        Do_It!
        ClearAll

        {Ask} {Answer}
        Moveto [Codigo do Item         ] typein "_cite"
        moveto [Referencia             ] typein "_ref"
        {Ask} TypeIn Tabela Enter TypeIn "Fast"
        moveto [Referencia             ] typein "_ref"
        Moveto [Codigo do Item         ] typein "changeto _cite"
        Do_It!
        ClearAll
endif   

;***** Totaliza Dados ************************************
Aguarde("Aguarde, totalizando dados 1/2")
{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa       ] Check
Moveto [Nome Fantasia Empresa   ] Check
switch
  case VSDGCODMODELO="01"  :
       Moveto [Codigo do Item          ] Check
       Moveto [Referencia              ] Check
  
  case VSDGCODMODELO="02"  : 
       Moveto [Codigo do Item          ] Check
       Moveto [Referencia              ] Check
  
  case VSDGCODMODELO="03"  :
       Moveto [Codigo da Familia       ] Check TypeIn "As \"Codigo do Item\""
       Moveto [Descricao da Familia    ] Check TypeIn "As \"Descricao do Item\""
  
  case VSDGCODMODELO="03A" :
       Moveto [Codigo da Familia       ] Check 
       Moveto [Descricao da Familia    ] Check 
       Moveto [Codigo da Marca         ] Check 
       Moveto [Descricao da Marca      ] Check 
endswitch
Moveto [Vendas_Quantidade       ] TypeIn "Calc Sum as \"Vendas_Quantidade\""
Moveto [Vendas_Preco Total      ] TypeIn "Calc Sum as \"Vendas_Preco Total\""
Moveto [Custo Total             ] TypeIn "Calc Sum as \"Custo Total\""
Moveto [Lucro                   ] TypeIn "Calc Sum as \"Lucro\""
Moveto [NumeroDeVendas          ] TypeIn "Calc Sum as \"NumeroDeVendas\""
Moveto [NumeroDeClientes        ] TypeIn "Calc Sum as \"NumeroDeClientes\""
Do_It!
ClearAll
         
Empty Tabela
Adiciona_Dados_Tabela(Tabela)

switch
  case VSDGCODMODELO="01" or
       VSDGCODMODELO="02" :
    {Ask} {\\Sistemas\\Estoque\\Itens}
    Moveto [Codigo do Item         ] Example "cite"
    Moveto [Descricao do Item      ] Example "dite"
    Moveto [Tipo do Item           ] Example "tite"
    Moveto [Unidade Fiscal         ] Example "unf"
    {Ask} TypeIn Tabela Enter TypeIn "Fast"
    Moveto [Codigo do Item         ] Example "cite"
    Moveto [Descricao do Item      ] TypeIn "changeto _dite"
    Moveto [Tipo do Item           ] TypeIn "changeto _tite"
    Moveto [Unidade Fiscal         ] TypeIn "changeto _unf"
    Do_It!
    ClearAll
  
endswitch

;*** Totaliza Empresa *****
Aguarde("Aguarde, totalizando dados 2/2")
{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa      ] Check
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="3" : Moveto [Lucro                  ] TypeIn "Calc Sum as VendasPreco"
  case VSDGOPANALISE="4" : Moveto [NumeroDeVendas         ] TypeIn "Calc Sum as VendasPreco"
  case VSDGOPANALISE="5" : Moveto [NumeroDeClientes       ] TypeIn "Calc Sum as VendasPreco"
endSwitch
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [VendasPreco            ] Example "vp"
{Ask} TypeIn Tabela Enter TypeIn "Fast"
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [TotalEmpresa           ] TypeIn "changeto _vp"
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="3" : Sort Tabela On "Codigo da Empresa", "Lucro" D
  case VSDGOPANALISE="4" : Sort Tabela On "Codigo da Empresa", "NumeroDeVendas" D
  case VSDGOPANALISE="5" : Sort Tabela On "Codigo da Empresa", "NumeroDeClientes" D
endSwitch
ClearAll

empant     ="***"
VrAcumulada=0


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

  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="3" : [ClassePorcentagem]=([Lucro             ]/[TotalEmpresa])*100
                             VrAcumulada        =VrAcumulada+[Lucro]   
    
                             [LucroPorcentagem ]=100-(([Custo Total  ]*100)/[Vendas_Preco Total  ])
                             
    case VSDGOPANALISE="4" : [ClassePorcentagem]=([NumeroDeVendas    ]/[TotalEmpresa])*100
                             VrAcumulada        =VrAcumulada+[NumeroDeVendas ]   
    
    case VSDGOPANALISE="5" : [ClassePorcentagem]=([NumeroDeClientes  ]/[TotalEmpresa])*100
                             VrAcumulada        =VrAcumulada+[NumeroDeClientes ]   

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


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

EndProc    ;  (Processa)

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

{Ask} TypeIn Tabela Enter Check
Do_It!
ClearAll

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

Adiciona_Campo_EmOrdem("Answer","Codigo da Empresa(A4),"+      
                                "Nome Fantasia Empresa(A20),"+
                                "Codigo do Item(A10),"+                  
                                "Descricao do Item(A30),"+
                                "Referencia(A20),"+
                                "Tipo do Item(A1),"+
                                "NumeroDeVendas(N),"+    
                                "NumeroDeClientes(N),"+    
                                "Vendas_Quantidade(N),"+    
                                "Unidade Fiscal(A4),"+
                                "Vendas_Preco Total($),"+    
                                "LucroPorcentagem(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_3210a"
  Copy "\\Base\\Sistemas\\Vendas\\Rm_3210a" Tabela

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

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

  If IMPRIME_ARQUIVO
     Then Rm_3250A_Gera_Arquivo()
  EndIf

  Switch
    Case VSDGCODMODELO="03A" : Impressao_Orientacao="Retrato"
                               IMPRIREL(Tabela,"4")
                                 
    case VSDGOPANALISE="3"   : Impressao_Orientacao="Paisagem"
                               IMPRIREL(Tabela,"1")
                               
    otherwise                : Impressao_Orientacao="Retrato"
                               IMPRIREL(Tabela,"R")
  endSwitch

  Delete Tabela
  
  QuitLoop

EndWhile
ClearAll
Release Vars Rm_3250A_Seleciona, Rm_3250A_Adiciona_Dados, Rm_3250A_Processa, Rm_3250A_Gera_Arquivo
