Processo automático 97 - Atualização Cotação Moeda Banco Central
Executa um procedimento que usa a regra cadastrada na tela F070EFN, campo Código da regra para atualização da cotação. Sendo assim, é necessário ter uma regra ligada para que a rotina funcione, conforme exemplo de regra abaixo.
É necessário configurar, dentro do ERP, mais especificamente no Editor de Web services, o web service do Banco Central chamado BancoCentral.FachadaWSSGS, porta getValoresSeriesXML.
Para mais informações sobre esse web service, deve-se entrar em contato com o banco.
Parâmetros da rotina
| Nome | Descrição |
|---|---|
| CODSMO | Série da moeda de acordo com o cadastro feito na tela F031SMO. |
Observação
É necessário que a série da moeda registrada na tela F031SMO esteja associada à moeda que será atualizada automaticamente no campo Série Moeda da tela F031AIM.
Parâmetros da regra
A regra utiliza os seguintes parâmetros:
| Nome | Descrição |
|---|---|
| Entrada | |
| FinDDatIni | Data inicial que buscará a cotação. |
| FinDDatFim | Data final que buscará a cotação. |
| FinACodMoe | Código da moeda. |
| FinNIdeSmo | Identificador único da série da moeda. |
| FinNCodSmo | Código da série da moeda. |
| CODSMO | Série da moeda de acordo com o cadastro feito na tela F031SMO. |
| Saída | |
| FinAMsgRet | Mensagem de retorno do web service. |
Exemplo de regra
Definir BancoCentral.FachadaWSSGS.getValoresSeriesXML getCotacao;
Definir Alfa eCodMoe;
Definir Alfa aXml;
Definir Alfa aResto;
Definir Alfa aMsg;
Definir Alfa aDescri;
Definir Alfa aCampoSeparado;
Definir Alfa aSerieSeparada;
Definir Alfa aCampo;
Definir Alfa aCodMoe;
Definir Alfa aAux;
Definir Alfa aDatIni;
Definir Alfa aDatFim;
Definir Alfa aDatMoe;
Definir Alfa aVlrCot;
Definir Alfa aTag1;
Definir Alfa aTag2;
Definir Alfa aTag3;
Definir Alfa aTag4;
Definir Funcao SeparaCamposXml();
Definir Funcao SeparaSerie();
Definir Cursor Cur_E031MOE;
Definir Cursor Cur_E031SMO;
Definir Data dDatMoe;
Definir Alfa aFaultString;
Definir Alfa aEnter;
Definir Alfa aMsg;
Definir Alfa aMsgRetorno;
Definir Data FinDDatIni;
Definir Data FinDDatFim;
Definir Numero FinNIdeSmo;
Definir Numero FinNCodSmo;
Definir Alfa aCodSmo;
Definir Alfa aIdeUni;
Definir Alfa aMoeda;
Definir Alfa FinAMsgRet;
Definir Alfa FinACodMoe;
nErro = 0;
RetornaAscii(13,aEnter);
ConverteMascara(3,FinDDatIni,aDatIni,"DD/MM/YYYY");
ConverteMascara(3,FinDDatFim,aDatFim,"DD/MM/YYYY");
aXml = "";
aResto = aDescri;
IntParaAlfa(FinNIdeSmo, aIdeUni);
IntParaAlfa(FinNCodSmo, aCodSmo);
@Chamada WS Cotação@
PosicaoAlfa(aCodMoe,",",nTemSerie);
Se (FinNIdeSmo = 0)
Inicio
@-Passa Serie como parâmetro de acordo com a entrada-@
getCotacao.in0.CriarLinha();
getCotacao.in0.Item = aCodSmo;
Fim;
Senao
Inicio
@-Busca a série da moeda de acordo com o Identificador-@
Cur_E031SMO.SQL"SELECT CodSmo FROM E031smo WHERE IDEUNI= :aIdeUni";
Cur_E031SMO.AbrirCursor();
Se (Cur_E031SMO.Achou)
Inicio
getCotacao.in0.CriarLinha();
intParaAlfa(Cur_E031SMO.CodSmo, aCodSmo);
getCotacao.in0.Item = aCodSmo;
fim;
Cur_E031SMO.FecharCursor();
Fim;
getCotacao.in1 = aDatIni;
getCotacao.in2 = aDatFim;
getCotacao.Executar();
aFaultString = getCotacao.faultstring;
EstaNulo(aFaultString,nNulo);
Se(nNulo = 0)
Inicio
aMsg = aMsg + "Erro ao atualizar cotação. Favor verificar se as moedas informadas estão devidamente vinculadas com as séries, "+
"e se as séries e período são válidos para consulta junto a Bovespa (Moedas ERP x Banco Central (\"Cadastros/Personalizadas). ERRO ORIGINAL DO WEBSERIVCE: "+ aFaultString + aEnter + aEnter;
FinAMsgRet = aMsg;
Cancel(1);
Fim;
aXml = getCotacao.getValoresSeriesXmlReturn;
PosicaoAlfa("<l>",aXml,nPos);
DeletarAlfa(aXml,1,nPos);
aTag1 = "<SERIE ID=";
aTag2 = "</SERIE>";
aTag3 = "<ITEM>";
aTag4 = "</ITEM>";
Enquanto (aXml <> " ")
Inicio
SeparaSerie();
SeparaCamposXml();
aMsg = "Cotação da moeda " + ACODMOE + " atualizada com sucesso!" + aEnter + aEnter;
Se (aXml = "")
Pare;
Fim;
FinAMsgRet = aMsg;
Funcao SeparaSerie();
Inicio
aSerieSeparada = aXml;
PosicaoAlfa(aTag1,aSerieSeparada,nPos);
TamanhoAlfa(aTag1,nTam);
PosicaoAlfa(aTag2,aSerieSeparada,nPos2);
TamanhoAlfa(aTag2,nTam);
CopiarAlfa(aSerieSeparada,nPos,nPos2 + nTam);
TamanhoAlfa(aSerieSeparada,nTam);
TamanhoAlfa(aTag2,nTam2);
DeletarAlfa(aXml,1,nTam +1 + nTam2);
Fim;
Funcao SeparaCamposXml();
Inicio
aCampoSeparado = aSerieSeparada;
PosicaoAlfa("<ITEM>",aCampoSeparado,nTemItem);
Enquanto(nTemItem > 0)
Inicio
PosicaoAlfa(aTag3,aCampoSeparado,nPos);
nPos--;
DeletarAlfa(aCampoSeparado,1,nPos);
TamanhoAlfa(aTag3, nPos);
deletarAlfa(aCampoSeparado,1,nPos);
aAux = aCampoSeparado;
PosicaoAlfa(aTag4,aCampoSeparado,nPos);
nPos--;
CopiarAlfa(aCampoSeparado,1,nPos);
aDatMoe = aCampoSeparado;
LimpaEspacos(aCampoSeparado);
LimpaEspacos(aDatMoe);
PosicaoAlfa("<DATA>",aDatMoe,nPos1);
PosicaoAlfa("</DATA>",aDatMoe,nPos2);
CopiarAlfa(aDatMoe,nPos1+6,nPos2 -7);
DeletarAlfa(aCampoSeparado,1,nPos2 + 7);
aVlrCot = aCampoSeparado;
LimpaEspacos(aVlrCot);
PosicaoAlfa("<VALOR>",aVlrCot,nPos1);
PosicaoAlfa("</VALOR>",aVlrCot,nPos2);
CopiarAlfa(aVlrCot,nPos1+7,nPos2 - 8);
TrocaString(aVlrCot,".", ",", aVlrCot);
AlfaParaData(aDatMoe,dDatMoe);
AlfaParaDecimal(aVlrCot,nVlrCot);
Se (FinNIdeSmo = 0)
Inicio
Cur_E031MOE.SQL"SELECT E031MOE.CODMOE FROM E031SMO, E031MOE WHERE E031SMO.CodSmo = :aCodSmo and E031MOE.IdeSmo = E031smo.IdeUni";
Cur_E031MOE.AbrirCursor();
Enquanto (Cur_E031MOE.Achou)
Inicio
aCodMoe = Cur_E031MOE.CODMOE;
ExecSqlEx("INSERT INTO E031IMO (CODMOE,DATMOE,VLRCOT) VALUES (:aCodMoe,:DDATMOE,:NVLRCOT)",nErro,aMsgRetorno);
Cur_E031MOE.Proximo();
Fim;
Cur_E031MOE.FecharCursor();
Fim;
Senao
Inicio
aCodMoe = FinACodMoe;
ExecSqlEx("INSERT INTO E031IMO (CODMOE,DATMOE,VLRCOT) VALUES (:aCodMoe,:DDATMOE,:NVLRCOT)",nErro,aMsgRetorno);
Fim;
PosicaoAlfa("</ITEM>",aAux,nPos);
DeletarAlfa(aAux,1,nPos + 7);
aCampoSeparado = aAux;
PosicaoAlfa("<ITEM>",aCampoSeparado,nTemItem);
Fim;
Fim;
Cancel(1);
English
Español
English
Español


