quinta-feira, 30 de setembro de 2010

Com Fazer - Soma de Valores de Alguns Itens para Aplicação em Valores do Movimento: RM Nucleus

Produto: TOTVS Gestão de Estoque, Compras e Faturamento Versão: 11.00

Processo: Cadastro

Subprocesso: Fórmulas

 

  • Introdução

Apresentar uma solução para os casos em que é necessário considerar APENAS valores de alguns itens do movimento para serem considerados em campos de valores como Subtotal, Valor Líquido, Valor a Ratear para o Financeiro.

 

  • Desenvolvimento/Procedimento

Para melhor entendimento da situação será descrito um exemplo de processo para melhor entendimento.

1. Situação:

É preciso que apenas determinados itens com naturezas especificas sejam deduzidos para o valor financeiro.

Ex: Movimento tem os seguintes itens: item 01 (100,00) – item 02 (150,00) item 03 (200,00) e item 04 (300,00).

A natureza do item 01 e 03 é “1.102.01’’ e do item 02 e 04 é “1.102.02’’.

O valor líquido e o valor bruto tem que ser somado todos os itens, porem o valor financeiro apenas os itens 02 e 04.

Valor Líquido = 750,00 | Valor Bruto = 750,00 | Valor Financeiro = 450,00.

Resumo: Neste caso a necessidade é gerar financeiro apenas sobre os itens 02 e 04 que tem a natureza de operação “1.102.02”.

 

2. Funções a serem utilizadas:

TABIRINI = Vai para o primeiro registro da tabela. Parâmetro: Nome da tabela.

TABNATITEM = Valor de um campo da Natureza do Item

TABAVANCA = Avança um registro da tabela. Parâmetro: Nome da tabela.

TABITM = Valor de um campo do item do movimento

TABFIM = É fim da tabela. Parâmetro: Nome da tabela. Resultado: 0-Não 1-Sim

 

3. Fórmula criada:

DECL VALFIN;

SETVAR(VALFIN,0);

TABIRINI('TITMMOV');

REPITA

      SE TABNATITEM('CODNAT','S') = '1.102.02'

      ENTAO

SETVAR(VALFIN, VALFIN + TABITM('VALORTOTALITEM' , 'V'))

      FIMSE;

      TABAVANCA('TITMMOV')

ATE TABFIM('TITMMOV') = 1;

VALFIN

OBS: Onde VALFIN é uma variável declarada para pegar o valor total dos itens

 

4. Criando uma nova fórmula a partir da já existente para uma nova situação:

A máscara de produtos é ##.## e na movimentação existem itens com códigos iniciados com 10, 11 e 12, porem é preciso que o Subtotal considere apenas os produtos iniciados com 11.

A partir da fórmula do tópico anterior basta executar os seguintes procedimentos.

· Crie uma fórmula para a base de cálculo conforme indicado acima com as alterações abaixo:

1 - Na linha do SE ... coloque uma condição para que totalize apenas um determinado produto, por exemplo: SUBSTR (TABPRD ('CODIGOPRD' , 'S'), 1 , 2)

2 - Na claúsula ENTAO no lugar do valor total do item coloque KQT * KPU

3 - Inclua um movimento com vários itens e verifique se o sub total contém apenas o valor do(s) produto(s) iniciados 11

Então a fórmula ficaria assim:

DECL VALFIN;

SETVAR(VALFIN,0);

TABIRINI('TITMMOV');

REPITA

      SE SUBSTR (TABPRD ('CODIGOPRD' , 'S'), 1 , 2) = ‘11’

      ENTAO

SETVAR(VALFIN, VALFIN + KQT * KPU)

      FIMSE;

      TABAVANCA('TITMMOV')

ATE TABFIM('TITMMOV') = 1;

VALFIN

 

  • Informações Adicionais

- Este tipo de fórmula não pode ser testado na janela de fórmulas, pois apresenta erro de travamento, isto porque antes de chamar a função TABAVANCA o sistema busca as chaves do contexto e carrega os dados do primeiro item de movimento no cache, pois o contexto está apontando para este item. A função TABAVANCA move o ponteiro do cache, mas não há garantia de que o valor seguinte é correto e qualquer função executada em seguida irá reposicionar o cache no primeiro item e a execução da fórmula trava.

- As fórmulas que percorrem a tabela de item de movimento SOMENTE funcionarão nas fórmulas de VALOR OUTROS e VALOR FINANCEIRO do movimento. Esta é uma limitação devido ao mecanismo de posicionamento da fórmula. Segue abaixo a relação de funções que possuem esta restrição TABIRINI, TABIRFIM,TABAVANCA, TABVOLTA, TABINI, TABFIM.

4 comentários:

  1. Gostei muito da formula, mas não funciona, coloquei exatamente como esta no exemplo, só alterei para o CFOP 5.910.00001,mas ele apresenta o seguinte erro.
    Erro de compilação da formula 2.02.048 na linha 1!
    Identifier expected.
    Se alguém tiver uma solução eu agradeço.

    ResponderExcluir
    Respostas
    1. Este tipo de erro esta ligado a sintaxe da fórmula. Pode ser parênteses, aspas ou variáveis que não estão declaradas corretamente.

      Para uma análise mais detalhada, sugiro que seja aberto um chamado junto ao suporte, passando a sintaxe da fórmula e a versão do aplicativo.

      Excluir
    2. Silvio,
      Verifique as informações adicionais do conteúdo, pois este tipo de fórmula não pode ser testado na janela de fórmulas, porém no movimento funciona.

      Excluir
  2. A fórmula funcionada com sucesso, inclusive usei de forma que fossem lidos todos os itens do movimento, exceto os itens de determinada natureza. Seria interessante apenas adiconar como observação deste informativo que o Tipo de Movimento deve estar parametrizado para utilizar o campo "Preço Total" para que a fórmula funcione no movimento.

    ResponderExcluir

RSS Reader