Ir para conteúdo
Anúncios Publicitários
Jair - Fórmula

Exemplos de Fórmulas

Recommended Posts

Quero ver as contribuições aqui da Galera heim !!!!! :blush:

No módulo de Fórmulas dos Aplicativos RM, existem várias Funções e Comandos que não são comuns para o uso diário, e por isso, muitos não têm a mínima idéia de como que funcionam, e consequentemente, nunca conseguem usar.

Vamos ajudar aos demais membros citando alguns casos que conheçam, citando como que usa ?

Podemos fazer o seguinte, quem souber, coloca mais ou menos assim:

Comando: Repita Ate - Executa um comando ou sequencia de comandos até que atenda certa situação.

Exemplo de Fórmula:

Decl(calcular);
Setvar(calcular, 1);

Repita
 SetVar(Calcular, Calcular + 1)
Ate Calcular > 9; 

Calcular

Ao rodar esta fórmula, observe que, o retorno será 10, ou seja:

- Declaramos a variável Calcular

- Setou a variável Calcular em 1

- Rodou o comando dentro do "Repita Ate" várias vezes, somando sempre + 1 ao valor de "Calculo"

- Quando Calcular ficou mais que 9 finalizou e saiu do loop

- Retorna Calcular, que estava em 10.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jair,

Segue minha contribuição: PARMQRY (STRING)

A função PARMQRY é bem interessante quando você precisa fazer algum cálculo, retorno de um dado de qualquer tipo e ainda utilizá-la para filtro no relatório.

Para fazer uma função PARMQRY você precisa ter é claro um relatório criado e:

a) saber as informações que a sentença SQL do relatórios possui. Para isso gere o relatório e abra a pasta do aplicativo (c:\corporerm\rmnucleus) e abra o arquivo SQL.TXT;

b) com posse do nome do campo na SELECT do relatório crie a fórmula da seguinte forma: PARMQRY ('NOME DO CAMPO')

c) adicione a fórmula criada na linha de detalhe correspondete ao SELECT do arquivo txt

d) quando gerar o relatório a fórmula será executada e o resultado será impresso

A fórmula PARMQRY ode ser usada simplesmente para retornar um campo:

PARMQRY ('CODCOLIGADA')

Pode ser usada para retornar um campo de uma Consulta SQL inserida no relatório, ou seja, não precisa ser campo da base;

Pode ser utilizada para cálculos, como por exemplo:

SE ( PARMQRY('PRECO1') + PARMQRY('PRECO2') + PARMQRY('PRECO3') + PARMQRY('PRECO4') + PARMQRY('PRECO5') ) > 0 
ENTAO
 1
SENAO
 0
FIMSE

E também para filtros nos relatórios!!!

Ou seja, essa fórmula é campeã :blush:

Att,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Excelente Tópico Jair!

E mais ainda as contribuições... :blush:

Eu vou começar contribuindo com uma informação de como não usar.

CALCMED é uma função que você pode pegar o valor calculado de média de um determinado tipo de evento (férias, 13o., etc), só que, é uma função que NÃO deve ser usada em uma fórmula adicional para cálculos de férias, 13o, etc., fazendo com que aborte o Labore.

A justificativa é que ela faz o cálculo entrar em looping abortando a aplicação.

Portanto, NÃO utilize CALCMED em fórmulas adicionais que irá abortar o Labore.

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue mais uma:

No Labore existe a função G ou GTD que servem para calcular anuênio, biênio, triênio do funcionário. Esta função, muita gente não sabe, mas ela não baseia o cálculo na data de admissão do funcionário e sim pela data base, ou seja, caso exista algum funcionário que foi readmitido mas terá que pagar o benefício com início em uma data anterior à data de admissão poderá alterar esta data:

Ex.: Data de admissão: 01/01/2007

Qtde atual de anuênio: 1

Alterando a database para: 01/01/2006

Qtde atual de anuênio: 2

Sem precisar fazer fórmulas milaborantes para fazer com que o cálculo pegue uma data diferenciada da admissão.

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

Mais outras funções que gosto muito também:

TABINI - retorna 0 e 1 para identificar se está no início da tabela

TABFIM - retorna 0 e 1 para identificar se está no fim da tabela

TABIRINI - vai para o primeiro registro da tabela

TABIRFIM - vai para o último registro da tabela

TABAVANCA - vai para o próximo registro da tabela

Vou postar agora um exemplo que preciso somar os valores dos itens na tabela de Itens do Movimento apenas de produtos específicos. Utilizei também a declaração de variáveis e o Repita, mas estes já foram demonstrados no início deste tópico.

