Atualização Automática de Moedas No Protheus - Smart Siga
Atualização Automática de Moedas No Protheus - Smart Siga
Sabe aquelas automações que facilitam a vida dos colaboradores da empresa, e ainda agregam valor ao nosso
trabalho?
O nosso post de hoje, é exatamente sobre um desses tipos de automação. Iremos demonstrar como fazer uma
customização para atualização automática de moedas no Protheus.
Algumas rotinas dos módulos de Comércio Exterior (SIGAEIC – SIGAEEC – SIGAECO – SIGAEDC – SIGAEFF) do
Protheus, e até mesmo do Faturamento e do Financeiro, necessitam ter a moeda do sistema atualizada, para a
correta execução de algumas rotinas.
Essa customização poderá ser colocada em um JOB, pode-se criar um botão na tela de Cadastro de Moedas (se
tiver PE disponível para tanto), ou em qualquer rotina que desejar.
O WebService (WS) de cotações de moedas do Banco Central, disponibiliza vários métodos, nos quais é possível
recuperar os valores da moeda na data atual, recuperar valores em um determinado período de datas, recuperar
cotações de várias moedas ao mesmo tempo em um período determinado, etc.
Na nossa customização, iremos utilizar o método “getUltimoValorXML”, o qual iremos passar o código da moeda
que desejamos, e o mesmo irá nos retornar a cotação mais atual, no formato XML.
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 1/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
A primeira coisa que precisamos fazer, é construir o WsClient. Essa tarefa é muito fácil de fazer, já que, pelo próprio
ToTvs Developer Studio (TDS), informamos a URL do WSDL, e o TDS faz o “trabalho pesado”, criando todo o fonte
necessário para uso do WS.
Caso não saiba como consumir um WSDL para criação de um WsClient no TDS, basta conferir o nosso post,
ensinando passo a passo, tal procedimento. Para tanto, clique aqui (https://www.smartsiga.com.br/gerar-
webservice-client-no-tds/).
Após o TDS criar o WsClient para atualização automática de moedas no Protheus, teremos um fonte com a
seguinte estrutura:
1. #INCLUDE "PROTHEUS.CH"
2. #INCLUDE "APWEBSRV.CH"
3.
4. /*
=======================================================================
========
5. WSDL Location
https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/FachadaWSSGS.wsdl
6. Gerado em 12/27/17 14:28:34
7. Observações Código-Fonte gerado por ADVPL WSDL Client 1.120703
8. Alterações neste arquivo podem causar funcionamento
incorreto
9. e serão perdidas caso o código-fonte seja gerado
novamente.
10. =======================================================================
======== */
11.
12. User Function _EWGQNCN ; Return // "dummy" function - Internal Use
13.
14. /* --------------------------------------------------------------------
-----------
15. WSDL Service WSFachadaWSSGSService
16. -----------------------------------------------------------------------
-------- */
17.
18. WSCLIENT WSFachadaWSSGSService
19.
20. WSMETHOD NEW
21. WSMETHOD INIT
22. WSMETHOD RESET
23. WSMETHOD CLONE
24. WSMETHOD getValoresSeriesVO
25. WSMETHOD getUltimosValoresSerieVO
26. WSMETHOD getValoresSeriesXML
27. WSMETHOD getUltimoValorVO
28. WSMETHOD getUltimoValorXML
29. WSMETHOD getValor
30. WSMETHOD getValorEspecial
31.
32. WSDATA _URL AS String
33. WSDATA _CERT AS String
34. WSDATA _PRIVKEY AS String
35. WSDATA _PASSPHRASE AS String
36. WSDATA _HEADOUT AS Array of String
37. WSDATA _COOKIES AS Array of String
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 2/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 4/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 5/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
175.
176. END WSMETHOD
177.
178. oXmlRet := NIL
179. Return .T.
180.
181. // WSDL Method getUltimoValorVO of Service WSFachadaWSSGSService
182.
183. WSMETHOD getUltimoValorVO WSSEND nin0 WSRECEIVE
oWSgetUltimoValorVOReturn WSCLIENT WSFachadaWSSGSService
184. Local cSoap := "" , oXmlRet
185.
186. BEGIN WSMETHOD
187.
188. cSoap += '<q1:getUltimoValorVO
xmlns:q1="http://www.w3.org/2001/XMLSchema">'
189. cSoap += WSSoapValue("in0", ::nin0, nin0 , "long", .T. , .T. , 0 , NIL,
.F.,.F.)
190. cSoap += "</q1:getUltimoValorVO>"
191.
192. oXmlRet := SvcSoapCall( Self,cSoap,;
193. "",;
194. "RPCX","https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS",,,;
195. "https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS")
196.
197. ::Init()
198. ::oWSgetUltimoValorVOReturn:SoapRecv( WSAdvValue(
oXmlRet,"_GETULTIMOVALORVORETURN","WSSerieVO",NIL,NIL,NIL,"O",NIL,NIL)
)
199.
200. END WSMETHOD
201.
202. oXmlRet := NIL
203. Return .T.
204.
205. // WSDL Method getUltimoValorXML of Service WSFachadaWSSGSService
206.
207. WSMETHOD getUltimoValorXML WSSEND nin0 WSRECEIVE
cgetUltimoValorXMLReturn WSCLIENT WSFachadaWSSGSService
208. Local cSoap := "" , oXmlRet
209.
210. BEGIN WSMETHOD
211.
212. cSoap += '<q1:getUltimoValorXML
xmlns:q1="http://www.w3.org/2001/XMLSchema">'
213. cSoap += WSSoapValue("in0", ::nin0, nin0 , "long", .T. , .T. , 0 , NIL,
.F.,.F.)
214. cSoap += "</q1:getUltimoValorXML>"
215.
216. oXmlRet := SvcSoapCall( Self,cSoap,;
217. "",;
218. "RPCX","https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS",,,;
219. "https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS")
220.
221. ::Init()
222. ::cgetUltimoValorXMLReturn := WSAdvValue(
oXmlRet,"_GETULTIMOVALORXMLRETURN","string",NIL,NIL,NIL,"S",NIL,NIL)
223.
224. END WSMETHOD
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 6/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
225.
226. oXmlRet := NIL
227. Return .T.
228.
229. // WSDL Method getValor of Service WSFachadaWSSGSService
230.
231. WSMETHOD getValor WSSEND nin0,cin1 WSRECEIVE ngetValorReturn WSCLIENT
WSFachadaWSSGSService
232. Local cSoap := "" , oXmlRet
233.
234. BEGIN WSMETHOD
235.
236. cSoap += '<q1:getValor
xmlns:q1="http://publico.ws.casosdeuso.sgs.pec.bcb.gov.br">'
237. cSoap += WSSoapValue("in0", ::nin0, nin0 , "long", .T. , .T. , 0 , NIL,
.F.,.F.)
238. cSoap += WSSoapValue("in1", ::cin1, cin1 , "string", .T. , .T. , 0 ,
NIL, .F.,.F.)
239. cSoap += "</q1:getValor>"
240.
241. oXmlRet := SvcSoapCall( Self,cSoap,;
242. "",;
243. "RPCX","https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS",,,;
244. "https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS")
245.
246. ::Init()
247. ::ngetValorReturn := WSAdvValue(
oXmlRet,"_GETVALORRETURN","decimal",NIL,NIL,NIL,"N",NIL,NIL)
248.
249. END WSMETHOD
250.
251. oXmlRet := NIL
252. Return .T.
253.
254. // WSDL Method getValorEspecial of Service WSFachadaWSSGSService
255.
256. WSMETHOD getValorEspecial WSSEND nin0,cin1,cin2 WSRECEIVE
ngetValorEspecialReturn WSCLIENT WSFachadaWSSGSService
257. Local cSoap := "" , oXmlRet
258.
259. BEGIN WSMETHOD
260.
261. cSoap += '<q1:getValorEspecial
xmlns:q1="http://publico.ws.casosdeuso.sgs.pec.bcb.gov.br">'
262. cSoap += WSSoapValue("in0", ::nin0, nin0 , "long", .T. , .T. , 0 , NIL,
.F.,.F.)
263. cSoap += WSSoapValue("in1", ::cin1, cin1 , "string", .T. , .T. , 0 ,
NIL, .F.,.F.)
264. cSoap += WSSoapValue("in2", ::cin2, cin2 , "string", .T. , .T. , 0 ,
NIL, .F.,.F.)
265. cSoap += "</q1:getValorEspecial>"
266.
267. oXmlRet := SvcSoapCall( Self,cSoap,;
268. "",;
269. "RPCX","https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS",,,;
270. "https://www3.bcb.gov.br/wssgs/services/FachadaWSSGS")
271.
272. ::Init()
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 7/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 8/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
326.
327. WSMETHOD CLONE WSCLIENT FachadaWSSGSService_ArrayOffWSSerieVO
328. Local oClone := FachadaWSSGSService_ArrayOffWSSerieVO():NEW()
329. oClone:oWSWSSerieVO := NIL
330. If ::oWSWSSerieVO <> NIL
331. oClone:oWSWSSerieVO := {}
332. aEval( ::oWSWSSerieVO , { |x| aadd( oClone:oWSWSSerieVO , x:Clone()
) } )
333. Endif
334. Return oClone
335.
336. WSMETHOD SOAPRECV WSSEND oResponse WSCLIENT
FachadaWSSGSService_ArrayOffWSSerieVO
337. Local nRElem1 , nTElem1
338. Local aNodes1 := WSRPCGetNode(oResponse,.T.)
339. ::Init()
340. If oResponse = NIL ; Return ; Endif
341. nTElem1 := len(aNodes1)
342. For nRElem1 := 1 to nTElem1
343. If !WSIsNilNode( aNodes1[nRElem1] )
344. aadd(::oWSWSSerieVO , FachadaWSSGSService_WSSerieVO():New() )
345. ::oWSWSSerieVO[len(::oWSWSSerieVO)]:SoapRecv(aNodes1[nRElem1])
346. Endif
347. Next
348. Return
349.
350. // WSDL Data Structure WSSerieVO
351.
352. WSSTRUCT FachadaWSSGSService_WSSerieVO
353. WSDATA nanoFim AS int OPTIONAL
354. WSDATA nanoInicio AS int OPTIONAL
355. WSDATA caviso AS string OPTIONAL
356. WSDATA ndiaFim AS int OPTIONAL
357. WSDATA ndiaInicio AS int OPTIONAL
358. WSDATA lespecial AS boolean OPTIONAL
359. WSDATA cfonte AS string OPTIONAL
360. WSDATA cfullName AS string OPTIONAL
361. WSDATA cgestorProprietario AS string OPTIONAL
362. WSDATA nmesFim AS int OPTIONAL
363. WSDATA nmesInicio AS int OPTIONAL
364. WSDATA cnomeAbreviado AS string OPTIONAL
365. WSDATA cnomeCompleto AS string OPTIONAL
366. WSDATA noid AS long OPTIONAL
367. WSDATA cperiodicidade AS string OPTIONAL
368. WSDATA cperiodicidadeSigla AS string OPTIONAL
369. WSDATA lpossuiBloqueios AS boolean OPTIONAL
370. WSDATA lpublica AS boolean OPTIONAL
371. WSDATA cshortName AS string OPTIONAL
372. WSDATA oWSultimoValor AS
FachadaWSSGSService_WSValorSerieVO OPTIONAL
373. WSDATA cunidadePadrao AS string OPTIONAL
374. WSDATA cunidadePadraoIngles AS string OPTIONAL
375. WSDATA lvalorDiaNaoUtil AS boolean OPTIONAL
376. WSDATA oWSvalores AS
FachadaWSSGSService_ArrayOf_tns2_WSValorSerieVO OPTIONAL
377. WSMETHOD NEW
378. WSMETHOD INIT
379. WSMETHOD CLONE
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 9/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 10/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 12/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
Antes de construirmos o fonte que irá consumir o WsClient gerado pelo TDS, e atualizar a tabela de Cadastro de
Moedas do Protheus, abaixo vamos listar os códigos da moedas suas respectivas descrições e o tipo de operação
(venda e/ou compra).
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 13/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
1 Dólar (venda)
Agora que já temos os códigos das moedas com suas respectivas operações, podemos construir nosso fonte.
No nosso exemplo, iremos utilizar o código 10813, que é relativo a moeda Dólar, para operação de compra.
Abaixo segue o código fonte, o qual instanciámos o objeto referente ao WsClient, que irá consumir o WS do Banco
Central e efetuar atualização automática de moedas no Protheus:
1. #Include 'Protheus.ch'
2.
3. User Function CotacaoMoedas()
4.
5. //Variaveis Locais
6. Local oCotacaoMoedas := Nil
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 14/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
No nosso código em questão, estamos utilizando a atualização da Tabela SM2 (Moedas do Sistema). Dependendo
do módulo utilizado, faz-se necessário a atualização de outras tabelas. O conceito para atualizar as outras tabelas,
é o mesmo do fonte acima.
Para realizar o download dos fontes utilizados para realizar a atualização automática de moedas no Protheus, e
verificar o endereço do WS de cotações de moedas do Banco Central, basta acessar abaixo, a nossa seção
“Anexos”.
Como podemos verificar nesse post, a atualização automática de moedas no Protheus, é muito simples de fazer,
porém agrega muito valor ao trabalho do analista.
Caso ainda não tenham se inscrito no Canal Smart Siga, ou em nossas mídias sociais, aproveitem para se
cadastrar agora, pois assim, vocês recebem em primeira mão, todas as novidades do nosso site.
Aproveitem também, para ingressar em nosso Canal do Smart Siga no Telegram. Para tanto acessem:
https://t.me/smartsiga (https://t.me/smartsiga).
Espero que vocês tenham gostado do nosso post, e que o nosso site esteja ajudando os nossos amigos analista.
Anexos
Anexo 01: Para realizar o download do fonte WsClient, que consome o WS do Banco Central, diretamente do
GitHub do Smart Siga, clique aqui
(https://github.com/smartsiga/AdvPL/blob/master/WsClient/WCCotacaoMoedas.prw);
Anexo 02: Para realizar o download do fonte de atualização automática de moedas no Protheus, diretamente do
GitHub do Smart Siga, clique aqui
(https://github.com/smartsiga/AdvPL/blob/master/Funcoes/Atualizacao%20Moedas/CotacaoMoedas.prw);
Anexo 03: O endereço do WebService de cotações de moedas do Banco Central do Brasil é o seguinte:
https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/FachadaWSSGS.wsdl
(https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/FachadaWSSGS.wsdl).
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 16/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
Referências:
Banco Central do Brasil (http://www.bcb.gov.br)
Blog do Tiago Crizanto (http://blog.tiagocrizanto.com/con guracoes-do-webservice-do-banco-central-
cotacoes-diversas/)
Compartilhe:
Muito o legal este post, que, com certeza irá facilitar a vida de muitos usuários.
Senti falta apenas da informação da URL no formato WSDL para criar o Client pelo TDS, pois se
informarmos a URL descrita no fonte no formado
https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/FachadaWSSGS.wsdl
(https://www3.bcb.gov.br/sgspub/JSP/sgsgeral/FachadaWSSGS.wsdl) o TDS acusa o seguinte erro:
“Verifique a URL contendo o serviço. Este serviço parece ser inválido”.
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 17/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
Se você digitar a WSDL no navegador, consegue fazer o download da mesma? Se sim, pode usar o
arquivo para importar a estrutura através da opção “Remoto”, ao criar o WsClient.
Att,
Smart Siga
TI Inteligente
Está tudo certo… Sim, eu consego fazer o download normalmente pelo browser e testando a
criação do WsClient pelo DevStudio (IDE) não ocorreu nenhum erro.
Me chamou a atenção sua observação para informar o Tipo “Remoto”, pois eu não encontrei esta
opção em meu TDS.
Só então me dei conta de que estava utilizando a versão 11.2 do TDS que não tem essa opção, mas
ao utilizar a versão 11.3 com o Tipo “Remoto” a URL foi carregada sem nenhum problema.
Muito obrigado pelo retorno e mais uma vez parabéns pelo post.
Até mais.
Que bom que deu tudo certo, e que o nosso site esteja te ajudando.
Abraços.
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 18/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
Smart Siga
TI Inteligente
Fernando disse:
Em caso de feriados ou finais de semana, o WebService (WS) sempre retornará o valor do último dia
útil.
Por exemplo; No caso de sábado e/ou domingo retornará o valor da sexta-feria. Se um feriado, cair
em uma quarta-feria, e você consultar o WS, o mesmo retornará o valor de terça-feira.
Abs,
Smart Siga
TI Inteligente
Renato disse:
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 19/20
11/12/2018 Atualização Automática de Moedas no Protheus - Smart Siga
Att,
Smart Siga
TI Inteligente
https://www.smartsiga.com.br/atualizacao-automatica-de-moedas-no-protheus/ 20/20