A Fórmula Visual da linha RM possibilita pequenas customizações nos produtos, permitindo criar regras específicas em determinados cadastros/processos. Segue o link no TDN da Totvs.
http://tdn.totvs.com/pages/releaseview.action?pageId=161351564
A Fórmula Visual da linha RM possibilita pequenas customizações nos produtos, permitindo criar regras específicas em determinados cadastros/processos. Segue o link no TDN da Totvs.
http://tdn.totvs.com/pages/releaseview.action?pageId=161351564
Boa tarde, tudo bom?
Estou com uma dúvida, surgiu uma nova ideia de formula visual para bloquear o percentual de desconto em um documento a pagar ou receber (só permitir desconto até 10%), porém gostaria que se fosse um usuário específico a formula deixasse incluir qualquer percentual de desconto, existe alguma forma, dentro da formula visual, que eu possa acessar o código do usuário logado?
CurtirCurtir
Boa tarde Elias, tudo joia!
É possível através do contexto. Segue abaixo a linha que deve ser colocada na atividade Se/Senão para acessar o código do usuário logado.
this.Context.CodUsuario
CurtirCurtido por 1 pessoa
Estamos com um problema na formula visual que escreve no histórico longo do movimento, quando seleciona mais de uma nota e fatura (cada movimento irá gerar um novo movimento) apenas uma dessas notas recebe as informações no campo. Enviei a formula via email.
OBS: temos uma build da versão 11.82 instalada, importei nessa base e mesmo assim o erro continua.
CurtirCurtir
Boa tarde Elias,
O que esta errado na fórmula visual é que na primeira consulta sql (rmsConsSQLActivity1) os valores passados para os parâmetros da consulta esta pegando do RMSWorkFlow (Ex: Activity=RMSWorkflow, Path=Fields[“IDMOV”].AsInteger) assim sempre executará a consulta SQL passando os valores de apenas um movimento selecionado na visão.
O correto é pegar os valores da primeira atividade para cada iteração (rmsForEachActivity1) pois ela esta associada aos registros do RMSWorkFlow e percorre cada registro selecionado na visão. Assim passando para os parâmetros da consulta sql o valor corrente da atividade rmsForEachActivity1 (Ex: Activity=rmsForEachActivity1, Path=Fields[“IDMOV”].AsInteger) para cada registro selecionado na visão a consulta irá trazer como resultado o movimento destino gerado.
CurtirCurtir
Show, era isso mesmo, muito obrigado.
CurtirCurtido por 1 pessoa
Boa noite.
Tenho acompanhado o blog e visto coisas interessantes por lá, mas como sou neófito em FV estou precisando de uma ajuda.
Busco solução para a seguinte situação, informar um valor em um campo complementar usar esse valor como parâmetro para uma consulta SQL e o retorno do sql carregar nos outros campos complementares do mesmo movimento. É possível fazer isso ? que gatilho eu devo usar ?
CurtirCurtir
Bom dia Edimilson,
Sim é possível. Acho que pode usar o gatilho Antes de Salvar o Registro ou Antes da atualização do Registro do dataserver MovMovimentoDataTBC.
Att,
Renato
CurtirCurtir
Bom dia,
Estou com um problema em uma formula visual do Fluxus. Preciso verificar a porcentagem de desconto no momento da baixa, mas a formula não consegue “olhar” nenhum campo a não ser a referencia do documento. Estou usando o gatilho Processos>Antes da Execução>FinLanBaixaData.
O que estou fazendo de errado?
CurtirCurtir
Bom dia Elias, no caso do processo você consegue acessar apenas os dados que são preenchidos no wizard do processo através da atividade lerParâmetro
CurtirCurtir
lerParametro eu não achei, só achei o “Consultar Parametros do Processo”, mas quando jogo esse componente o sistema gera o nome “rmsProcessParamsActivity1” e pelo que achei (http://tdn.totvs.com/pages/releaseview.action?pageId=149881398) era pra aparecer “rmsReadParamsProcActivity1”, sem contar que os campos que esse componente esta gerando são bem diferentes dos campos da documentação. Será que é bug? (11.82.38.129)
CurtirCurtir
Boa tarde Elias, Neste caso aconselho entrar em contato com o suporte da Totvs para verificar a existência de um bug na atividade pois se utilizada de maneira correta precisa estar acessando os valores informados antes de executar o processo no wizard de execução.
CurtirCurtir
Bom dia Elias,
Tenho uma situação em que não posso permitir que o usuário não conclua mais de um movimento por vez. Pensei que talvez fosse possível fazer isso via Fórmula Visual, percorrendo todos os movimentos selecionados. Você sabe me dizer se isso é possível ?
CurtirCurtir
Boa noite Cesar, é possível! Você precisa percorrer os movimentos através da atividades “Para cada Iteração” selecionando as rows da table do RMSWorkFlow.
Assim se tiver com rows. count maior do que 1 quer dizer que selecionou mais de um movimento para concluir assim usa atividade de exceção para disparar a mensagem.
O gatilho que você pode usar é o antes de executar o processo.
Espero ter ajudado!
CurtirCurtir
Boa tarde Renato,
Como faço para verificar count maior do que 1 ? Devo usar uma atividade SE/SENAO ?
Desde já agradeço.
CurtirCurtir
Exatamente. Assim consegue acessar o RMSWorkFlow.table[0].rows.count.
CurtirCurtir
Renato,
Obrigado pela ajuda.
Até consegui pegar somente os movimentos selecionados na visão, mas esta propriedade “count” de “RMSWorkFlow.table[0].rows.count” não esta disponível, sendo assim não consigo verificar o número linhas populadas.
CurtirCurtir
Cesar, Na atividade if else tem a funçao count que consegue usar passando as rows.
CurtirCurtir
Boa tarde,
Renato, abri um chamado na TOTVS e, se me lembro, a resposta foi que só funcionaria a partir da versão 12
Conseguiu Cesar?
CurtirCurtir
Olá Professor Renato,
Fiz uma formula visual que após um movimento de ordem ser salvo, dispara um e-mail avisando que existe movimento para serem faturados(está funcionando). Porem gostaríamos de colocar na informação do corpo do e-mail algumas informações do movimento (dados da tabela TMOV, não está funcionando).
Dentro do comando (rmsConsSQLActivity 1) acredito que o problema seja o parâmetro da consulta, testei com (Activity=RMSWorkflow, Path=Fields[“idmov”].AsInteger) porem da erro, tentei com outras opções, mas não sai do lugar.
Alguma dica!
CurtirCurtir
Raphel, não sou um expert em formula visual igual ao Renato, mas posso tentar te ajudar.
No caso, essa consulta SQL retorna as informaçoes que voce quer jogar no e-mail, certo? (Numero do movimento, cliente, etc)
Chega a mostrar algum erro no sistema ou salva o movimento sem fazer mais nada?
Tenta usar o componente “Gerar Exceção” logo após a consulta SQL e vincular algum campo da consulta SQL na mensagem de exceção, dai voce vai pelo menos descobrir se a consulta SQL está funcionando certinho.
Espero ter ajudado rsrsrsrs
CurtirCurtir
Boa tarde Raphael,
As instruções do Elias são validas, pois precisa debugar para saber o exato aonde esta o problema. Com as informações que passou me parece que esta correto, deve haver algum passo que esta passando desapercebido.
CurtirCurtir
Isso, da erro e não deixa salvar o movimento.
De acordo com o tipo de parâmetro muda o erro:
Activity=rmsConsSQLActivity1, Path=Fields[“idmov”].AsInteger
ERRO: Fórmula Visual: ‘ENVIA EMAIL | Ao salvar movimento 2.1.30’.
Erro na execução da Atividade: ‘rmsConsSQLActivity1’ Erro: GetRuntimeValue failed since Path ‘Fields[“idmov”]’ evaluated to ‘null’ value.
Activity=RMSWorkflow, Path=Fields[“idmov”].AsInteger
ERRO: Fórmula Visual: ‘ENVIA EMAIL | Ao salvar movimento 2.1.30’.
Erro na execução da Atividade: ‘rmsConsSQLActivity1’
Erro: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
a SQL que montei foi algo simples:
SELECT
TMOV.NUMEROMOV, TTMV.nome
FROM TMOV, TTMV
WHERE
TMOV.idmov =:idmov
and tmov.codcoligada=1
and tmov.dataemissao = CONVERT(datetime, CONVERT(varchar, getdate(), 103), 103)
and tmov.idmov=(select MAX(idmov) from TMOV ) and
TMOV.codtmv = TTMV.codtmv and TMOV.codcoligada = TTMV.codcoligada
Valeu pelas dicas e ajudas ate o momento, mas continuo na luta, a totvs como sempre quer cobrar por este serviço!
CurtirCurtir
Boa tarde Rafael, O primeiro erro informado esta falando que esta retornando nulo no campo idmov. Tenta colocar o idmov em maiúsculo…
No blog tem um post sobre Consulta SQL pesquisa e veja se esta acessando os dados da forma que fala no PPT do Post.
CurtirCurtir
Fiz as mudanças conforme os comentários o erro continua o mesmo.
CurtirCurtir
Boa tarde Raphael,
Com as informações passadas o que poderia informar foi passado, o passo seguinte seria debugar a formula conforme sugerido pelo o Elias, porém, caso deseje que façamos a formula visual envie a mesma no e-mail de contato assim combinamos este trabalho.
CurtirCurtir
Bom dia,
To tentando fazer uma formula visual aqui a mais de 3 dias, hoje recebi o mesmo erro que você mencionou, no meu caso foi o seguinte. Meu SQL tem dois filtros CODCOLIGADA e IDMOV, o CODCOLIGADA estava vinculado em “paraCadaTITMMOV” e o IDMOV vinculado em “paraCadaTMOV”, quando vinculei os dois filtros no “paraCadaTMOV” o erro parou, tenta fazer o seguinte:
– Inclui um componente “Para Cada Iteração” vincula ele em RMSWorkflow>Tables[0]>Rows
– Joga a consulta sql dentro desse componente e linka o seu filtro no “Para Cada Iteração”>Fields[“IDMOV”]
CurtirCurtir
Olá,
Estou com uma certa dificuldade para uma FV de email.
Configurei a formula para enviar email ao criar um movimento de ajuste de estoque, até ai tudo bem.
porém preciso por no corpo do email um campo da tmovcompl, Fiz uma consulta para tal informação, mas da erro no momento de salvar o movimento .
O que eu percebo é que o RM acusa que esta null o complementar, com razão, pois o complementar é criado após o registro do movimento.
Tem alguma solução para isso?
CurtirCurtir
Boa noite Ivan, qual o gatilho colocou a formula? Caso seja no proprio movimento no momento que esta criando nao precisa usar a atividade de consulta sql basta acessar a table do campo complementar do proprio registro q esta incluindo. Creio que no seu caso esta ocorrendo erro porque o movimento ainda nao existe na base de dados, pois esta enserindo o movimento, assim a consulta sql retorna vazio.
CurtirCurtir
Obrigado pelo o retorno Renato,
Mas o problema estava em um campo que estava chamando na expressão para fazer o corpo do email. o campo era “rmsworkflow.codusuario” incrível que pareça no contexto MovMovimentoData este campo vai nulo, só retirei ele agora ta certo. Mas não consegui nenhum jeito de trazer o usuário que criou o movimento.
E a sentença foi necessária para trazer a informação do motivo que fica no complementar, pelo o motivo que este contexto do movimento também não traz informações do complementar.
Muito Obrigado pela ajuda, Ficarei sempre de olho nesse site para ajudar no que eu poder.
Abraços.
CurtirCurtir
Boa tarde Ivan, Você consegue acessar o usuário logado através do contexto (Context.CodUsuario). Esta classe context tem todo o contexto do sistema (coligada, usuário etc) e você acessa no mesmo local que acessa os dados do registro do gatilho.
Seja bem vindo ao blog!
CurtirCurtir
Boa tarde Renato,
Gostaria de criar uma fórmula visual que agrupasse os movimentos por valor, é possível?
Por exemplo:
Tenho 5 movimentos (1.1.xx) e todos com o mesmo item, porém, com valores diferentes. Por exemplo, 3 movimentos com o item saindo a R$160,00 e 2 movimentos a R$400,00. (Suponhamos que todos tenham quantidade = 1). Na hora de faturar esse movimento para o (1.2.xx) gostaria que no movimento criado ficasse o item repetido, mas agrupando por valor:
Quantidade: 3 Valor: 160,00
Quantidade 2 Valor: 400,00
Sei que o hoje o sistema agrupa somente por quantidade. É possível fazer isso por meio da FV?
Aguardo retorno.
Atenciosamente,
CurtirCurtir
Boa noite Lucas, creio q nao seja possivel via formula visual, temos outros meios de customizacao com tbc web service q seria possivel…
CurtirCurtir
Boa noite Renato,
E como funcionaria essa customização via tbc web service?
CurtirCurtir
Boa tarde Lucas, Na categoria TBC WebServices do blog possui todas as informações sobre a tecnologia.
CurtirCurtir
Galera, no meu funcionou!!!
A alteração que foi necessária foi na SQL, colocar (NOLOCK)
A estrutura da formula fiz simples, com as atividades consulta sql, Expression e o envio de email.
CurtirCurtir
Renato, boa tarde!
Na visão de Movimentos em Processos eu tenho um processo que é o de “Enviar E-mail para Cliente/Fornecedor”. Nele eu gostaria de deixar como default um e-mail no campo “Outros Destinatários” ou consistir a flag “Cópia de e-mail para o representante”.
Por exemplo:
Quando o meu usuário executar o processo quero consistir que ele marcou a flag supracitada, caso contrário, a FV dispara uma exceção.
Na 12 nós temos uma atividade que é a de “Preparar Execução do Processo” nela eu consigo selecionar o XML do log de execução de processos. Com isso obtenho a informação dos valores dos campos desse processo de envio de e-mail, por exemplo.
Agora vem a minha dúvida…É possível eu obter o valor desses campos através do XML e comparar na atividade de SE/SENÃO para que eu dispare a exceção? Se não, qual alternativa vc indicaria?
Att.
CurtirCurtir
Renato,
Consegui fazer a FV entrar na condição colocando desta maneira !this.rmsPrepareParamsProcActivity1.Tables[“Parametros”][“EnviarRepresentante”].AsBoolean.
Só que eu tenho um problema. A FV sempre entra nessa condição, independente se eu marcar a flag no processo.
Att.
CurtirCurtir
Boa noite Lucas, como vai? Estava de férias e voltando as atividades… Conseguiu resolver o problema que citou da fórmula visual? Me parece que não esta pegando os valores que esta citando, caso não tenha resolvido me retorne com mais detalhes para poder te ajudar.
CurtirCurtir
Boa tarde Renato !!
Quando emito NF ou Pedido de Vendas, preciso ir no cadastro dos produtos digitados e chegar se o campo NCM (NUMEROCCF) está preenchido.
Fiz uma fórmula visual :
1) Inseri “Para cada Iteração”, “Sequencia”;
2) dentro inseri um SQL para acessar o cadastro do produto e trazer o conteúdo do campo;
3) Inseri Se/Senão e gerar exceção
A fórmula funciona só para o primeiro produto da NF.
O que tenho que fazer para que ela valide todos os produtos da NF ?
Pelo que li bastava colocar a atividade Para cada Iteração que daria certo.
Estou quebrando a cabeça e não consigo achar a saída.
Será que vc pode me ajudar ??
Obrigada !!
CurtirCurtir
Boa noite Tânia, Acesse o Post ATIVIDADE PARA CADA ITERAÇÃO que explica como usar esta atividade. A diferença do exemplo do Post para sua formula é que ao invés de acessar a Tables [0] irá acessar a Tables[“TITMMOV”] diretamente.
CurtirCurtir
Como criar movimentos a partir de formulas visuais?
CurtirCurtir
Boa tarde Eliton, Existe a atividade de inclusão de movimento.
CurtirCurtir
Ok E como fazer? Existe algum tutorial?
CurtirCurtir
Bom dia Eliton, Possuo uma documentação de como usar as atividades de alteração do Movimento, mas o uso é bem similar da inclusão de movimento. Me passe um email que envio para você.
CurtirCurtir
Oi Renato, boa tarde!
Tudo bem?!
Estou desenvolvendo uma fórmula visual para incluir movimento e estou tendo dificuldade em utilizar as atividades “Inclusão Movimento”, “Inclusão item Movimento” , “Inclusão Rateio Ccu Item Movimento”, “Salvar Movimento”.
Não encontrei material na internet sobre essas atividades.
Seria possível nos enviar de exemplo uma Fórmula visual com essas atividades?
Atenciosamente;
Carlos Macêdo.
CurtirCurtir
Boa noite Carlos,
Segue o link do post onde possui um exemplo de alteração do movimento, o funcionamento da inclusão é o mesmo basta realizar uma analogia.
https://customizerm.com.br/2016/04/13/passo-a-passo-alteracao-de-movimento
Caso tenha dificuldades e queira realizar uma customização com a Customize RM estamos a disposição, assim neste caso iremos entender toda a sua necessidade, processo e iremos implementar a fórmula visual de acordo com suas necessidades bastando importá-la para o seu sistema!
CurtirCurtir
Boa tarde, utilizamos o educacional com o processo Copiar Turmas por período letivo, estamos utilizando a atividade Ler Parâmetros do Processo e conseguimos gerar a exceção com XML dos parâmetros do processo e alterar alguns campos desse XML por meio da expressão, porém o registro final criado após a cópia da turma não obedece o que alteramos no XML.
Como podemos realizar uma alteração no XML do processo e persistir após finalizar o processo?
CurtirCurtir
Boa tarde, utilizamos o educacional com o processo Copiar Turmas por período letivo, estamos utilizando a atividade Ler Parâmetros do Processo e conseguimos gerar a exceção com XML dos parâmetros do processo e alterar alguns campos desse XML por meio da expressão, porém o registro final criado após a cópia da turma não obedece o que alteramos no XML.
Como podemos realizar uma alteração no XML do processo e persistir após finalizar o processo?
CurtirCurtir
Boa tarde Wagner, Precisamos analisar a funcionalidade em questão mais a fundo. De acordo com o que informou parece que os parâmetros são carregados novamente desconsiderando os alterados pela formula visual. Neste caso acho que poderia pegar a turma que criou e usar as atividades de leitura de um dataserver (readrecord e saverecord) para realizar uma leitura da turma que criou após a execução do processo, carregar seus dados, alterar e salvar novamente.
Tente por este caminho e caso tenha dificuldades podemos conversar a respeito de uma consultoria para analisar o seu processo, a funcionalidade e as possíveis soluções mais a fundo.
Havendo interesse entre em contato! Obrigado!
CurtirCurtir
Caros, estou precisando configurar alguns valores default na action “MovEnviaEmailMovAction” (Enviar E-mail para Cliente/Fornecedor), preciso que as opções de envio para representante e Cli/For já apareçam marcadas no Wizard antes da execução do processo, alguém poderia me informar como faço?.
CurtirCurtir
Boa tarde Charles, Existe a atividade de leitura de parâmetros de um processo que pode preencher os dados e colocar no gatilho antes de executar o processo.
CurtirCurtir
Boa tarde, Renato… Justamento, existe, junto com ele há mais 3 atividades…
Sendo a:
– “Consultar Parâmetros do Processo” – rmsProcessParamsActivity
– “Ler Parâmetros do Processo” – rmsReadParamsProcActivity
– “Preparar Execução do Processo” – rmsPrepareParamsProcActivity
– “Executa Processo” – rmsProcessActivity
Bem, acredito que os dois últimos trabalhem em conjunto e sirvam apenas para execução de forma isolada, sem ir no processo na visão do movimento.
Então, os outros dois, consultar e ler, não consigo fazer a relação ou fazer com que ele se realmente modifique lá no wizard, lembrando que tento colocar o gatilho no próprio processo, onde há 4 opções, antes e depois de submeter e antes e depois da execução.
A atividade “rmsProcessParamsActivity” é a que me mostra todos os parâmetros assim que preencho qual processo a que ele se refere… acredito que seja essa atividade que irá “setar” os parâmetros, mas não consigo fazê-lo funcionar.
Onde será que estou errando, no gatilho?
CurtirCurtir
Boa tarde Charles,
Para exibir os dados no Wizard dos parâmetro vai depender muito de como foi implementado o preenchimento no Wizard. Caso não tenha nenhum valor default para este processo creio que não é tratado para exibir os dados através do preenchimento dos parâmetro, assim a classe de parâmetros é preenchida somente ao executar o processo.
Desta forma você conseguiria intervir nos valores que foram informados na tela (wizard) mas não conseguiria exibir no Wizard antes de executar pois a tela não esta lendo os valores do parâmetros antes da execução e sim somente ao executar o processo porque leva em conta que sempre será informado os valores do wizard.
CurtirCurtir
Estou tentando criar um fórmula visual que ao gerar um movimento de nfs do Educacional para o Nucleus, a fórmula executa uma consulta SQL que retorna o valor da bolsa do aluno e preenche um determinado campo no movimento, sendo um processo do Educacional para o Nucleus, estou usando o gatilho “Consulta valor no contexto do movimento”, pego o campo IDMOV pois uso ele como parâmetro na minha consulta SQL, porém, quando realizo o processo só obtenho essa mensagem de erro: Erro na execução da Atividade: ‘rmsConsSQLActivity1’ Erro: GetRuntimeValue failed since Path ‘Fields[“IDMOV”]’ evaluated to ‘null’ value.
CurtirCurtir
Bom dia Marcilio, tentar usar outro gatilho pois neste o valor do idmov ainda esta nulo. Um teste que você pode fazer é colocar um valor fixo para ver se sua consulta sql esta correta, caso retorne valor a suspeita que te passei fica forte.
CurtirCurtir
Na opção do processo de geração de movimento no Educacional, só tenho 4 gatilhos (Antes de submeter o processo, Após submeter o processo, Antes da execução e Após a execução), estou usando o gatilho Após a execução e minha primeira atividade da FV é Consulta o valor do contexto, está trazendo o valor corretamente, porém se eu colocar uma SQL logo em seguida com parâmetro lendo o retorno da minha primeira atividade não funciona. Teria alguma outra sugestão?
CurtirCurtir
Acesse o post feito do link abaixo que acho que irá te ajudar, nele explica como acessar um valor da consulta SQL executada, assim adapta para sua necessidade:
https://customizerm.com.br/2015/03/22/atividade-consulta-sql/
CurtirCurtir
Renato, meu problema não é acessar o valor da consulta, é como pegar o IDMOV durante o processo de geração de movimento do Educacional para o Nucleus para passar no parâmetro da minha consulta, sendo que a atividade “Consulta Valor do Contexto” pega o idmov, consigo ver quando coloco uma expressão e uma exceção, mas se coloco uma consulta sql não funciona, vou ir tentando outras possibilidades, obrigado pela ajuda.
CurtirCurtir
Fala Lucas, primeiramente parabéns pelo Blog! Muita informações útil !
Se puder me dar uma dica de como eu consigo receber/faturar um movimento 1.1.xx para 1.2.xx usando a atividade FATURAMENTO MOVIMENTO. Neste caso, não possui um campo obrigatório que é NATUREZA (nem para o item nem para o movimento) como também campos da tabela CODFB1FLX etc.. Consegue me dar uma dica ?
Obrigado!
CurtirCurtir
Boa noite! Neste caso não tem como pois o tipo de movimento consisti estes campos obrigatório. Você pode configurar valores default no movimento de destino
CurtirCurtir