TABIRINI ('TITMMOV');

DECL SOMA;
SETVAR(SOMA,0);

REPITA
SE  TABITM ('IDPRD' , 'S') = 3762
   ENTAO SETVAR(SOMA, SOMA + TABITM ('VALORTOTALITEM' , 'V'))
FIMSE;
TABAVANCA ('TITMMOV')
ATE  TABFIM ('TITMMOV') = 1;
SOMA

Como nem tudo é perfeito, essa fórmula poderosíssima tem uma limitação: só funciona para algumas tabelas.

Att,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá, mais quatro contribuições de uma só vez...

Função DECL - Declarar ( inicializa ) uma variável pra poder usar durante a fórmula. UTIL DEMAIS !!!

* quando usada esta função, automaticamente tem que usar a SETVAR pra setar valores para a variável que criou.

Função TABCLIFOR - Retorna o conteúdo de um determinado campo na tabela de Cli/For

* existe função semelhante pra outras tabelas também.

Sintaxe: TABCLIFOR ('STRING', 'STRING', VALOR, 'STRING')

Sendo esses quatro parametros:

- nome do campo desejado;

- tipo do campo desejado (valor, inteiro, string, data);

- valor da coligada do cliente;

- código do cliente desejado.

* nos parametros podem ser usadas outras funções, ou campos digitados (fixos).

Função CONCAT ( ou CONCAT2 ) - Concatena ( junta ) dois campos strings.

O CONCAT deixa exatamente juntos os campos. Já o CONCAT2 coloca um espaço entre os campos.

Sintaxe: CONCAT ('CAMPOA', 'CAMPOB') - Resultado: 'CAMPOACAMPOB'

Sintaxe: CONCAT2 ('CAMPOA', 'CAMPOB') - Resultado: 'CAMPOA CAMPOB'

Função SUBSTR - Retorna uma parte de um campo ou de um texto qualquer.

Sintaxe: SUBSTR ('STRING', Valor, Valor)

Sendo:

- no primeiro parametro, o texto ou campo com texto para tratar ;

- no segundo parametro, a posição inicial a tratar ( capturar ) no texto;

- no terceiro parametro, a quantidade de caracteres para 'pegar' .

Exemplos abaixo:

Decl ( xCEP );	

Setvar( xCEP, TABCLIFOR ( 'CEP', 'S', 0 , '102647' ) );

CONCAT2 ( SUBSTR (xCEP, 1, 5) , SUBSTR (xCEP, 7, 3) )

Aqui acima, tratamos os quatro funções citadas e o retorno será por exemplo: '02730 000', para a leitura do CEP '02730-000'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já foi mencionada a função mas gostaria de registrar um exemplo pra facilitar:

TABCLIFOR ('CODCOLTCF' , 'S' ,TABMOV ('CODCOLCFO' , 'I'),TABMOV('CODCFO' , 'S'))

A função acima serve pra buscar o tipo de cliente fornecedor, podendo ser analisado com um SE etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Excelente Tópico Jair!

E mais ainda as contribuições... :rofl:

Eu vou começar contribuindo com uma informação de como não usar.

CALCMED é uma função que você pode pegar o valor calculado de média de um determinado tipo de evento (férias, 13o., etc), só que, é uma função que NÃO deve ser usada em uma fórmula adicional para cálculos de férias, 13o, etc., fazendo com que aborte o Labore.

A justificativa é que ela faz o cálculo entrar em looping abortando a aplicação.

Portanto, NÃO utilize CALCMED em fórmulas adicionais que irá abortar o Labore.

Abs.

Oi Donaldson.

Só uma observação.

Eu tive esse problema de fazer uma fórmula com CALCMED e o sistema abortar, mas isso acontecia durante a execução da fórmula mesmo na hora de testar.

Eu precisava pagar a média de um evento no 13º, mas para ele fazer as médias conforme o sindicato do funcionário (tempo, valor, hora, etc..) era preciso usar essa variável.

Descobri que o problema não estava em usar a variável no cálculo e sim que a versão do BDE estava desatualizada. Quando fiz a atualização para a versão 5.20 o sistema não abortou mais.

Abçs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, essa dica contém um recurso muito útil na minha opinião. Como todos sabem o debug de fórmulas é interessante mas quando você possui muitas condições torna-se trabalhosa a análise para identificar qual condição foi atendida.

