Mudanças entre as edições de "Custo Médio"
(19 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | + | {{Tags|Totall Backoffice}} | |
− | + | {{MenuLateral|[[Totall Commerce]]|[[Totall Backoffice]]|[[Produtos]]}} | |
− | O Totall | + | O Totall Backoffice possui em sua base funções para cálculo e apresentação de custo médio que são utilizadas pelos módulos do sistema para exibir o mesmo. |
− | Estas funções são utilizadas por exemplo nos forms de Inventário, Sintegra e Histórico de Produtos. | + | Estas funções são utilizadas por exemplo nos forms de Inventário, SPED, Sintegra e Histórico de Produtos. |
Este documento descreve de forma resumida como estas informações estão guardadas no banco de dados, bem como as operações matemáticas para o cálculo do custo médio. | Este documento descreve de forma resumida como estas informações estão guardadas no banco de dados, bem como as operações matemáticas para o cálculo do custo médio. | ||
Linha 10: | Linha 10: | ||
Não leva em conta lançamentos avulsos do produto (TT_LAN). | Não leva em conta lançamentos avulsos do produto (TT_LAN). | ||
− | |||
− | |||
− | |||
− | + | A fórmula utilizada está descrito abaixo. É feito um select com todas as vendas e compras/nota complementar/importação, ordenadas por data, de um determinado produto. E para cada linha se calcula: | |
− | ''' | + | '''Qtd em Estoque''': Qtd em Estoque Anterior + Qtd Movimentada → ''Se for uma compra/importação'' |
− | ''' | + | '''Valor do Estoque''': Valor do Estoque Anterior + Valor Movimentado; |
− | '''Valor do Estoque''' | + | '''Custo Médio''': Valor Estoque / Qtd Estoque → ''(Se for uma venda)'' |
+ | |||
+ | '''Valor do Estoque''': Valor do Estoque Anterior + (Qtd Movimentada pela venda * Custo Médio) | ||
'''Observações:''' | '''Observações:''' | ||
Linha 26: | Linha 25: | ||
a) A cada nova linha são utilizados para o cálculo a Quantidade e Valor de Estoque da linha anterior. | a) A cada nova linha são utilizados para o cálculo a Quantidade e Valor de Estoque da linha anterior. | ||
− | b) O Custo Médio nunca pode ficar negativo visto que não é possível se ter um estoque negativo, caso em qualquer momento isto aconteça, o | + | b) O Custo Médio nunca pode ficar negativo visto que não é possível se ter um estoque negativo, caso em qualquer momento isto aconteça, o cálculo das linhas subsequentes ficará inconsistente. |
c) Note pela fórmula que o valor de venda do produto em nada interfere no custo médio. | c) Note pela fórmula que o valor de venda do produto em nada interfere no custo médio. | ||
Linha 32: | Linha 31: | ||
Exemplo de cálculo: | Exemplo de cálculo: | ||
Ver planilha [svn://ttpg9/totalldocumentos/base_conhecimento/backoffice/produtos/custo%20médio/Custo%20Medio.xls Custo Médio.xls] | Ver planilha [svn://ttpg9/totalldocumentos/base_conhecimento/backoffice/produtos/custo%20médio/Custo%20Medio.xls Custo Médio.xls] | ||
+ | |||
+ | d) Nota Complementar altera apenas o valor do custo médio a quantidade se mantém. | ||
== Select para validar Custo Médio == | == Select para validar Custo Médio == | ||
Linha 46: | Linha 47: | ||
- valor_cofins | - valor_cofins | ||
* Importação | * Importação | ||
− | cm_uni_calculado = | + | cm_uni_calculado = valor_item -- Valor Total NF |
− | + | + valor_ipi + Valor IPI | |
− | + | + valor_seguro -- Valor do Seguro | |
− | + | + valor_frete -- Valor do Frete | |
− | + | + valor_II -- Valor II | |
− | + | + valor_pis -- Valor PIS | |
− | + | + valor_cofins -- Valor COFINS | |
− | + | + valor_ant -- Anti Dumping | |
+ | + valor_adu -- Despesas Aduaneiras Tributáveis | ||
+ | + valor_icms -- Valor de ICMS | ||
+ | - valor_pis_cre -- Valor PIS Creditável | ||
+ | - valor_cof_cre -- Valor COFINS Creditável | ||
== Fórmula do Custo Médio Gerencial == | == Fórmula do Custo Médio Gerencial == | ||
Linha 63: | Linha 68: | ||
+ Valor_retencao | + Valor_retencao | ||
* Importação | * Importação | ||
− | cmg_uni_calculado = | + | cmg_uni_calculado = valor_item -- Valor Total NF |
− | + | + valor_ipi + Valor IPI | |
− | + | + valor_seguro -- Valor do Seguro | |
− | + | + valor_frete -- Valor do Frete | |
+ | + valor_II -- Valor II | ||
+ | + valor_ant -- Anti Dumping | ||
+ | + valor_adu -- Despesas Aduaneiras Tributáveis | ||
+ | + valor_icms -- Valor de ICMS | ||
== Sub Formulas utilizadas == | == Sub Formulas utilizadas == | ||
Linha 87: | Linha 96: | ||
== Select verificar valores de custo médio detalhados == | == Select verificar valores de custo médio detalhados == | ||
− | + | ||
+ | {{LinkInterno|\\ttadm\Docs\publico\Base de Conhecimento\backoffice\produtos\custo médio\Detalhamento_Custo_Medio.sql}} | ||
== Dicionário de Dados == | == Dicionário de Dados == | ||
Linha 134: | Linha 144: | ||
:''ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.'' | :''ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.'' | ||
:''QTD_CM é obtido pelo QTDMOV na trigger''. | :''QTD_CM é obtido pelo QTDMOV na trigger''. | ||
− | :''VLR_CM, VLRCMG e QTD_CM são os custos da compra que serão considerados nos cálculos.'' | + | :''VLR_CM, VLRCMG e QTD_CM são os custos da compra/nota complementar que serão considerados nos cálculos.'' |
=== TT_LAN === | === TT_LAN === | ||
Linha 223: | Linha 233: | ||
== Funções de Banco Envolvidas == | == Funções de Banco Envolvidas == | ||
− | '''CalculaCustoMedio(pCODFIL,pFILMAT,pCODMAT,pCODCOR,pCODTAM) | + | '''CalculaCustoMedio:''' |
+ | <syntaxhighlight lang="SQL"> | ||
+ | CalculaCustoMedio(pCODFIL, pFILMAT, pCODMAT, pCODCOR, pCODTAM) | ||
+ | </syntaxhighlight> | ||
+ | |||
Calcula o custo médio de um determinado produto. | Calcula o custo médio de um determinado produto. | ||
O custo médio é calculado a partir da maior date entre CAL_CM (Data até a qual já foi calculado) ou INI_CM (Data inicial para calcular o Custo Médio). | O custo médio é calculado a partir da maior date entre CAL_CM (Data até a qual já foi calculado) ou INI_CM (Data inicial para calcular o Custo Médio). | ||
Linha 230: | Linha 244: | ||
No final do processo é gravado em CAL_CM a data da ultima movimentação calculada. | No final do processo é gravado em CAL_CM a data da ultima movimentação calculada. | ||
− | '''CalculaCustoMedioFilial | + | '''CalculaCustoMedioFilial:''' |
+ | |||
+ | <syntaxhighlight lang="SQL"> | ||
+ | CalculaCustoMedioFilial(pCODFIL) | ||
+ | </syntaxhighlight> | ||
+ | |||
Calcula o custo médio de toda uma filial. | Calcula o custo médio de toda uma filial. | ||
Utiliza os mesmos processos da CalculaCustoMedio | Utiliza os mesmos processos da CalculaCustoMedio | ||
− | '''CustoMedio (p_CodFil, p_FilMat, p_CodMat , p_CodCor, p_CodTam, p_Tipo, p_DatRef) | + | '''CustoMedio:''' |
+ | |||
+ | <syntaxhighlight lang="SQL"> | ||
+ | CustoMedio (p_CodFil, p_FilMat, p_CodMat , p_CodCor, p_CodTam, p_Tipo, p_DatRef) | ||
+ | </syntaxhighlight> | ||
+ | |||
Retorna informaçoes de custo médio de um produto em determinada data e acordo com o tipo passado: | Retorna informaçoes de custo médio de um produto em determinada data e acordo com o tipo passado: | ||
Se Tipo=1 -> Retorna Quantidade em estoque | Se Tipo=1 -> Retorna Quantidade em estoque | ||
Linha 241: | Linha 265: | ||
Se não for passada uma data calcula até a data atual. | Se não for passada uma data calcula até a data atual. | ||
− | '''JOB_Recalcula_Custo_Medio''' | + | '''JOB_Recalcula_Custo_Medio:''' |
+ | <syntaxhighlight lang="SQL"> | ||
CREATE OR REPLACE PROCEDURE ProcCalculaCustoMedio IS | CREATE OR REPLACE PROCEDURE ProcCalculaCustoMedio IS | ||
vCODFIL TD_FIL.CODFIL%TYPE; | vCODFIL TD_FIL.CODFIL%TYPE; | ||
Linha 259: | Linha 284: | ||
end ProcCalculaCustoMedio; | end ProcCalculaCustoMedio; | ||
/ | / | ||
− | + | </syntaxhighlight> | |
+ | <br/> | ||
+ | <syntaxhighlight lang="SQL"> | ||
VARIABLE JOBNO NUMBER; | VARIABLE JOBNO NUMBER; | ||
BEGIN | BEGIN | ||
Linha 269: | Linha 296: | ||
END; | END; | ||
/ | / | ||
− | + | </syntaxhighlight> | |
== Recalcular Custo Médio == | == Recalcular Custo Médio == | ||
Linha 276: | Linha 303: | ||
Para recalcular o custo dos últimos dois meses podemos marcar na tabela de saldo que o custo médio está calculado até 2 meses atrás. | Para recalcular o custo dos últimos dois meses podemos marcar na tabela de saldo que o custo médio está calculado até 2 meses atrás. | ||
+ | <syntaxhighlight lang="SQL"> | ||
update tt_sal | update tt_sal | ||
set cal_cm = add_day(Trunc(Agora()),-60), | set cal_cm = add_day(Trunc(Agora()),-60), | ||
Linha 281: | Linha 309: | ||
where codmul = 0 | where codmul = 0 | ||
and cal_cm >= add_day(Trunc(Agora()),-60) | and cal_cm >= add_day(Trunc(Agora()),-60) | ||
+ | </syntaxhighlight> | ||
Nos clientes, o JOB_CALCULACUSTOMEDIOFILIAL está agendado para rodar todas as noites. Ele fará o recalculo para nós. | Nos clientes, o JOB_CALCULACUSTOMEDIOFILIAL está agendado para rodar todas as noites. Ele fará o recalculo para nós. | ||
Mas se quisermos o resultado na hora, podemos chamar a função CalculaCustoMedioFilial para cada filial. | Mas se quisermos o resultado na hora, podemos chamar a função CalculaCustoMedioFilial para cada filial. | ||
+ | <syntaxhighlight lang="SQL"> | ||
DECLARE | DECLARE | ||
vCODFIL TD_FIL.CODFIL%TYPE; | vCODFIL TD_FIL.CODFIL%TYPE; | ||
Linha 301: | Linha 331: | ||
end; | end; | ||
/ | / | ||
− | + | </syntaxhighlight> | |
− | + | <br/> | |
− | + | <br/> | |
− | + | <small>{{Referencias}}</small> |
Edição atual tal como às 10h09min de 31 de dezembro de 2018
Totall BackofficeO Totall Backoffice possui em sua base funções para cálculo e apresentação de custo médio que são utilizadas pelos módulos do sistema para exibir o mesmo. Estas funções são utilizadas por exemplo nos forms de Inventário, SPED, Sintegra e Histórico de Produtos. Este documento descreve de forma resumida como estas informações estão guardadas no banco de dados, bem como as operações matemáticas para o cálculo do custo médio.
Índice
Cálculo do Custo Médio
O cálculo do custo médio é baseado nas vendas (TT_VEN) e compras/nota complementar/importação (TT_COM + TT_VEN->TD_NAT.TIPNAT = 'I') de um determinado produto.
Não leva em conta lançamentos avulsos do produto (TT_LAN).
A fórmula utilizada está descrito abaixo. É feito um select com todas as vendas e compras/nota complementar/importação, ordenadas por data, de um determinado produto. E para cada linha se calcula:
Qtd em Estoque: Qtd em Estoque Anterior + Qtd Movimentada → Se for uma compra/importação
Valor do Estoque: Valor do Estoque Anterior + Valor Movimentado;
Custo Médio: Valor Estoque / Qtd Estoque → (Se for uma venda)
Valor do Estoque: Valor do Estoque Anterior + (Qtd Movimentada pela venda * Custo Médio)
Observações:
a) A cada nova linha são utilizados para o cálculo a Quantidade e Valor de Estoque da linha anterior.
b) O Custo Médio nunca pode ficar negativo visto que não é possível se ter um estoque negativo, caso em qualquer momento isto aconteça, o cálculo das linhas subsequentes ficará inconsistente.
c) Note pela fórmula que o valor de venda do produto em nada interfere no custo médio.
Exemplo de cálculo: Ver planilha Custo Médio.xls
d) Nota Complementar altera apenas o valor do custo médio a quantidade se mantém.
Select para validar Custo Médio
- Custos relativos a notas de entradas será utilizado a fórmula para compra/nota complementar.
- Custos relativos a notas de importação será utilizado a fórmula para importação.
Fórmula do Custo Médio Fiscal
- Compras/Nota Complementar
cm_uni_calculado = Valor_item -- Valor do Item + custo_frete -- Valor Frete + valor_ipi + --Valor IPI + Valor_ICMS_calculado - valor_pis - valor_cofins
- Importação
cm_uni_calculado = valor_item -- Valor Total NF + valor_ipi + Valor IPI + valor_seguro -- Valor do Seguro + valor_frete -- Valor do Frete + valor_II -- Valor II + valor_pis -- Valor PIS + valor_cofins -- Valor COFINS + valor_ant -- Anti Dumping + valor_adu -- Despesas Aduaneiras Tributáveis + valor_icms -- Valor de ICMS - valor_pis_cre -- Valor PIS Creditável - valor_cof_cre -- Valor COFINS Creditável
Fórmula do Custo Médio Gerencial
- Compras/Nota Complementar
cmg_uni_calculado = Valor_item -- Valor do Item + custo_frete -- Valor Frete + valor_ipi -- Valor IPI + substituicao_item + Valor_retencao
- Importação
cmg_uni_calculado = valor_item -- Valor Total NF + valor_ipi + Valor IPI + valor_seguro -- Valor do Seguro + valor_frete -- Valor do Frete + valor_II -- Valor II + valor_ant -- Anti Dumping + valor_adu -- Despesas Aduaneiras Tributáveis + valor_icms -- Valor de ICMS
Sub Formulas utilizadas
- Compras/Nota Complementar
Valor_item = ((valor_liquido_compra-valor_sub_compra)*(total_item+valor_ipi)/Nvlz(valor_bruto_compra, 1))-valor_ipi
Se tipo_icms = 'Tributado' AND tributacao_na_venda = 'Substituído' AND retem_substituicao = 'T' Valor_ICMS_calculado = Valor_retencao Senão Valor_ICMS_calculado = substituicao_item + Valor_retencao - Se tributacao_na_venda <> 'Substituído' então VLRICM senão 0
Se substituido_federal='F' e isento_pis='F' então Se piscofins_no_ipi = 'T' valor_pis = ((pis/100)*(Valor_item+valor_ipi)) -- Valor PIS Senão valor_pis = ((pis/100)*(Valor_item)) -- Valor PIS Senão valor_pis = 0
Select verificar valores de custo médio detalhados
\\ttadm\Docs\publico\Base de Conhecimento\backoffice\produtos\custo médio\Detalhamento_Custo_Medio.sql
Dicionário de Dados
TT_ACM
Coluna | Tipo e Precisão | Descrição |
---|---|---|
ORD_CM | NUMBER(10) | Ordem para Cálculo |
VLRAJU | NUMBER(16,4) | Valor do Ajuste (fiscal igual ao gerencial) |
SAL_CM | NUMBER(16,4) | Quantidade em estoque do produto no instante do lançamento |
TOT_CM | NUMBER(16,4) | Valor total de custo médio do produto no instante do lançamento |
TOTCMG | NUMBER(16,4) | Valor total de custo gerencial do produto no instante do lançamento |
- ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.
- VLRAJU são os valores que afetarão o custo médio daquele dia. É equivalente às colunas VLR_CM e VLRCMG da TT_ICO.
- QTD_CM está fixo 0 na rotina de cálculo.
- O ajuste de CM é considerado no início do dia, antes dos demais movimentos.
TT_ICO
Coluna | Tipo e Precisão | Descrição |
---|---|---|
ORD_CM | NUMBER(10) | Ordem para Cálculo |
QTD_CM | NUMBER(12,4) | Quantidade movimentada |
VLR_CM | NUMBER(16,4) | Custo fiscal do item da compra |
VLRCMG | NUMBER(16,4) | Custo gerencial do item da compra |
SAL_CM | NUMBER(16,4) | Quantidade em estoque do produto no instante da compra |
TOT_CM | NUMBER(16,4) | Valor total de custo médio do produto no instante da compra |
TOTCMG | NUMBER(16,4) | Valor total de custo gerencial do produto no instante da compra |
- ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.
- QTD_CM é obtido pelo QTDMOV na trigger.
- VLR_CM, VLRCMG e QTD_CM são os custos da compra/nota complementar que serão considerados nos cálculos.
TT_LAN
Coluna | Tipo e Precisão | Descrição |
---|---|---|
ORD_CM | NUMBER(10) | Ordem para Cálculo |
QTD_CM | NUMBER(12,4) | Quantidade movimentada |
SAL_CM | NUMBER(16,4) | Quantidade em estoque do produto no instante do lançamento |
TOT_CM | NUMBER(16,4) | Valor total de custo médio do produto no instante do lançamento |
TOTCMG | NUMBER(16,4) | Valor total de custo gerencial do produto no instante do lançamento |
- ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.
- QTD_CM é obtido pelo QTDMOV na trigger.
TT_IVE
Coluna | Tipo e Precisão | Descrição |
---|---|---|
ORD_CM | NUMBER(10) | Ordem para Cálculo |
QTD_CM | NUMBER(12,4) | Quantidade movimentada |
VLR_CM | NUMBER(16,4) | Custo fiscal do item na compra "importação" |
VLRCMG | NUMBER(16,4) | Custo gerencial do item da compra "importação" |
SAL_CM | NUMBER(16,4) | Quantidade em estoque do produto no instante da venda |
TOT_CM | NUMBER(16,4) | Valor total de custo médio do produto no instante da venda |
TOTCMG | NUMBER(16,4) | Valor total de custo gerencial do produto no instante da venda |
- ORD_CM serve somente para garantir que ao se verificar os itens em um mesmo dia sempre fiquem na mesma ordem.
- QTD_CM é obtido pelo QTDMOV na trigger.
- VLR_CM, VLRCMG e QTD_CM são os custos da importação que serão considerados nos cálculos.
TR_MOV
Coluna | Tipo e Precisão | Descrição |
---|---|---|
SAL_CM | NUMBER(16,4) | Quantidade em estoque no fim do dia |
VLR_CM | NUMBER(16,4) | Valor do estoque fiscal no fim do dia |
VLRCMG | NUMBER(16,4) | Valor do estoque gerencial no fim do dia |
- Não é guardado o custo médio unitário, mas para obtê-lo basta dividir o valor pela quantidade.
TT_SAL
Coluna | Tipo e Precisão | Descrição |
---|---|---|
CAL_CM | DATE | Até quando custo médio está calculado |
ATU_CM | VARCHAR(1) | Indica se existe ou não necessidade do cálculo ["T" ou "F"] |
INI_CM | DATE | Data inicial para cálculo do custo médio (data anterior a primeira compra) |
QTD_CM | NUMBER(14,2) | Quantidade em estoque inicial |
VLR_CM | NUMBER(16,4) | Valor do estoque fiscal inicial |
VLRCMG | NUMBER(16,4) | Valor do estoque gerencial inicial |
EST_CM | NUMBER(14,2) | Quantidade em estoque atual |
TOT_CM | NUMBER(16,4) | Valor do estoque fiscal atual |
TOTCMG | NUMBER(16,4) | Valor do estoque gerencial atual |
- CAL_CM é utilizado para continuar o cálculo sem necessitar recalcular tudo novamente.Lembrando que o custo médio não é calculado logo após uma compra ou uma venda pois isto iria tornar este processo demorado.
- Os campos QTD_CM, VLR_CM e VLRCMG são para registrar um custo médio inicial para clientes que não tem como resgatar o seu estoque desde o inicio de suas atividades.
- Neste caso o sistema começará o cálculo a partir desta data e levando em conta estes valores iniciais.
Funções de Banco Envolvidas
CalculaCustoMedio:
CalculaCustoMedio(pCODFIL, pFILMAT, pCODMAT, pCODCOR, pCODTAM)
Calcula o custo médio de um determinado produto. O custo médio é calculado a partir da maior date entre CAL_CM (Data até a qual já foi calculado) ou INI_CM (Data inicial para calcular o Custo Médio). Para cada lançamento grava a ordem que o mesmo foi processado(ORD_CM), para reordenação posterior. A cada dia é gravado na TR_MOV o VLR_CM e QTD_CM para futuras consultas do custo médio. No final do processo é gravado em CAL_CM a data da ultima movimentação calculada.
CalculaCustoMedioFilial:
CalculaCustoMedioFilial(pCODFIL)
Calcula o custo médio de toda uma filial. Utiliza os mesmos processos da CalculaCustoMedio
CustoMedio:
CustoMedio (p_CodFil, p_FilMat, p_CodMat , p_CodCor, p_CodTam, p_Tipo, p_DatRef)
Retorna informaçoes de custo médio de um produto em determinada data e acordo com o tipo passado: Se Tipo=1 -> Retorna Quantidade em estoque Se Tipo=2 -> Valor Total do Estoque (Padrão) Se Tipo=3 -> Custo Médio do Produto Se não for passada uma data calcula até a data atual.
JOB_Recalcula_Custo_Medio:
CREATE OR REPLACE PROCEDURE ProcCalculaCustoMedio IS vCODFIL TD_FIL.CODFIL%TYPE; cTemp VARCHAR(20); CURSOR Filiais IS SELECT vCODFIL FROM TD_FIL; BEGIN OPEN Filiais; LOOP FETCH Filiais INTO vCODFIL; EXIT WHEN Filiais%NOTFOUND; cTemp:=CalculaCustoMedioFilial(vCODFIL); END LOOP; CLOSE Filiais; END ProcCalculaCustoMedio; /
VARIABLE JOBNO NUMBER; BEGIN DBMS_JOB.SUBMIT(:JOBNO ,'ProcCalculaCustoMedio;' ,SYSDATE ,'trunc(SYSDATE) + 23/24' ); END; /
Recalcular Custo Médio
O custo médio só é materializado nas tabelas por causa do custo-banco de se calcular o custo progressivamente desde a data inicial até o momento de determinada operação ou resumo. Mas se modificarmos a função, teremos que recalcular os valores que estão materializados para que fiquem condizentes com a mudança da função. Abaixo estão alguns exemplos de como fazer isso.
Para recalcular o custo dos últimos dois meses podemos marcar na tabela de saldo que o custo médio está calculado até 2 meses atrás.
UPDATE tt_sal SET cal_cm = add_day(Trunc(Agora()),-60), atu_cm = 'F' WHERE codmul = 0 AND cal_cm >= add_day(Trunc(Agora()),-60)
Nos clientes, o JOB_CALCULACUSTOMEDIOFILIAL está agendado para rodar todas as noites. Ele fará o recalculo para nós.
Mas se quisermos o resultado na hora, podemos chamar a função CalculaCustoMedioFilial para cada filial.
DECLARE vCODFIL TD_FIL.CODFIL%TYPE; cTemp VARCHAR(20); CURSOR Filiais IS SELECT vCODFIL FROM TD_FIL; BEGIN OPEN Filiais; LOOP FETCH Filiais INTO vCODFIL; EXIT WHEN Filiais%NOTFOUND; cTemp:=CalculaCustoMedioFilial(vCODFIL); END LOOP; CLOSE Filiais; END; /