Esta versão do sistema foi descontinuada e não recebe atualizações e novas implementações. Acesse a documentação da versão 5.10.3 aqui
Ajuda por telas > Recursos > Processos Automáticos > Cadastro > Processos automáticos disponíveis > 97-Atualização Cotação Moeda Banco Central

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); 		

Este artigo ajudou você?