Cotação de compras / e-Procurement
Informamos que esta tela será descontinuada em breve e não está mais acessível através do menu do sistema. Para os clientes que utilizam estas rotinas, disponibilizamos uma Feature Toggle que permite o acesso da tela temporariamente, até a sua desativação completa. Caso haja necessidade de ativação da Feature Toggle, entre em contato com o nosso suporte.
A cotação de compras consiste em realizar uma tomada de preços e condições de fornecimento de produtos e serviços com os fornecedores. Normalmente, em uma cotação são convidados dois ou mais fornecedores para então realizar a escolha da melhor cotação.
O processo de cotação é iniciado na Senior X, que está integrada à solução de e-Procurement da Nimbi.
Fluxo de integração
Escopo de integração
A integração nativa contempla apenas a funcionalidade de RFQ (Request for Quotation), na qual as necessidades de compras na senior X se transformam em itens de RFQ no e-Procurement.
Através do e-Procurement é possível cadastrar novos fornecedores ou atualizar o cadastro dos existentes.
Não existe integração automática dos fornecedores do ERP para o e-Procurement, pois, os próprios fornecedores precisam se cadastrar no portal.
As demais funcionalidades disponíveis no e-Procurement podem ser utilizadas sem integração com o ERP, porém, é importante destacar que as suas ações não irão refletir no ERP. Portanto, é responsabilidade do usuário a inserção das informações manualmente no ERP.
Pré-requisitos e configurações
- Ter o módulo de e-Procurement contratado;
- Cadastrar uma nova aplicação de terceiros na Senior X. Essa aplicação será utilizada para realizar a integração entre a Senior X e o e-Procurement, ou seja, para fazer o login na Senior X;
Acesse o menu Tecnologia > Administração > Gerenciamento de aplicações e adicione uma nova aplicação. Preencha o campo Nome, para identificar que é uma integração com o sistema de e-Procurement (ex: integracao-eprocurement) e adicione uma breve Descrição da aplicação. Ex: Integração com sistema de e-Procurement.
Após o cadastro da aplicação, vá em Ações e, na opção ''Gerenciar chaves'', clique em Gerar Chave e copie a chave de acesso (acessKey) e senha (secret), porque serão necessárias no preenchimento dos templates abaixo.
- Relacionar a aplicação criada ao papel ADMIN. O papel associado a aplicação necessita permissão e abrangência nos serviços erp_sup / cot_cotacao e erp_sup / pco_pedidocompra;
- Preencha os templates de configurações iniciais (clique nos links para baixá-los) e envie para o e-mail: senior@nimbi.com.br.
Importante
Ao preencher a coluna Ambiente para configuração, na guia Configurações Gerais, observe que existem duas opções disponíveis: uma para ambiente de testes e outra para produção/ambiente real, além do Tenant Name e suas respectivas Access Key e dos respectivos tenants.
Caso existir um ambiente de homologação e outro de produção, é necessário informar uma linha para cada ambiente.
Se o tenant na Senior X for de homologação, a opção AC (testes) deverá se escolhida informando o tenant name e suas respectivas access key e secret. Já caso o tenant for de produção, é necessário escolher a opção PRD (ambiente real) informando o tenant name e suas respectivas access key e secret.
Observação
O prazo para retorno das configurações iniciais é de 5 dias úteis.
Após receber o retorno que os ambientes foram criados pelo parceiro de e-Procurement, é possível dar continuidade nos processos abaixo. Por isso, obtenha o ClientAPI_ID e ClientAPI_Key que serão necessários na integração e para fazer o login no sistema parceiro e-Procurement.
Como obter essas informações?
Depois, para ambos os ambientes, vá em Configurações > Configurações gerais > Configurações avançadas no e-Procurement. Após isso, acesse Tecnologia > Customização > Regras > Nova customização e configure as customizações abaixo:
A customização criarCotacao é utilizada ao enviar a necessidade de compra para cotação.
- Utilize o filtro para encontrar a customização erp_sup / cot_cotacao / criarCotacao e clique em Selecionar.
- Preencha os campos do cadastro da seguinte forma:
- Primitiva: criarCotação
- Protocolo: Rest
- URL:
- Ambiente de pratique / testes: https://api01-sb.nimbi.net.br/API/rest/Partner/v1/RFQ
- Ambiente de homologação / testes: https://api01-ac.nimbi.net.br/API/rest/Partner/v1/RFQ
- Ambiente de produção / real: https://api001.nimbi.com.br/API/rest/Partner/v1/RFQ
- Método: Interceptar
Observação
Esse é o endereço da API em que o Portal e-Procurement recebe a cotação da seniorX.
- No cabeçalho padrão, selecione as opções Tenant, User, Timeout e Token.
- No cabeçalho customizado, insira as chaves ClientAPI_ID e ClientAPI_Key para os respectivos ambientes.
Observação
Essas chaves identificam o cliente no Portal e-Procurement.
- Clique em Salvar para concluir o cadastro.
A customização pedidoCompraAprovado é utilizada para avisar o Portal e-Procurement que o pedido de compra foi aprovado.
- Utilize o filtro para encontrar a customização erp_sup / pco_pedidocompra / pedidoCompraAprovado e clique em Selecionar.
- Preencha os campos do cadastro da seguinte forma:
- Primitiva: pedidoCompraAprovado
- Protocolo: Rest
- URL:
- Ambiente de homologação / testes: https://api01-ac.nimbi.net.br/API/rest/Partner/v1/PurchaseOrder/Approve
- Ambiente de produção / real: https://api001.nimbi.com.br/API/rest/Partner/v1/PurchaseOrder/Approve
Observação
Esse é o endereço da API em que o Portal e-Procurement recebe a aprovação do pedido do senior X.
- Método: Evento
- No cabeçalho padrão, selecione as opções Tenant, User, Timeout e Token.
- No cabeçalho customizado, insira as chaves ClientAPI_ID e ClientAPI_Key para os respectivos ambientes.
Observação
Essas chaves identificam o cliente no Portal e-Procurement.
- Clique em Salvar para concluir o cadastro.
A customização pedidoCompraCancelado é utilizada para avisar o Portal e-Procurement que o pedido de compra não foi aprovado.
- Utilize o filtro para encontrar a customização erp_sup / pco_pedidocompra / pedidoCompraCancelado e clique em Selecionar.
- Preencha os campos do cadastro da seguinte forma:
- Primitiva: pedidoCompraCancelado
- Protocolo: Rest
- URL:
- Ambiente de homologação / testes: https://api01-ac.nimbi.net.br/API/rest/Partner/v1/PurchaseOrder/Cancel
- Ambiente de produção / real: https://api001.nimbi.com.br/API/rest/Partner/v1/PurchaseOrder/Cancel
Observação
Esse é o endereço da API em que o Portal e-Procurement recebe a não aprovação do pedido da seniorX.
- Método: Evento
- No cabeçalho padrão, selecione as opções Tenant, User, Timeout e Token.
- No cabeçalho customizado, insira as chaves ClientAPI_ID e ClientAPI_Key para os respectivos ambientes.
Observação
Essas chaves identificam o cliente no Portal e-Procurement.
- Clique em Salvar para concluir o cadastro.
A customização pedidoCompraRejeitado é utilizada para avisar o Portal e-Procurement que o pedido de compra não foi criado, por algum erro ou consistência de negócio.
- Utilize o filtro para encontrar a customização erp_sup / pco_pedidocompra / pedidoCompraRejeitado e clique em Selecionar.
- Preencha os campos do cadastro da seguinte forma:
- Primitiva: pedidoCompraRejeitado
- Protocolo: Rest
- URL:
- Ambiente de homologação / testes: https://api01-ac.nimbi.net.br/API/rest/Partner/v1/PurchaseOrder/Return
- Ambiente de produção / real: https://api001.nimbi.com.br/API/rest/Partner/v1/PurchaseOrder/Return
Observação
Esse é o endereço da API em que o Portal e-Procurement recebe a informação de que o pedido não foi gerado no senior X.
- Método: Evento
- No cabeçalho padrão, selecione as opções Tenant, User, Timeout e Token.
- No cabeçalho customizado, insira as chaves ClientAPI_ID e ClientAPI_Key para os respectivos ambientes.
Observação
Essas chaves identificam o cliente no Portal e-Procurement.
- Clique em Salvar para concluir o cadastro.
Para monitorar as customizações cadastradas, acesse Tecnologia > Customização > Regras > Funcionalidades (API). Neste local será possível consultar a quantidade de chamadas, de sucessos e de falhas, facilitando a identificação de erros.
Processo
Através do módulo de certificação de fornecedores, é possível convidar empresas que já estão cadastradas no e-Procurement para se conectarem à rede ou convidar as que ainda não estão para que se cadastrem. Além disso, também é possível disponibilizar um link de autocadastro. Para isso, no e-Procurement, acesse o Configurações > Tema > Apelido da Empresa (definir um nome para o link) > Publicar ao final da página. Será gerado o link de acesso ao lado do campo Apelido da Empresa.
Para obter mais detalhes, veja as orientações completas.
Para os cadastros de novos fornecedores ou para atualização de cadastros já existentes no ERP, é possível realizar a consulta a base do e-Procurement através de uma regra, na qual será necessário cadastrá-la em um processo agendado.
Definir Alfa aHTTPObterFornecedores;
HttpObjeto(aHTTPObterFornecedores);
HttpAlteraCodifCaracPadrao(aHTTPObterFornecedores, "utf-8");
Definir Alfa aURLBase;
Definir Alfa aURL;
Definir Alfa aLimit;
Definir Numero nOffset;
Definir Alfa aOffset;
Definir Numero nCodEmp_Padrao_Definicoes;
Definir Alfa aCodCpg_Padrao_Definicoes;
Definir Alfa aEmail_Padrao_Vazio;
Definir Alfa aTelefone_Padrao_Vazio;
Definir Alfa aVendedor_Padrao_Vazio;
nOffset = 0;
/* Parâmetros */
aLimit = "50"; @ Limite de registros por página @
aOffset = "0"; @ Índice da página @
aCodCpg_Padrao_Definicoes = "001"; @ Condição de Pagamento Padrão para Definições do Fornecedor: Á vista @
nCodEmp_Padrao_Definicoes = 0; @ Empresa Padrão para Definições do Fornecedor (Se 0 serão cadastradas definições para todas as empresas) @
HttpAlteraCabecalhoRequisicao(aHTTPObterFornecedores, "ClientAPI_ID", ""); @substituir "value" pela chave fornecida pela Nimbi@
HttpAlteraCabecalhoRequisicao(aHTTPObterFornecedores, "ClientAPI_Key", ""); @substituir "value" pela chave fornecida pela Nimbi@
aURLBase = "https://api001.nimbi.com.br/API/rest"; @substituir "api001" para "api01-ac" quando for ambiente de homologação@
/* Valores padrão */
aEmail_Padrao_Vazio = ""; /* Informar valor padrão para Email quando não informado no Nimbi caso necessário. Exemplo: importacaonimbi@importacaonimbi.com */
aTelefone_Padrao_Vazio = ""; /* Informar valor padrão para Telefone quando não informado no Nimbi caso necessário. Exemplo: (99) 99999-9999 */
aVendedor_Padrao_Vazio = ""; /* Informar valor padrão para o nome do Vendedor quando não informado no Nimbi caso necessário. Exemplo: "IMPORTACAO NIMBI - SEM VENDEDOR CADASTRADO" */
/* Monta a data atual para filtrar os fornecedores alterados/cadastrados no dia */
Definir Data dDataHoje;
Definir Numero nDia;
Definir Numero nMes;
Definir Numero nAno;
DataHoje(dDataHoje);
DecodData(dDataHoje, nDia, nMes, nAno);
Definir Alfa aParamDataInicial;
Definir Alfa aParamDataFinal;
Definir Alfa aDia;
Definir Alfa aMes;
Definir Alfa aAno;
IntParaAlfa(nDia, aDia);
IntParaAlfa(nMes, aMes);
IntParaAlfa(nAno, aAno);
aParamDataInicial = aAno + "-" + aMes + "-" + aDia;
aParamDataFinal = aParamDataInicial;
/* Obtém os fornecedores cadastrados/alterados no dia, e que estão com situação Aprovado */
aURL = aURLBase + "/certifica/v1/connections?Limit=" + aLimit + "&Offset=" + aOffset + "&FilterStatus=Approved&FilterStartDate=" + aParamDataInicial + "&FilterEndDate=" + aParamDataFinal; @&Sort=company_updated_date@ @Approved&@
Definir alfa aRetorno;
HttpGet(aHTTPObterFornecedores, aURL, aRetorno);
Definir Numero nListaFornecedores;
ListaRegraCriarLista(nListaFornecedores);
Definir Numero nPosListRecords;
definir alfa aMensagemErro;
Se ((aRetorno <> "") e (aRetorno <> "{}"))
Inicio
PosicaoAlfa("listRecords\":[{", aRetorno, nPosListRecords);
Enquanto (nPosListRecords > 0) @ Enquanto houver lista de registros @
Inicio
ListaRegraCarregarJson(nListaFornecedores, aRetorno, "listRecords", "taxNumber;countryCode;updatedDate");
nOffset = nOffset + 1; @ Incrementa para pegar a próxima página @
IntParaAlfa(nOffset, aOffset);
aURL = aURLBase + "/certifica/v1/connections?Limit=" + aLimit + "&Offset=" + aOffset + "&FilterStatus=Approved&FilterStartDate=" + aParamDataInicial + "&FilterEndDate=" + aParamDataFinal; @Sort=company_updated_date&@ @Approved&@
HttpGet(aHTTPObterFornecedores, aURL, aRetorno);
PosicaoAlfa("listRecords\":[{", aRetorno, nPosListRecords);
Fim;
Definir Alfa aExecutou;
Definir Alfa taxNumber;
Definir Alfa countryCode;
Definir Alfa aObteve;
Definir Alfa companyName;
Definir Alfa tradeName;
Definir Alfa stateRegistration;
Definir Alfa municipalRegistration;
Definir Alfa address;
Definir Alfa complement;
Definir Alfa neighborhood;
Definir Alfa zipCode;
Definir Alfa cityName;
Definir Alfa stateCode;
Definir Numero nPosContacts;
Definir Alfa ddi;
Definir Alfa ddd;
Definir Alfa phoneNumber;
Definir Alfa telefone;
Definir Numero nulo;
Definir Alfa email_fornecedor;
Definir Alfa updatedDate;
Definir Alfa updatedHour;
Definir Data dDataAtualizacao;
Definir Numero nHoraAtualizacao;
Definir Data dDatAtu;
Definir Alfa aHora;
Definir Alfa aMinuto;
Definir Alfa aEmail_cadastrado;
Definir Alfa aTelefone_cadastrado;
Definir Alfa aVendedor_cadastrado;
Definir Alfa aFoneVendedor_cadastrado;
ListaRegraPrimeiro(nListaFornecedores, aExecutou);
Enquanto (aExecutou = "S")
Inicio
ListaRegraObterValorAlfa(nListaFornecedores, "taxNumber", taxNumber, aObteve);
ListaRegraObterValorAlfa(nListaFornecedores, "countryCode", countryCode, aObteve);
ListaRegraObterValorAlfa(nListaFornecedores, "updatedDate", updatedDate, aObteve);
@Extrair DATA Atualização@
PosicaoAlfa("T",updatedDate, nPos);
TamanhoAlfa(updatedDate, nTam);
updatedHour = updatedDate;
CopiarAlfa(updatedDate, 1, nPos-1);
aAno = updatedDate;
aMes = updatedDate;
aDia = updatedDate;
CopiarAlfa(aAno, 1, 4);
CopiarAlfa(aMes, 6, 2);
CopiarAlfa(aDia, 9, 2);
AlfaParaInt(aAno,nAno);
AlfaParaInt(aMes,nMes);
AlfaParaInt(aDia,nDia);
MontaData(nDia, nMes, nAno, dDataAtualizacao);
@Extrair HORA Atualização@
CopiarAlfa(updatedHour, nPos+1, nTam);
PosicaoAlfa(":",updatedHour, nPos);
aHora = updatedHour;
aMinuto = updatedHour;
CopiarAlfa(aHora, nPos-3, 2);
CopiarAlfa(aMinuto, nPos+1, 2);
AlfaParaInt(aHora,nHorAtu);
AlfaParaInt(aMinuto, nMinuto);
nHorAtu = HoraParaMinuto(nHorAtu, nMinuto);
Definir Numero nTaxNumber;
definir numero nCodFor;
AlfaParaInt(taxNumber, nTaxNumber);
Definir Cursor CUR_E095FOR;
CUR_E095FOR.SQL "SELECT \
CODFOR, DATATU, INTNET, \
FONFOR, NOMVEN, FONVEN \
FROM E095FOR \
WHERE CGCCPF = :nTaxNumber";
CUR_E095FOR.AbrirCursor();
Se (CUR_E095FOR.Achou) {
nCodFor = CUR_E095FOR.CodFor;
dDatAtu = CUR_E095FOR.DATATU;
aEmail_cadastrado = CUR_E095FOR.INTNET;
aTelefone_cadastrado = CUR_E095FOR.FONFOR;
aVendedor_cadastrado = CUR_E095FOR.NOMVEN;
aFoneVendedor_cadastrado = CUR_E095FOR.FONVEN;
}
senao {
dDatAtu = 0;
nCodFor = 0;
aEmail_cadastrado = "";
aTelefone_cadastrado = "";
aVendedor_cadastrado = "";
aFoneVendedor_cadastrado = "";
}
CUR_E095FOR.FecharCursor();
@Verifica Se Data de Atualização e Diferente a Existente no Fornecedore@
Se(dDatAtu <= dDataAtualizacao) @Executa a Atualização@
Inicio
aURL = aURLBase + "/Companies/v1/" + taxNumber + "/" + countryCode;
HttpGet(aHTTPObterFornecedores, aURL, aRetorno);
ValorElementoJson(aRetorno, "company", "companyName", companyName);
ValorElementoJson(aRetorno, "company", "tradeName", tradeName);
ValorElementoJson(aRetorno, "company", "stateRegistration", stateRegistration);
ValorElementoJson(aRetorno, "company", "municipalRegistration", municipalRegistration);
ValorElementoJson(aRetorno, "company;address", "address", address);
ValorElementoJson(aRetorno, "company;address", "complement", complement);
ValorElementoJson(aRetorno, "company;address", "neighborhood", neighborhood);
ValorElementoJson(aRetorno, "company;address", "zipCode", zipCode);
ValorElementoJson(aRetorno, "company;address", "cityName", cityName);
ValorElementoJson(aRetorno, "company;address", "stateCode", stateCode);
aURL = aURLBase + "/Companies/v1/" + taxNumber + "/" + countryCode + "/Contacts?offset=0&limit=1&sort=name";
HttpGet(aHTTPObterFornecedores, aURL, aRetorno);
ValorElementoJson(aRetorno, "contacts", "ddi", ddi);
ValorElementoJson(aRetorno, "contacts", "ddd", ddd);
ValorElementoJson(aRetorno, "contacts", "phoneNumber", phoneNumber);
telefone = ddi + ddd + phoneNumber;
ValorElementoJson(aRetorno, "contacts", "email", email_fornecedor);
PosicaoAlfa("***",email_fornecedor, nPosStr);
Se (nPosStr > 0)
email_fornecedor = "";
PosicaoAlfa("***",telefone, nPosStr);
Se (nPosStr > 0)
telefone = "";
Definir Alfa id;
aURL = aURLBase + "/Companies/v1/" + taxNumber + "/" + countryCode + "/commercialRepresentatives?offset=0&limit=1&sort=name";
HttpGet(aHTTPObterFornecedores, aURL, aRetorno);
ValorElementoJson(aRetorno, "commercialRepresentatives", "id", id);
Definir Alfa name;
Definir Alfa surname;
Definir Alfa countryCode_vendedor;
Definir Alfa areaCode;
Definir Alfa nomeVendedor;
Definir Alfa phoneVendedor;
name = "";
surname = "";
countryCode_vendedor = "";
areaCode = "";
nomeVendedor = "";
phoneVendedor = "";
EstaNulo(id, nulo);
Se (nulo <> 1)
Inicio
aURL = aURLBase + "/Companies/v1/" + taxNumber + "/" + countryCode + "/commercialRepresentatives/" + id;
HttpGet(aHTTPObterFornecedores, aURL, aRetorno);
ValorElementoJson(aRetorno, "commercialRepresentative", "name", name);
ValorElementoJson(aRetorno, "commercialRepresentative", "surname", surname);
ValorElementoJson(aRetorno, "phone", "countryCode", countryCode_vendedor);
ValorElementoJson(aRetorno, "phone", "areaCode", areaCode);
ValorElementoJson(aRetorno, "phone", "phoneNumber", phoneNumber);
nomeVendedor = name + surname;
phoneVendedor = countryCode_vendedor + areaCode + phoneNumber;
PosicaoAlfa("***",phoneVendedor, nPosStr);
Se (nPosStr > 0)
phoneVendedor = "";
Fim;
Definir interno.com.senior.g5.co.ger.cad.fornecedores.GravarFornecedores_5 wsFornecedores;
wsFornecedores.dadosGeraisFornecedor.CriarLinha();
wsFornecedores.dadosGeraisFornecedor.CodFor = nCodFor;
wsFornecedores.dadosGeraisFornecedor.nomFor = companyName;
EstaNulo(tradeName, nulo);
Se (nulo <>1)
wsFornecedores.dadosGeraisFornecedor.apeFor = tradeName;
Senao
wsFornecedores.dadosGeraisFornecedor.apeFor = companyName;
Definir Alfa ehCNPJ;
Definir Numero nCEP;
CNPJValido(taxNumber, ehCNPJ);
Se (ehCNPJ = "S")
wsFornecedores.dadosGeraisFornecedor.tipFor = "J";
Senao
wsFornecedores.dadosGeraisFornecedor.tipFor = "F";
EstaNulo(stateRegistration, nulo);
Se (nulo <> 1)
wsFornecedores.dadosGeraisFornecedor.insEst = stateRegistration;
Senao
wsFornecedores.dadosGeraisFornecedor.insEst = "ISENTO";
wsFornecedores.dadosGeraisFornecedor.TipMer = "I";
wsFornecedores.dadosGeraisFornecedor.insMun = municipalRegistration;
wsFornecedores.dadosGeraisFornecedor.cgcCpf = taxNumber;
wsFornecedores.dadosGeraisFornecedor.endFor = address;
wsFornecedores.dadosGeraisFornecedor.cplEnd = complement;
wsFornecedores.dadosGeraisFornecedor.baiFor = neighborhood;
wsFornecedores.dadosGeraisFornecedor.zipCod = zipCode;
wsFornecedores.dadosGeraisFornecedor.nenFor = "S/N";
DeixaNumeros(zipCode);
AlfaParaDecimal(zipCode, nCEP);
wsFornecedores.dadosGeraisFornecedor.cepFor = nCEP;
wsFornecedores.dadosGeraisFornecedor.cidFor = cityName;
wsFornecedores.dadosGeraisFornecedor.sigUfs = stateCode;
EstaNulo(email_fornecedor, nulo);
Se (nulo <> 1)
wsFornecedores.dadosGeraisFornecedor.intNet = email_fornecedor;
senao {
EstaNulo(aEmail_cadastrado, nulo);
se (nulo <> 1)
wsFornecedores.dadosGeraisFornecedor.intNet = aEmail_cadastrado;
senao
wsFornecedores.dadosGeraisFornecedor.intNet = aEmail_Padrao_Vazio;
}
EstaNulo(telefone, nulo);
Se (nulo <> 1)
wsFornecedores.dadosGeraisFornecedor.fonfor = telefone;
senao {
EstaNulo(aTelefone_cadastrado, nulo);
se (nulo <> 1)
wsFornecedores.dadosGeraisFornecedor.fonfor = aTelefone_cadastrado;
senao
wsFornecedores.dadosGeraisFornecedor.fonfor = aTelefone_Padrao_Vazio;
}
EstaNulo(phonevendedor, nulo);
Se (nulo <> 1)
wsFornecedores.dadosGeraisFornecedor.fonven = phonevendedor;
senao {
EstaNulo(aFoneVendedor_cadastrado, nulo);
se (nulo <> 1)
wsFornecedores.dadosGeraisFornecedor.fonven = aFoneVendedor_cadastrado;
senao
wsFornecedores.dadosGeraisFornecedor.fonven = aTelefone_Padrao_Vazio;
}
EstaNulo(nomeVendedor, nulo);
Se (nulo <> 1)
wsFornecedores.dadosGeraisFornecedor.nomVen = nomeVendedor;
senao {
EstaNulo(aVendedor_cadastrado, nulo);
se (nulo <> 1)
wsFornecedores.dadosGeraisFornecedor.nomVen = aVendedor_cadastrado;
senao
wsFornecedores.dadosGeraisFornecedor.nomVen = aVendedor_Padrao_Vazio;
}
wsFornecedores.dadosGeraisFornecedor.sitFor = "A";
Definir Cursor CUR_E070FIL;
se (nCodEmp_Padrao_Definicoes > 0)
CUR_E070FIL.SQL "SELECT CODEMP, CODFIL \
FROM E070FIL \
WHERE CODEMP = :nCodEmp_Padrao_Definicoes";
senao
CUR_E070FIL.SQL "SELECT CODEMP, CODFIL \
FROM E070FIL ";
CUR_E070FIL.AbrirCursor();
Enquanto (CUR_E070FIL.Achou)
Inicio
wsFornecedores.dadosGeraisFornecedor.definicoesFornecedor.CriarLinha();
wsFornecedores.dadosGeraisFornecedor.definicoesFornecedor.CodEmp = CUR_E070FIL.CodEmp;
wsFornecedores.dadosGeraisFornecedor.definicoesFornecedor.CodFil = CUR_E070FIL.CodFil;
wsFornecedores.dadosGeraisFornecedor.definicoesFornecedor.CodCpg = aCodCpg_Padrao_Definicoes;
wsFornecedores.dadosGeraisFornecedor.definicoesFornecedor.IndInd = "N";
CUR_E070FIL.Proximo();
Fim;
wsFornecedores.ModoExecucao = 1;
wsFornecedores.Executar();
Definir Numero tipoRetorno;
Definir Alfa mensagemRetorno;
tipoRetorno = wsFornecedores.tipoRetorno;
mensagemRetorno = wsFornecedores.mensagemRetorno;
Se (tipoRetorno <>1)
aMensagemErro = aMensagemErro + "CNPJ: " + TaxNumber + " ERRO: " + mensagemRetorno;
Definir Numero nQtdLinhasRetorno;
Definir Numero i;
Definir Alfa retornoFornecedor;
nQtdLinhasRetorno = wsFornecedores.retornosFornecedores.QtdLinhas;
Para (i = 0; i < nQtdLinhasRetorno; i++)
Inicio
retornoFornecedor = wsFornecedores.retornosFornecedores.retorno;
Se (retornoFornecedor <> "OK")
aMensagemErro = aMensagemErro + "CNPJ: " + TaxNumber + " ERRO: " + retornoFornecedor;
Fim;
Fim; @ Fim da instrução "Se(dDatAtu <= dDataAtualizacao)" @
ListaRegraProximo(nListaFornecedores, aExecutou);
Fim; @ Fim da instrução "Enquanto (aExecutou = "S")" @
EstaNulo(aMensagemErro, nulo);
Se (nulo <> 1)
GeraLog(aMensagemErro);
Fim; @ Fim da instrução "Se ((aRetorno <> "") e (aRetorno <> "{}"))" @
|
Sugerimos que a regra seja revisada e adequada antes de colocá-la em produção, pois cada empresa pode ter uma realidade diferente. Após a configuração inicial do e-Procurement, caso sejam necessário ajustes, basta acessar o menu de configurações do sistema.
As cotações de compras são originadas de necessidades de compras. Ao selecionar as necessidades de compras na Senior X e enviá-las para cotação, será gerada no Portal e-Procurement uma RFQ – Request For a Quotation.
No Portal e-Procurement são adicionados os participantes (fornecedores) da cotação. Além disso, é possível incluir anexos ou observações para os fornecedores.
Ao enviar a cotação, os fornecedores são notificados e podem aceitar ou recusar a participação no processo de cotação. Caso aceitem, definem um valor para o produto e quantidade solicitada, fornecem as informações de frete e o vencimento da proposta que realizaram e enviam o retorno para o cliente.
Pelo Portal e-Procurement, o comprador acompanha todos os processos de cotação e ao final do período de tomada de preços, ou a qualquer tempo, avalia as informações recebidas pelos fornecedores. Por meio do mapa comparativo, avalia os preços e condições de cada fornecedor e premia a melhor cotação.
Ao premiar uma cotação, será gerado o pedido de compra no Portal e-Procurement e na Senior X e após a confirmação do pedido (fechamento e aprovação, quando aplicável), a Senior X envia as informações para o Portal e-Procurement, que notificará o fornecedor.
O processo de cotação de compras é efetuado no Portal e-Procurement, conforme as orientações abaixo.
Para realizar o processo de cotação de compras como comprador, siga os passos abaixo:
- Ao cotar uma necessidade de compras é criada uma RFQ (Request for Quotation) no Portal e-Procurement;
- Para dar andamento na cotação, acesse Gestão Empresarial | ERP > Suprimentos > Gestão de Compras > Cotação de Preço, e você será direcionado para o sistema do Portal e-Procurement;
- Nas RFQs criadas serão apresentadas as necessidades de compras enviadas para cotação, sendo agrupadas pela empresa, filial e data da cotação. Além disso, também é indicado o usuário que criou a RFQ e que ela foi gerada pela Senior X;
- Ao selecionar a RFQ desejada, é possível complementar suas informações, adicionando, por exemplo, o endereço de faturamento, cronograma e outras informações;
- Informe quais serão os participantes (fornecedores) da cotação;
- Envie a RFQ para os fornecedores participantes.
Quando o fornecedor recebe uma solicitação de participação em uma cotação, pode aceitá-la ou recusá-la. Caso decida aceitar a participação, ele envia para o cliente os valores referentes ao produto e quantidades que constam na cotação, para que o cliente escolha qual negociação terá mais benefício.
Para responder a cotação recebida como fornecedor, realize os seguintes passos:
- Nas RFx recebidas, selecione a RFQ desejada e aceite ou recuse participar da cotação;
- Em caso de aceitação, informe o preço unitário de cada item e qual o prazo de entrega;
- Salve as alterações e envie as informações para o cliente solicitante.
Após receber as informações enviadas pelo fornecedor, é possível compará-las para saber qual negociação tem mais benefício. Para isso:
- Selecione a RFQ desejada, que foi retornada pelos participantes. Sua situação estará como Em andamento;
- Acesse o Mapa comparativo e serão apresentadas as informações enviadas por cada fornecedor que participou da RFQ;
- Dentre os retornos recebidos, selecione a cotação que deseja utilizar e premie o item, indicando que foi a cotação escolhida;
- Após premiar um item, será gerado o pedido no Portal e-Procurement.
Após a criação do pedido no Portal e-Procurement, é necessário enviá-lo para a Senior X, seguindo os passos abaixo:
- Selecione o pedido desejado;
- Confira se os dados da necessidade estão corretos e realize o seu envio;
- No acompanhamento serão apresentados dois registros: um referente à criação do pedido e o outro referente ao envio do pedido para a Senior X;
- Caso ocorra algum erro ao criar o pedido de compra, será adicionado um comentário com os motivos do erro;
- É apresentado um novo registro no acompanhamento, sendo possível enviar novamente o pedido;
- Quando o pedido é criado com sucesso na Senior X, é integrado com o ERP (Gestão Empresarial | ERP), e pode ser consultado na tela Pedidos de Compra.
Observação
Apenas podem ser selecionadas necessidades da mesma empresa.
Aprovação
A aprovação do pedido é feita no Gestão Empresarial | ERP. Ele é integrado ao Portal e-Procurement, apresentando o resultado no acompanhamento do pedido.
Cancelamento
O cancelamento do pedido, assim como sua aprovação, é feita no ERP. Ele é integrado ao Portal e-Procurement, apresentando o resultado no acompanhamento do pedido.
O cancelamento de ordens de compra geradas via senior X tem um comportamento diferente do habitual no ERP. Neste caso, a necessidade de compra sempre será liberada para um novo uso. Se você quiser fazer o cancelamento total do processo de compra, será necessário cancelar a necessidade de compra também no senior X.
English
Español
English
Español


