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 o web service https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/sgsAjuda.jsp#SA no Editor de Web services.
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);