Temos clientes em que as fórmulas chegam a 15, 20 condições e analisar isso tudo é complicado.

Utilizando esta dica você pode mapear por onde você passou.... Vamos ao exemplo. Vejam o anexo.

post-77-1231195572_thumb.jpg

Com isso você pode dizer 'Passei no bloco 1', 'Entrei aqui', enfim fica muito mais fácil analisar o debug.

Anexei também o debug de cálculo dos testes que realizei com a fórmula. Boa leitura e ótimo proveito.

Abraço a todos.

Teste1.txt

Teste2.txt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezados

- Fiz o curso do Gerador de Relatório, no ultimo dia me passaram um exemplo de Fórmula, mas foi tão "simples" e bem "vagabunda" que algumas pessoas do curso não aprenderam outras mais ou menos como eu.

- Vendo os post, percebi que hj não sei nada a respeito de Fórmula, isso me deixa muito preocupa na minha função aqui na empresa, estou engatinhado no Desenvolvimento de relatório com muita dificuldade.

- Meu Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maia... detalhe muito simples e pratico, realmente... ajuda e muito.

Valeu a dica ae pra galera.

Pessoal, essa dica contém um recurso muito útil na minha opinião. Como todos sabem o debug de fórmulas é interessante mas quando você possui muitas condições torna-se trabalhosa a análise para identificar qual condição foi atendida.

Temos clientes em que as fórmulas chegam a 15, 20 condições e analisar isso tudo é complicado.

Utilizando esta dica você pode mapear por onde você passou.... Vamos ao exemplo. Vejam o anexo.

post-77-1231195572_thumb.jpg

Com isso você pode dizer 'Passei no bloco 1', 'Entrei aqui', enfim fica muito mais fácil analisar o debug.

Anexei também o debug de cálculo dos testes que realizei com a fórmula. Boa leitura e ótimo proveito.

Abraço a todos.

Prezados

- Fiz o curso do Gerador de Relatório, no ultimo dia me passaram um exemplo de Fórmula, mas foi tão "simples" e bem "vagabunda" que algumas pessoas do curso não aprenderam outras mais ou menos como eu.

- Vendo os post, percebi que hj não sei nada a respeito de Fórmula, isso me deixa muito preocupa na minha função aqui na empresa, estou engatinhado no Desenvolvimento de relatório com muita dificuldade.

- Meu Deus!

mclpaltrn, o detalhe é o seguinte... o curso de GERADOR não ensina Formulas mesmo não. o recurso de fórmulas é do aplicativo, e existe um curso especifico para formulas. O Gerador até usa este recurso, e em muitos casos ajuda muito, mas é separado. Se for o caso, procure se existe na unidade TOTVS que o atende esse curso de FORMULAS, que, este sim, poderá ajudá-lo bastante no uso do sistema e para relatórios.

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites
Pessoal, essa dica contém um recurso muito útil na minha opinião. Como todos sabem o debug de fórmulas é interessante mas quando você possui muitas condições torna-se trabalhosa a análise para identificar qual condição foi atendida.

Temos clientes em que as fórmulas chegam a 15, 20 condições e analisar isso tudo é complicado.

Utilizando esta dica você pode mapear por onde você passou.... Vamos ao exemplo. Vejam o anexo.

post-77-1231195572_thumb.jpg

Com isso você pode dizer 'Passei no bloco 1', 'Entrei aqui', enfim fica muito mais fácil analisar o debug.

Anexei também o debug de cálculo dos testes que realizei com a fórmula. Boa leitura e ótimo proveito.

Abraço a todos.

Fabio, sem palavras.

Algo simples que facilita e muito a nossa vida...

e eu desconhecia!

Eureka!

vlw a dica.

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Guest Treinamentos RM

"e existe um curso especifico para formulas"

Jair, quando você vai ministrar este treinamento? rs

Aposto que tem bastante demanda. :Valeu:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jair, boa tarde

Não sei se era desses tipos de fórmulas que estava falando, caso não seja favor exclui-las. Obrigado

Fórmula para cálculo de Insalubridade

SE TABFUNC ('CODFUNCAO' , 'S')='5' OU TABFUNC ('CODFUNCAO' , 'S')='13'

ENTAO (0.4*760)/30*(N('0002')+N('0145'))

SENAO

(0.2*MINGA)/30*(N('0002') +N('0145'))

FIMSE

/*20% do mínimo garantido do sindicado = R$ 490,00*/

Fórmula para buscar o último salário da pessoa

se rc > 0 entao

