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.

Este artigo ajudou você?