Identificador de Regra
CPR-420OCPAO01
Módulo: CPR - Compras.
Finalidade: Disponibilizar um ponto onde possam ser feitos processamentos específicos após operações realizadas sobre uma ordem de compra (E420OCP).
O identificador é chamado ao:
- incluir, alterar ou excluir os dados gerais de uma ordem de compra;
- fechar uma ordem de compra;
- incluir, alterar ou excluir um item de produto na ordem de compra;
Para a regra são passados todos os campos dos dados gerais antigos da ordem de compra (E420OCP), ou seja, dados de antes da realização da operação. Tais dados servem, principalmente, para verificar as mudanças ocorridas nos dados gerais.
Características: OBS.01: Sempre que a regra for executada com o VSEstado = "INSERINDO" os valores dos campos serão os atuais e não os antigos. Sempre que a regra for executada com o VSEstado = "ALTERANDO" ou "EXCLUINDO" ou "FECHANDO" os valores passados representam os valores anteriores da ordem de compra. Exemplo: Se o usuário alterar uma determinada quantidade de 10 para 5, a variável estará disponível na regra com valor 10. Importante: Quando o identificador de regras for chamado com VSEstado = "FECHANDO" as variáveis podem estar nulas em se tratando de uma inserção atual. Exemplo: Ao gerar uma OC via solicitação ou via cotação forçando o fechamento.
OBS.02: Estes dados são passados através de variáveis que seguem a nomenclatura "VS" +
OBS. 03: É disponibilizada a variável "VSEstado" que indica a operação sendo realizada e pode assumir os seguintes valores:
- "INSERINDO": Indica que os dados gerais da ordem de compra estão sendo inseridos;
- "ALTERANDO": Indica que os dados gerais da ordem de compra estão sendo alterados, ou, estão sendo inclusos, alterados ou excluídos itens de produto na ordem de compra;
- "EXCLUINDO": Indica que a ordem de compra está sendo excluída;
- "FECHANDO": Indica que a ordem de compra está sendo fechada;
OBS.04: Este identificador é chamado antes da comitação das operações no base de dados, logo qualquer erro que ocorra na regra cancelará a operação.
OBS.05: Reforçamos aos clientes que as telas individual e agrupada funcionam de forma distinta, onde a agrupada tem a característica de trabalhar em memória e os dados só estarão na base (disponível para acesso via cursor) após o processamento da tela ("botão processar"). Isso é importante pois o identificador em questão é executado em diversas rotinas e nas diferentes modalidades: inclusão, alteração, fechamento e exclusão. Uma regra pode ser aplicada de forma satisfatória em uma tela gerada (tela individual no caso da OC) e não obter os mesmos resultados quando se tratar de uma tela manual (tela agrupada no caso da OC).
OBS.06: Comportamento "Processar" e "Fechar" na F420GOC: Ao clicar em processar o sistema chamará o identificador de regras passando se "Inserindo" ou "Alterando". No clique fechar o sistema sempre executará o processamento antecipadamente (ou seja, gravará as informações na base), por este motivo o identificador de regras faz a execução "duplicada". Na primeira chamada o sistema indicará "Inserindo ou Alterando" (representando o processamento) e na segunda chamada o "Fechamento" propriamente dito.
Tela: F420OCP, F420GOC, F420OSC, F420OPE, F420OPS, F420PEN, F420TSO, F160REP, F161FCV, F211ARO, F420OVC, F435CCT, F214ARO, F422CGO
Transação: Não se aplica.
Regra:
Definir Alfa VSEstado;
Definir Numero VSCodEmp;
Definir Numero VSCodFil;
Definir Numero VSNumOcp;
Definir Numero VSSitOcp;
Definir Alfa VSTnsPro;
Definir Alfa VSTnsSer;
Definir Numero VSVlrFin;
Definir Alfa ENTER;
CaracterParaAlfa(10, ENTER);
Definir Alfa vCodEmpStr;
Definir Alfa vCodFilStr;
Definir Alfa vNumOcpStr;
Definir Alfa vMsg;
Definir Alfa vStrAux1;
Definir Alfa vStrAux2;
IntParaAlfa(VSCodEmp, vCodEmpStr);
IntParaAlfa(VSCodFil, vCodFilStr);
IntParaAlfa(VSNumOcp, vNumOcpStr);
se (VSEstado = "INSERINDO")
vMsg = "Ordem de compra " + vNumOcpStr + " criada para a empresa " + vCodEmpStr + ", filial " + vCodFilStr + "!";
senao
se (VSEstado = "ALTERANDO")
vMsg = "Ordem de compra " + vNumOcpStr + " alterada na empresa " + vCodEmpStr + ", filial " + vCodFilStr + "!";
senao
se (VSEstado = "EXCLUINDO")
vMsg = "Ordem de compra " + vNumOcpStr + " excluída da empresa " + vCodEmpStr + ", filial " + vCodFilStr + "!";
senao
se (VSEstado = "FECHANDO")
vMsg = "Ordem de compra " + vNumOcpStr + " fechada na empresa " + vCodEmpStr + ", filial " + vCodFilStr + "!";
se (VSEstado <> "EXCLUINDO") {
vMsg = vMsg + ENTER +
"Valores antigos X novos:" + ENTER;
Definir Cursor xCur420OCP;
xCur420OCP.SQL "SELECT SITOCP, TNSPRO, TNSSER, VLRLIQ
FROM E420OCP
WHERE
CODEMP = :VSCodEmp AND
CODFIL = :VSCodFil AND
NUMOCP = :VSNumOcp";
xCur420OCP.AbrirCursor();
IntParaStr(VSSitOcp, vStrAux1);
IntParaStr(xCur420OCP.SitOcp, vStrAux2);
vMsg = vMsg + "SitOcp: " + vStrAux1 + " - " + vStrAux2 + ENTER;
vMsg = vMsg + "TnsPro: " + VSTnsPro + " - " + xCur420OCP.TnsPro + ENTER;
vMsg = vMsg + "TnsSer: " + VSTnsSer + " - " + xCur420OCP.TnsSer + ENTER;
IntParaStr(VSVlrLiq, vStrAux1);
IntParaStr(xCur420OCP.VlrLiq, vStrAux2);
vMsg = vMsg + "VlrFin: " + vStrAux1 + " - " + vStrAux2;
xCur420OCP.FecharCursor();
}
Mensagem(Retorna, vMsg);
Variáveis Disponibilizadas:
Nome | Tipo | Observações | Retorna Valor |
---|---|---|---|
VSEstado | ALFA | Indicativo da operação sendo realizada sobre a ordem de compra ("INSERINDO", "ALTERANDO", "EXCLUINDO" ou "FECHANDO") | N |
VSCodEmp | NÚMERO | Código da empresa (chave da ordem de compra) | N |
VSCodFil | NÚMERO | Código da filial (chave da ordem de compra) | N |
VSNumOcp | NÚMERO | Número da ordem de compra (chave da ordem de compra) | N |
Atenção
Caso o parâmetro global LisVarReg esteja habilitado, a variável ListaVariaveis estará disponível em todos os identificadores de regras do sistema. O conteúdo desta variável lista os campos disponibilizados no identificador de regras em questão.
Não é aconselhada a ativação desse parâmetro global para o uso cotidiano. Esse recurso de listagem dos campos de identificadores auxilia a construção de regras e o Suporte para, por exemplo, depuração ou quando não houver acesso à documentação dos identificadores de regras.