rc + (MV(MES,ANO,'0074')+MV(MES,ANO,'0075')+MV(MES,ANO,'0095'))

senao

ACUMFF(MES,ANO,'03')

FIMSE

Função para buscar nome da mãe do funcionário

FNOMEMAE

FÓRMULAS UTILIZADAS NO RM NÚCLEUS

Valor Bruto do Movimento

(KQT*KPU) -KDE + KDS

Fórmula para validação de campo complementar ( O campo não pode estar nulo)

SE TABMOVCOMPL ('SITUACAO' , 'V') <> '' ENTAO 1 SENAO 0 FIMSE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesssoal segue mais algumas formulas:

INDENIZAÇÃO LEI 7.238/84

SE DTD > '03/01/2011' E DTD < '01/03/2011' E TABFUNC ('TIPODEMISSAO' , 'V') = 2

ENTAO FOR ('Remuner')

SENAO 0

FIMSE

Zerar valores de eventos

SE CREC = 'M'

ENTAO TOTDESC - TOTPROV

SENAO 0

FIMSE

Valores Alterado Manualmente -- Crítica da folha

DECL VALOR;

SE EXECSQL ('FOR1.009') = VERDADE

ENTAO

REPITA

SETVAR(VALOR,RESULTSQL('FOR1.009','VALORESFORCADOS'))

ATE PROXREGSQL('FOR1.009') = FALSO;

VALOR

SENAO 0 FIMSE

Sexo - utilizado no relatorio Seguro Desemprego

SE (TABPESSOA('SEXO','S') = 'M') ENTAO 1 SENAO 2 FIMSE

Referência do Evento Empréstimo Consignação Bradesco

TABEMPRESTIMO ('NROPARCPAGAS' , 'V' , '01')

Referência do Evento Empréstimo Consignação Bradesco Rescisão

SE TABEMPRESTIMO ('SALDODEVEDOR' , 'V' , '01') > (TOTPROV * 0.30)

ENTAO 30

SENAO 0

FIMSE

Liquido de Salario p/contabilização

/* ATENÇÃO PARA A CONTABILIZAÇÃO MES A MES DEVE-SE ALTERAR OS CODIGOS FIXOS 'MES' E 'ANO' PARA O MES E ANO QUE ESTÁ SENDO CONTABILIZADO*/

LIQUIDOFF (F ('Ano'),F ('Mes') , 1) +

LIQUIDOFF (F ('Ano'),F ('Mes') , 2) +

LIQUIDOFF (F ('Ano'),F ('Mes') , 10) +

LIQUIDOFF (F ('Ano'),F ('Mes') , 13)

/*LIQUIDOFF (2010,6 , 1) +

LIQUIDOFF (2010,6 , 2) +

LIQUIDOFF (2010,6 , 10) +

LIQUIDOFF (2010,6 , 13)

*/

INFORME DE RENDIMENTOS – NOME DO RESPONSAVEL PELA PENSAO

SE EXECSQL ('DEPEND') =1 ENTAO

DECL IMPRESSAO, CONT, X;

REPITA

SETVAR (CONT, RESULTSQL ('DEPEND','NRODEPEND'));

SETVAR (IMPRESSAO,CONCAT5("RESPONSAVEL PENSAO:",TABDEP ('RESPONSAVEL','S',CONT)," -", "CPF:",

RESULTSQL ('DEPEND','CPFRESP')));

SETVAR (X, X+1)

ATE PROXREGSQL ('DEPEND') = 0 OU X=1

FIMSE;

IMPRESSAO

INDENIZAÇÃO - TEMPO DE SERVIÇO

SE NMESES >= 12 ENTAO

SE TABFUNC('TIPODEMISSAO','V') = 2 ENTAO

(TCASA) * 3 * RC / 30

SENAO

0

FIMSE

SENAO

0

FIMSE

Compartilhar este post


Link para o post
Compartilhar em outros sites

segue mais formulas

Pessoal vamos ajudar

Prorrogação de experiência 45 dias

DTA+44

Prorrogração de experiência 90 dias

DTA + 89

SALDO FERIAS 5 DIAS ANO ANTERIOR

SE CREC = 'H'

ENTAO (FOR ('SALCOMP') / 30)*5

SENAO (RC) / 30*5

FIMSE

CTA FGTS

/*SE TABFUNC ('CONTAFGTS' , 'S') = ' '

ENTAO 0

SENAO TABFUNC ('CONTAFGTS' , 'S')

FIMSE*/

0

Abraços

Vagner Leonel

