Cálculo Demorado...
Enviado: 15 Fev 2006 16:51
Amigos do Fórum,
Meu sistema possui relatórios gerenciais de curva ABC. Porém, para gerá-los, o sistema está com uma certa lentidão, ainda mais quando se trata de arquivos grandes.
Eu utilizo o Clipper 5.2e e Blinker 7, com RDD CDX.
Possuo 4 tipos de curva ABC no meu sistema.
1. Curva ABC pelo volume de vendas: ou seja, classifica em ABC os produtos que mais participam quantitativamente nas vendas. Aqui eu sei quais são os produtos que vendem mais ou menos, independente do quanto eles rendem.
2. Curva ABC pela margem de ganho: classifica em ABC os produtos que geram valores financeiros na comparação custo/preço líquido de venda. Aqui eu sei quais são os produtos mais rentáveis.
3. Curva ABC pelo saldo do almoxarife: classifica em ABC os produtos que estão em estoque, e o quanto eles valem individualmente. Aqui, eu sei se meu estoque está valendo mais ou menos, independente da quantidade de produtos estocados, ou seja, às vezes posso ter menos quantidade e mais valor ou posso ter mais quantidade e menos valor, ou, ainda, a combinação dos dois.
4. Curva ABC por cliente: que classifica em ABC a participação dos principais clientes no faturamento periódico da empresa.
A problematização:
Para gerar o 1o. e o 2o. relatório, o sistema leva muito tempo para calcular os dados desejados, atualmente, estou trabalhando na seguinte sequencia:
- Abrir os arquivos a serem utilizados;
- Filtrar o arquivo de vendas pelo período desejado; (acho que deve ser aqui o motivo da lentidão)
- Jogar num arquivo temporário os produtos, com suas quantidades vendidas, custos, preços realizados e a margem de ganho para gerar o relatório.
Por exemplo:
Depois de pegar as datas iniciais e finais do período e armazená-las em IDATA e FDATA respectivamente:
FUNCTION CALC_ABC()
LOCAL XVALOR := 0
*ABRE é uma função para tratamento e abertura de arquivos
ABRE("PRODUTOS") // arq. produtos
ABRE("TABVEN") // tabela de vendas
ABRE("TMP_ABC") // arq. temporário
SELE PRODUTOS
DO WHILE !EOF()
SELE TABEN
SUM TABVEN->QUANTIDADE TO XVALOR FOR;
TABVEN->PRODUTO = PRODUTOS->CODIGO .AND.;
DATA >= IDATA .AND. DATA <= FDATA
IF TABVEN->QUANTIDADE != 0
SELE TMP_ABC
APPEND BLANK
REPLACE PRODUTO WITH PRODUTOS->CODIGO
REPLACE QUANTIDADE WITH XVALOR
ENDIF
SELE PRODUTOS
SKIP ; LOOP
ENDDO
RETURN
- Sei que não está completinho, mas é só pra ter uma idéia como tá funcionando a rotina de cálculo. Se alguém puder ter o saco de ler tudo isso e me dar uma dica, agradeço mesmo!!!
Meu sistema possui relatórios gerenciais de curva ABC. Porém, para gerá-los, o sistema está com uma certa lentidão, ainda mais quando se trata de arquivos grandes.
Eu utilizo o Clipper 5.2e e Blinker 7, com RDD CDX.
Possuo 4 tipos de curva ABC no meu sistema.
1. Curva ABC pelo volume de vendas: ou seja, classifica em ABC os produtos que mais participam quantitativamente nas vendas. Aqui eu sei quais são os produtos que vendem mais ou menos, independente do quanto eles rendem.
2. Curva ABC pela margem de ganho: classifica em ABC os produtos que geram valores financeiros na comparação custo/preço líquido de venda. Aqui eu sei quais são os produtos mais rentáveis.
3. Curva ABC pelo saldo do almoxarife: classifica em ABC os produtos que estão em estoque, e o quanto eles valem individualmente. Aqui, eu sei se meu estoque está valendo mais ou menos, independente da quantidade de produtos estocados, ou seja, às vezes posso ter menos quantidade e mais valor ou posso ter mais quantidade e menos valor, ou, ainda, a combinação dos dois.
4. Curva ABC por cliente: que classifica em ABC a participação dos principais clientes no faturamento periódico da empresa.
A problematização:
Para gerar o 1o. e o 2o. relatório, o sistema leva muito tempo para calcular os dados desejados, atualmente, estou trabalhando na seguinte sequencia:
- Abrir os arquivos a serem utilizados;
- Filtrar o arquivo de vendas pelo período desejado; (acho que deve ser aqui o motivo da lentidão)
- Jogar num arquivo temporário os produtos, com suas quantidades vendidas, custos, preços realizados e a margem de ganho para gerar o relatório.
Por exemplo:
Depois de pegar as datas iniciais e finais do período e armazená-las em IDATA e FDATA respectivamente:
FUNCTION CALC_ABC()
LOCAL XVALOR := 0
*ABRE é uma função para tratamento e abertura de arquivos
ABRE("PRODUTOS") // arq. produtos
ABRE("TABVEN") // tabela de vendas
ABRE("TMP_ABC") // arq. temporário
SELE PRODUTOS
DO WHILE !EOF()
SELE TABEN
SUM TABVEN->QUANTIDADE TO XVALOR FOR;
TABVEN->PRODUTO = PRODUTOS->CODIGO .AND.;
DATA >= IDATA .AND. DATA <= FDATA
IF TABVEN->QUANTIDADE != 0
SELE TMP_ABC
APPEND BLANK
REPLACE PRODUTO WITH PRODUTOS->CODIGO
REPLACE QUANTIDADE WITH XVALOR
ENDIF
SELE PRODUTOS
SKIP ; LOOP
ENDDO
RETURN
- Sei que não está completinho, mas é só pra ter uma idéia como tá funcionando a rotina de cálculo. Se alguém puder ter o saco de ler tudo isso e me dar uma dica, agradeço mesmo!!!