;** Rm_3250A *******************************************************************
;* Curva ABC Produtos                                                          *
;*******************************************************************************
;Autor: Visao/Vise
;Desenvolvido    : 26/02/2018 por Anivel Augusto Rodrigues
;Ultima Alteracao: 26/03/2018 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes !

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

;****** Compras ****************************************************************
If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC") And
   IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI")
   Then
        for wi from 1 to 3 
          
          switch
            case wi=1 : ExibeRodape(1,"Aguarde, processando compras") 
            case wi=2 : ExibeRodape(1,"Aguarde, processando n£mero de compras") 
            case wi=3 : ExibeRodape(1,"Aguarde, processando n£mero de fornecedores") 
          endswitch 

          {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.."
          switch
            case VSDGCODMODELO="01" :
              Moveto [Referencia             ] Check
            
            case VSDGCODMODELO="03" :
              Moveto [Codigo da Familia      ] Check
              Moveto [Descricao da Familia   ] Check 
            
          endswitch
  
          {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" Enter
          Moveto [Numero do Lancamento   ]       TypeIn "_nlan"
          Moveto [Codigo da Empresa      ] Check TypeIn "~VSDGEMPRESA2.."
          Moveto [Data de Entrada        ]       TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
          Moveto [Tipo de Operacao       ]       TypeIn "C"
          Moveto [Codigo                 ]       TypeIn "~VSDGDESTINAT.."
          switch
            case wi=2 :
              moveto [Numero do Lancamento] Check typein ", As NDocto"

            case wi=3 :
              moveto [Codigo       ] Check

          endswitch 
          
          {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI" Enter
          Moveto [Numero do Lancamento   ]       TypeIn "_nlan"
          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 Convertida  ]      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"
          endswitch 
          Do_It!
          ClearAll
  
          switch
            case wi=1 : Rm_3250A_Adiciona_Dados("COMPRAS") 

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

              Rm_3250A_Adiciona_Dados("NUM_COMPRAS") 

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

              Rm_3250A_Adiciona_Dados("NUM_FORNECEDORES") 

          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="COMPRAS":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" :
        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"
    {Ask} TypeIn Tabela Enter TypeIn "Fast Insert"
    Moveto [Codigo da Empresa      ] typein "_cemp"
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" :
        Moveto [Codigo da Familia      ] typein "_cfam"
        Moveto [Descricao da Familia   ] typein "_dfam" 
      
    endswitch
    Moveto [Compras_Quantidade      ] typein "_qtde"
    Moveto [Compras_Preco Total     ] typein "_ptot-_vdes"
    Do_It!
    ClearAll

  Case Tipo="NUM_COMPRAS":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [NumCompras             ] typein "_qtde"
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" :
        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"
    Moveto [NumeroDeCompras        ] typein "_qtde"
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" :
        Moveto [Codigo da Familia      ] typein "_cfam"
        Moveto [Descricao da Familia   ] typein "_dfam" 
      
    endswitch
    Do_It!
    ClearAll

  Case Tipo="NUM_FORNECEDORES":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [NumFornecedores        ] typein "_qtde"
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" :
        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"
    Moveto [NumeroDeFornecedores   ] typein "_qtde"
    switch
      case VSDGCODMODELO="01" :
        Moveto [Codigo do Item         ] typein "_cite"
        Moveto [Referencia             ] typein "_ref"
      
      case VSDGCODMODELO="03" :
        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

;***** 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="03" :
       Moveto [Codigo da Familia       ] Check TypeIn "As \"Codigo do Item\""
       Moveto [Descricao da Familia    ] Check TypeIn "As \"Descricao do Item\""
  
endswitch
Moveto [Compras_Quantidade      ] TypeIn "Calc Sum as \"Compras_Quantidade\""
Moveto [Compras_Preco Total     ] TypeIn "Calc Sum as \"Compras_Preco Total\""
Moveto [NumeroDeCompras         ] TypeIn "Calc Sum as \"NumeroDeCompras\""
Moveto [NumeroDeFornecedores    ] TypeIn "Calc Sum as \"NumeroDeFornecedores\""
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 Interna        ] 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 Interna        ] 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 [Compras_Preco Total    ] TypeIn "Calc Sum as ComprasPreco"
  case VSDGOPANALISE="2" : Moveto [Compras_Quantidade     ] TypeIn "Calc Sum as ComprasPreco"
  case VSDGOPANALISE="4" : Moveto [NumeroDeCompras        ] TypeIn "Calc Sum as ComprasPreco"
  case VSDGOPANALISE="5" : Moveto [NumeroDeFornecedores   ] TypeIn "Calc Sum as ComprasPreco"
endSwitch
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [ComprasPreco           ] 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", "Compras_Preco Total" D
  case VSDGOPANALISE="2" : Sort Tabela On "Codigo da Empresa", "Compras_Quantidade" D
  case VSDGOPANALISE="4" : Sort Tabela On "Codigo da Empresa", "NumeroDeCompras" D
  case VSDGOPANALISE="5" : Sort Tabela On "Codigo da Empresa", "NumeroDeFornecedores" 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]=([Compras_Preco Total]/[TotalEmpresa])*100 
                             VrAcumulada        =VrAcumulada+[Compras_Preco Total]   

    case VSDGOPANALISE="2" : [ClassePorcentagem]=([Compras_Quantidade ]/[TotalEmpresa])*100
                             VrAcumulada        =VrAcumulada+[Compras_Quantidade ]   
    
    case VSDGOPANALISE="4" : [ClassePorcentagem]=([NumeroDeCompras    ]/[TotalEmpresa])*100
                             VrAcumulada        =VrAcumulada+[NumeroDeCompras ]   
    
    case VSDGOPANALISE="5" : [ClassePorcentagem]=([NumeroDeFornecedores  ]/[TotalEmpresa])*100
                             VrAcumulada        =VrAcumulada+[NumeroDeFornecedores ]   

  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()
          [Compras_Preco Total]=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),"+
                                "NumeroDeCompras(N),"+    
                                "NumeroDeFornecedores(N),"+    
                                "Compras_Quantidade(N),"+    
                                "Unidade Interna(A4),"+
                                "Compras_Preco Total($),"+    
                                "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\\Estoque\\Rm_3210a"
  Copy "\\Base\\Sistemas\\Estoque\\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 VSDGOPANALISE=""  :
    
    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