Editado por Jair - Fórmula
Colocado Negrito nos Titulos das Formulas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Variavel PAR no Labore...

Sintaxe básica

VAL(SUBSTR(PAR,1,20))

Baseado no help "Pasta Funcionários da Folha Analítica", o formato de

PAR é MM-AAAA-P-C. Nesse caso para obter o período deve-se ler a posição 12, como já é feito na fórmula descrita na solicitação.

FOLHA ANALITICA:

===== =========

O resultado será : 05-2006-3-4, onde:

05 - é o mês desejado

2006 - é o ano desejado

3 - é o período desejado

4 - é o caixa desejado

Já para a geração de encargos deve-se ler a posição 9, poir o formato de PAR descrito no help "Pasta de Dados Contábeis do Encargo" é MM-AAAA-P.

CONTABILIZAÇÃO:

==============

O resultado será : 05-2006-3, onde:

05 - é o mês desejado

2006 - é o ano desejado

3 - é o período desejado

Exemplo:

Desejo buscar o valor liquido do mês,ano e periodo informados no momento da geração do lote contábil, com isso a fórmula será:

LIQUIDOFF(VAL(SUBSTR(PAR,4,4)),VAL(SUBSTR(PAR,1,2)),VAL(SUBSTR(PAR,9,1)))

Compartilhar este post


Link para o post
Compartilhar em outros sites

segue mais formulas

Pessoal vamos ajudar

Prorrogação de experiência 45 dias

DTA+44

Prorrogração de experiência 90 dias

DTA + 89

SALDO FERIAS 5 DIAS ANO ANTERIOR

SE CREC = 'H'

ENTAO (FOR ('SALCOMP') / 30)*5

SENAO (RC) / 30*5

FIMSE

CTA FGTS

/*SE TABFUNC ('CONTAFGTS' , 'S') = ' '

ENTAO 0

SENAO TABFUNC ('CONTAFGTS' , 'S')

FIMSE*/

0

Abraços

Vagner Leonel

Vagner, essa parte lá no meio, acho que dará erro na sua formula heim !!! Poderia verificar por favor?

E se possivel, procure dar exemplo da necessidade da Formula, quando for, tipo essa ultima, pois, é um exemplo que seja usual ou mesmo que é importante ter, ou seria alguma fórmula criada na sua empresa apenas? Não seria algo especifico que foi criado para alguma necessidade particular na sua empresa, isso que quero dizer :)

CTA FGTS

Essa parte tambem será um problema, na mesma formula, pois, chama uma outra formula a qual você não citou antes, e não existindo essa formula, é erro na certa:

ENTAO (FOR ('SALCOMP') / 30)*5

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesssoal segue mais algumas formulas:

INDENIZAÇÃO LEI 7.238/84

SE DTD > '03/01/2011' E DTD < '01/03/2011' E TABFUNC ('TIPODEMISSAO' , 'V') = 2

ENTAO FOR ('Remuner')

SENAO 0

FIMSE

Zerar valores de eventos

SE CREC = 'M'

ENTAO TOTDESC - TOTPROV

SENAO 0

FIMSE

Valores Alterado Manualmente -- Crítica da folha

DECL VALOR;

SE EXECSQL ('FOR1.009') = VERDADE

ENTAO

REPITA

SETVAR(VALOR,RESULTSQL('FOR1.009','VALORESFORCADOS'))

ATE PROXREGSQL('FOR1.009') = FALSO;

VALOR

SENAO 0 FIMSE

Sexo - utilizado no relatorio Seguro Desemprego

SE (TABPESSOA('SEXO','S') = 'M') ENTAO 1 SENAO 2 FIMSE

Referência do Evento Empréstimo Consignação Bradesco

TABEMPRESTIMO ('NROPARCPAGAS' , 'V' , '01')

Referência do Evento Empréstimo Consignação Bradesco Rescisão

SE TABEMPRESTIMO ('SALDODEVEDOR' , 'V' , '01') > (TOTPROV * 0.30)

ENTAO 30

SENAO 0

FIMSE

Liquido de Salario p/contabilização

/* ATENÇÃO PARA A CONTABILIZAÇÃO MES A MES DEVE-SE ALTERAR OS CODIGOS FIXOS 'MES' E 'ANO' PARA O MES E ANO QUE ESTÁ SENDO CONTABILIZADO*/

LIQUIDOFF (F ('Ano'),F ('Mes') , 1) +

LIQUIDOFF (F ('Ano'),F ('Mes') , 2) +

