Identificador de Regra
INT-000MEOC003
Finalidade: é executado através do processo automático, e seu objetivo é permitir algum ajuste ou validação após a inserção da ordem de compra vinda do Mercado Eletrônico.
Módulo: INT - Integrações.
Transação: Não se aplica.
Regra:
Explicação da regra: A regra verifica alguns atributos de itens utilizados no Mercado Eletrônico (Fabricante, DescontoCotacao e zDescontoValor) e os grava em seus respectivos campos no ERP. Também sinaliza ao final que todas as ordens de compra geradas no Mercado Eletrônico devem ser fechadas automaticamente se possível.
Definir Numero IntNCodEmp;
Definir Numero IntNCodfil;
Definir Numero IntNNumOcp;
Definir Alfa IntAXML;
Definir Numero IntNLisAtributosCabecalho;
Definir Numero IntNLisAtributosItens;
S_N = "N";
aRecebeValor = "";
nRecebeValor = 0;
Definir alfa xMarca;
Definir numero xDescontoCotacao;
Definir numero xDescontoContrato;
Definir cursor cE420IPO;
Definir cursor cE420ISO;
Definir numero nAux;
Definir Alfa xItem;
Definir alfa xStrAux;
xTotalDescontoNota = 0;
/* Utilização de atributos dos itens*/
cE420IPO.Sql"SELECT E420IPO.SEQIPO, E420IPO.QTDPED \
FROM E420IPO \
WHERE E420IPO.CODEMP = :IntNCodEmp \
AND E420IPO.CODFIL = :IntNCodFil \
AND E420IPO.NUMOCP = :IntNNumOcp";
cE420IPO.AbrirCursor();
Enquanto(cE420IPO.Achou){
ListaRegraPrimeiro(IntNLisAtributosItens, S_N); @Posiciona no primeiro registro da lista {Colunas(ProdutoServico | Item | Campo | Valor)} @
Se (S_N = "S"){
S_N = "N";
enquanto (S_N <> "S") { @Lista Preenchida / recebeu atributos@
ListaRegraObterValorAlfa(IntNLisAtributosItens, "ProdutoServico", aRecebeValor, S_N); @Verifica se a linha é de um item de produto.@
Se ((S_N <> "N") e (aRecebeValor = "P")) {
ListaRegraObterValorNumero(IntNLisAtributosItens, "Item", nRecebeValor, S_N); @Verifica se a linha é do item de produto atual.@
Se ((S_N <> "N") e (nRecebeValor = cE420IPO.SeqIpo)) {
aRecebeValor = "";
intParaAlfa(cE420IPO.SeqIpo, xItem);
ListaRegraObterValorAlfa(IntNLisAtributosItens, "Campo", aRecebeValor, S_N); @Verifica o campo que estamos selecionados.@
Se (S_N <> "N"){
Se (aRecebeValor = "Fabricante"){
ListaRegraObterValorAlfa(IntNLisAtributosItens, "Valor", aRecebeValor, S_N); @Obtém o valor da coluna da linha posicionada.@
Se (S_N <> "N") {
EstaNulo(aRecebeValor,nAux);
Se (nAux = 0){
xMarca = aRecebeValor;
}
}
} Senao Se (aRecebeValor = "DescontoCotacao"){
ListaRegraObterValorAlfa(IntNLisAtributosItens, "Valor", aRecebeValor, S_N); @Obtém o valor da coluna da linha posicionada.@
Se (S_N <> "N") {
EstaNulo(aRecebeValor,nAux);
Se (nAux = 0){
AlfaParaDecimal(aRecebeValor, nrecebeValor);
xDescontoCotacao = nRecebeValor;
}
}
} Senao Se (aRecebeValor = "zDescontoValor"){
ListaRegraObterValorAlfa(IntNLisAtributosItens, "Valor", aRecebeValor, S_N); @Obtém o valor da coluna da linha posicionada.@
Se (S_N <> "N") {
EstaNulo(aRecebeValor,nAux);
Se (nAux = 0){
SubstAlfa(".", ",", aRecebeValor);
AlfaParaDecimal(aRecebeValor, nrecebeValor);
xDescontoContrato = nRecebeValor;
}
}
}
}
}
}
ListaRegraProximo(IntNLisAtributosItens, S_N); @Posiciona no próximo registro@
ListaRegraFim(IntNLisAtributosItens, S_N); @Atualiza variável final de lista@
}
}
SeqItem = cE420IPO.SeqIpo;
Usu_ValorDesconto = xDescontoCotacao;
Usu_ValorDescontoTotal = cE420IPO.QtdPed * Usu_ValorDesconto;
Se (Usu_ValorDesconto = 0){
Usu_ValorDesconto = xDescontoContrato;
Usu_ValorDescontoTotal = cE420IPO.QtdPed * Usu_ValorDesconto;
}
xTotalDescontoNota = xTotalDescontoNota + Usu_ValorDescontoTotal;
ExecSQL "UPDATE E420IPO \
SET USU_VLRDSC = :Usu_ValorDescontoTotal, \
USU_VLRDUN = :Usu_ValorDesconto, \
USU_MARFOR = :xMarca \
WHERE CODEMP = :IntNCodEmp \
AND CODFIL = :IntNCodFil \
AND NUMOCP = :IntNNumOcp \
AND SEQIPO = :SeqItem";
xMarca = "";
xDescontoContrato = 0;
xDescontoCotacao = 0;
cE420IPO.Proximo();
}
cE420IPO.FecharCursor();
cE420ISO.Sql"SELECT E420ISO.SEQISO, E420ISO.QTDPED \
FROM E420ISO \
WHERE E420ISO.CODEMP = :IntNCodEmp \
AND E420ISO.CODFIL = :IntNCodFil \
AND E420ISO.NUMOCP = :IntNNumOcp";
cE420ISO.AbrirCursor();
Enquanto(cE420ISO.Achou){
ListaRegraPrimeiro(IntNLisAtributosItens, S_N); @Posiciona no primeiro registro da lista {Colunas(ProdutoServico | Item | Campo | Valor)} @
Se (S_N = "S"){
S_N = "N";
enquanto (S_N <> "S") { @Lista Preenchida / recebeu atributos@
ListaRegraObterValorAlfa(IntNLisAtributosItens, "ProdutoServico", aRecebeValor, S_N); @Verifica se a linha é de um item de produto.@
Se ((S_N <> "N") e (aRecebeValor = "S")) {
ListaRegraObterValorNumero(IntNLisAtributosItens, "Item", nRecebeValor, S_N); @Verifica se a linha é do item de produto atual.@
Se ((S_N <> "N") e (nRecebeValor = cE420ISO.SeqIso)) {
aRecebeValor = "";
intParaAlfa(cE420ISO.SeqIso, xItem);
ListaRegraObterValorAlfa(IntNLisAtributosItens, "Campo", aRecebeValor, S_N); @Verifica o campo que estamos selecionados.@
Se (S_N <> "N"){
Se (aRecebeValor = "Fabricante"){
ListaRegraObterValorAlfa(IntNLisAtributosItens, "Valor", aRecebeValor, S_N); @Obtém o valor da coluna da linha posicionada.@
Se (S_N <> "N") {
EstaNulo(aRecebeValor,nAux);
Se (nAux = 0){
xMarca = aRecebeValor;
}
}
} Senao Se (aRecebeValor = "DescontoCotacao"){
ListaRegraObterValorAlfa(IntNLisAtributosItens, "Valor", aRecebeValor, S_N); @Obtém o valor da coluna da linha posicionada.@
Se (S_N <> "N") {
EstaNulo(aRecebeValor,nAux);
Se (nAux = 0){
AlfaParaDecimal(aRecebeValor, nrecebeValor);
xDescontoCotacao = nRecebeValor;
}
}
} Senao Se (aRecebeValor = "zDescontoValor"){
ListaRegraObterValorAlfa(IntNLisAtributosItens, "Valor", aRecebeValor, S_N); @Obtém o valor da coluna da linha posicionada.@
Se (S_N <> "N") {
EstaNulo(aRecebeValor,nAux);
Se (nAux = 0){
SubstAlfa(".", ",", aRecebeValor);
AlfaParaDecimal(aRecebeValor, nrecebeValor);
xDescontoContrato = nRecebeValor;
}
}
}
}
}
}
ListaRegraProximo(IntNLisAtributosItens, S_N); @Posiciona no próximo registro@
ListaRegraFim(IntNLisAtributosItens, S_N); @Atualiza variável final de lista@
}
}
SeqItem = cE420ISO.SeqIso;
Usu_ValorDesconto = xDescontoCotacao;
Usu_ValorDescontoTotal = cE420ISO.QtdPed * Usu_ValorDesconto;
Se (Usu_ValorDesconto = 0){
Usu_ValorDesconto = xDescontoContrato;
Usu_ValorDescontoTotal = cE420ISO.QtdPed * Usu_ValorDesconto;
}
xTotalDescontoNota = xTotalDescontoNota + Usu_ValorDescontoTotal;
ExecSQL "UPDATE E420ISO \
SET USU_VLRDSC = :Usu_ValorDescontoTotal, \
USU_VLRDUN = :Usu_ValorDesconto \
WHERE CODEMP = :IntNCodEmp \
AND CODFIL = :IntNCodFil \
AND NUMOCP = :IntNNumOcp \
AND SEQISO = :SeqItem";
xMarca = "";
xDescontoContrato = 0;
xDescontoCotacao = 0;
cE420ISO.Proximo();
}
cE420ISO.FecharCursor();
IntAFechamentoAutomatico = 'S'; @Sinaliza que o fechamento dessa OC deve ser feito automáticamente@
|
Variáveis Disponibilizadas:
| Campo | Tipo | Descrição | Retorna Valor |
|---|---|---|---|
| IntNCodEmp | NÚMERO | Código da Empresa | N |
| IntNCodFil | NÚMERO | Código da filial | N |
| IntNNumOcp | NÚMERO | Número da ordem de compra | N |
| IntAFechamentoAutomatico | ALFA | Seta o fechamento automático da ordem de compra Sim = ‘S’, caso contrário não realiza o fechamento | S |
| IntAXML | ALFA | XML completo recebido do Mercado Eletrônico | N |
| IntNLisAtributosCabecalho | NÚMERO | Lista com os atributos do pré-pedido recebidos do Mercado Eletrônico | N |
| IntNLisAtributosItens | NÚMERO | Lista com os atributos dos itens do pré-pedido recebidos do Mercado Eletrônico | 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.
English
Español
English
Español


