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.