LIQUIDOFF (F ('Ano'),F ('Mes') , 10) +

LIQUIDOFF (F ('Ano'),F ('Mes') , 13)

/*LIQUIDOFF (2010,6 , 1) +

LIQUIDOFF (2010,6 , 2) +

LIQUIDOFF (2010,6 , 10) +

LIQUIDOFF (2010,6 , 13)

*/

INFORME DE RENDIMENTOS – NOME DO RESPONSAVEL PELA PENSAO

SE EXECSQL ('DEPEND') =1 ENTAO

DECL IMPRESSAO, CONT, X;

REPITA

SETVAR (CONT, RESULTSQL ('DEPEND','NRODEPEND'));

SETVAR (IMPRESSAO,CONCAT5("RESPONSAVEL PENSAO:",TABDEP ('RESPONSAVEL','S',CONT)," -", "CPF:",

RESULTSQL ('DEPEND','CPFRESP')));

SETVAR (X, X+1)

ATE PROXREGSQL ('DEPEND') = 0 OU X=1

FIMSE;

IMPRESSAO

INDENIZAÇÃO - TEMPO DE SERVIÇO

SE NMESES >= 12 ENTAO

SE TABFUNC('TIPODEMISSAO','V') = 2 ENTAO

(TCASA) * 3 * RC / 30

SENAO

0

FIMSE

SENAO

0

FIMSE

Vavá,

Muito boa a sua contribuição, mas, será que você poderia me dar uma ajudinha ainda mais profunda. O que estou precisando é entender a sintaxe das fórmulas.

Porque usar aspas? para que e quando o parêntese? etc....

Se puder serei muito grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe entrar neste topico, mas eu preciso de uma ajuda. Tenho que desenvolver uma formula de consistencia no Nucleus dentro do tipo de movimento para tratar 4 situações diferentes e independentes a estrutura esta assim:

/*VALIDA DATA DO IRRF*/

SE (TABMOV ('DATAEMISSAO' , 'D') <= FOR('9999E') E MVT('IRRF') > 0)

ENTAO 0

SENAO 1

FIMSE;

/*VALIDA CHAVE NFE*/

EXECSQL ('VALIDACHAVE');

SE TABMOV ('CODTDO' , 'S') = 'NFe' OU TABMOV ('CODTDO' , 'S') = 'CTe'

ENTAO

SE RESULTSQL ('VALIDACHAVE','RESULTADO') = 1

ENTAO 1

SENAO 0

FIMSE

SENAO 1

FIMSE;

/*VALIDA CAMPOS COMPLEMENTARES*/

SE TABMOV('CODFILIAL', 'V') = 2 E (TABMOV ('CODTMV' , 'S') ='1.2.26' OU TABMOV ('CODTMV' , 'S') ='1.2.25' OU TABMOV ('CODTMV' , 'S') ='1.2.97')

ENTAO

SE TABMOVCOMPL('TIPODOC', 'S') <> ' ' E TABMOVCOMPL('NFE', 'S') <> ' '

ENTAO 1

SENAO 0

FIMSE

SENAO 1

FIMSE;

/*VALIDA NOTA DUPLICADA*/

EXECSQL('SQLIDMOV');

SE EXECSQL('SQLIDMOV') = VERDADE

ENTAO 1

SENAO

/*DECL AUX;*/

SETVAR(AUX,0);

SE EXECSQL('SQLDUPLI') = VERDADE

ENTAO SETVAR(AUX, RESULTSQL('SQLDUPLI','VALOR'))

SENAO SETVAR(AUX, 0)

FIMSE

SE

TABMOV ('CODTMV' , 'S') <> '1.1.02' E

TABMOV ('CODTMV' , 'S') <> '1.1.03' E

TABMOV ('CODTMV' , 'S') <> '1.1.04' E

TABMOV ('CODTMV' , 'S') <> '1.1.06' E

TABMOV ('CODTMV' , 'S') <> '1.1.07' E

TABMOV ('CODTMV' , 'S') <> '3.1.00' E

TABMOV ('CODTMV' , 'S') <> '1.1.08'

ENTAO

SE (AUX = 1)

ENTAO

SE(usuariocorrente = 'Eber' ou usuariocorrente = 'mestre') /*LIBERA NF DUPLICADA*/

ENTAO 1

SENAO 0

FIMSE

SENAO 1

FIMSE

FIMSE

FIMSE

Desta forma so esta validando a ultima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Important Information

Usando este site, você concorda com nossos Termos de Uso.