Página 1 de 1

consumo webservice

Enviado: 05 Jun 2018 15:22
por ar sistemas
Boa tarde a todos, sei que este tópico já esta demasiadamente discutido neste fórum ( já li e tentei vários exemplos).
Porém já estou a mais de uma semana nisso sem sair do lugar.
Não estou conseguindo gerar uma consulta no webservices do portal www.abcfarma.org.br. Estou precisando muito de ajuda.
Segue código que estou tentando conexão.

Código: Selecionar todos

LOCAL ccnpj_cpf 	:= '03332548000127'
LOCAL csenha 		:= 'aluisiovpn'
LOCAL ccnpj_sh 	:= '07693076000199'
LOCAL cpagina 		:= '1'

   // Abertura das funcoes para WebService do xHarbour
   http := CreateObject( "MSXML2.XMLHTTP" )
	
   http:Open( "POST", "https://webserviceabcfarma.org.br/webservice/", .F. )
   http:send( "cnpj_cpf=" + ccnpj_cpf + "&cnpj_sh=" + ccnpj_sh +  "&senha=" + csenha + "&pagina=" + cpagina )

   response  := http:responseText     // Recebe a resposta
msginfo(response)
return response

Segue o que diz o manual do webservice.

REQUEST
Execute um requisição ao nosso servidor HTTP, enviando os campos abaixo como POST tendo como nome o indicador abaixo, utilizaremos essas informações para autenticação e os mecanismos de segurança.
O endereço do serviço é : https://webserviceabcfarma.org.br/webservice/
Certifique-se de terminar a url com a barra!
cnpj_cpf
CNPJ do associado
senha
Senha do Associado no Portal ABCFARMA
cnpj_sh
CNPJ da Empresa de Software ¹
pagina
Número da página [default = 1]

O que está faltando?
É so isso mesmo que tenho que fazer?

Estou usando:
Biblioteca Grafica Minigui.. mysql ..

consumo webservice

Enviado: 07 Jun 2018 10:29
por Kapiaba
Veja se ajuda:

Código: Selecionar todos

#include "FiveWin.ch"

FUNCTION ABCFARMA()
  
   LOCAL ccnpj_cpf    := '03332548000127'
   LOCAL csenha       := 'aluisiovpn'
   LOCAL ccnpj_sh    := '07693076000199'
   LOCAL cpagina       := '1'
   LOCAL http, response, cWinResp

   // Abertura das funcoes para WebService do xHarbour
   // http := CreateObject( "MSXML2.XMLHTTP" )

   #IFDEF __XHARBOUR__  // xHarbour

      Try

          Http := CreateObject( "MSXML2.ServerXMLHTTP.6.0" )

      Catch

         // MsgInfo('Erro na Criação do Serviço')
         MsgInfo('Erro na Criação do Serviço! no xHarbour', 'Atenção!')

         Return .f.

      End

   #ELSE

      Try

         Http := win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")

      Catch

         MsgInfo('Erro na Criação do Serviço! no Harbour', 'Atenção!')

         exit

      End

   #ENDIF

   TRY
   
      http:Open( "POST", "https://webserviceabcfarma.org.br/webservice/", .F. )

      http:SetRequestHeader( "Content-Type","application/json")

      http:send( "cnpj_cpf=" + ccnpj_cpf + "&cnpj_sh=" + ccnpj_sh +  "&senha=" + csenha + "&pagina=" + cpagina )

      // response  := http:responseText     // Recebe a resposta
      // msginfo( response )

      cWinResp := http:ResponseBody

      msginfo( cWinResp )

   CATCH

      QUIT

   END

   Http := NIL

RETURN( response )

consumo webservice

Enviado: 09 Jun 2018 11:40
por ar sistemas
Olá Kapiaba, muito obrigado pelo retorno.
Não consegui compilar pois nao tenho na minha máquina o include fivewin.ch
Poderia disponibilizar, por favor?

Utilizo a minigui 3.4.3

consumo webservice

Enviado: 09 Jun 2018 12:31
por Jairo Maia
Os cnpj´s e a senha são reais para testes? existe como você acessar direto pelo site com esses dados, e se sim, estão corretos? É que a conexão está sendo feita, e retorna a mensagem: Parâmetros inválidos ou não encontrados.

consumo webservice

Enviado: 09 Jun 2018 18:45
por JoséQuintas
ar sistemas escreveu:Não consegui compilar pois nao tenho na minha máquina o include fivewin.ch
Ué... comenta a linha.
Se der falta de alguma coisa, aí sim, verificar.
Mas dá pra ver que não faz falta.

consumo webservice

Enviado: 09 Jun 2018 18:50
por JoséQuintas
Mesmo assim, não querendo ser chato, mas já sendo.... poderia pelo menos ter comparado os fontes.

Não sei porque, o fonte do kapiaba tem este trecho a mais:

Código: Selecionar todos

 http:SetRequestHeader( "Content-Type","application/json")
"não sei porque" significa que realmente não sei.
Pode ou não precisar.

consumo webservice

Enviado: 11 Jun 2018 10:14
por Kapiaba
// #include "FiveWin.ch"

#include "oseuarquivo.ch" // da sua lib. no meu caso, se eu não colocar, não compila. Abs.

consumo webservice

Enviado: 12 Jun 2018 08:42
por André Corrêa
ar sistemas,

Geralmente é possível testar um websevice informando a URL e os parâmetros diretamente no web browser, assim você já consegue
saber se os parâmetros podem ser fictícios, se o servidor está funcionando, etc.
Ao fazer isso, acessei a página inicial do webservice, com algumas informações importantes sobre a utilização.
URL: https://webserviceabcfarma.org.br/webse ... 4&pagina=1

Os passos básicos para se utilizar um webservice em qualquer linguagem, são:

1) Criar o servidor

Código: Selecionar todos

http := CreateObject( "MSXML2.ServerXMLHTTP" )
2) Abrir o servidor

Código: Selecionar todos

http:Open( "POST", "https://webserviceabcfarma.org.br/webservice/", .F. )
3) Adicionar o request header

Código: Selecionar todos

http:SetRequestHeader( "Content-Type","application/json")
4) Enviar a requisição:

Código: Selecionar todos

http:send( "cnpj_cpf=" + ccnpj_cpf + "&cnpj_sh=" + ccnpj_sh +  "&senha=" + csenha + "&pagina=" + cpagina )
5) Obter a resposta:

Código: Selecionar todos

response  := http:responseText
Existe também uma ótima ferramenta para testes que já foi citada em algum post aqui no fórum, é a SOAPUI, dê uma olhada:
https://www.soapui.org/

Claro que existem pequenas variações, mas a partir daí, já dá pra ter uma ideia.

Abraço,

consumo webservice

Enviado: 14 Jul 2018 21:30
por ar sistemas
:))
Olá pessoal....
Tópico encerrado.
Consegui fazer a conexao. Obrigado a todos pela ajuda..
Segue código finalizado, caso alguém necessite.

Código: Selecionar todos

function ABCFarma( lPreview )
LOCAL strXml := []
local nHandle     
local cLinha

if internetok() = .f.
	load window seminternet // window modal
	seminternet.center
	seminternet.activate
	return
Endif	

if file(cCaminhoExe + '\' + 'abcfarma1.txt') = .f.
	if internetok() = .f.
		load window seminternet2 // windows standard
		seminternet2.center
		seminternet2.activate
		return
	Endif	

	delete item all from grid_1 of consultatabela

	_pagina     := "1"
   strXml += [cnpj_cpf=]+_cnpj_cpf
   strXml += [&senha=]+_senha
   strXml += [&cnpj_sh=]+_cnpj_sh
   strXml += [&pagina=]+_pagina

	oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP")
	oServer:Open( "POST", cABCFARMA, .f. )
	oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
	oServer:SetRequestHeader( "Connection", "keep-alive" )
	oServer:Send(strXml)
	oServer:WaitForResponse( 10000 )

	cRetorno:= oServer:ResponseBody
	if lPreview
	  MemoWrit('abcfarma1.txt', cRetorno )
	Else
		msginfo('Erro no Retorno do Portal ABCFARMA.')
	endif
Endif

*** agora inicio trabalho dentro do json abcfarma.txt
*** primeiro busco o numero de paginas do portal

cArquivo := cCaminhoExe + '\' + 'abcfarma1.txt'
nHandle  := fopen(cArquivo, 0)
cLinha := space(F_BLOCK)
*cLinha := F_BLOCK
while ( fread (nHandle, @cLinha, F_BLOCK) > 0 )
	*** pego qtde de paginas                     
	nInicio := at('total_paginas',cLinha)
	nPaginas := subst(cLinha,nInicio + 13,5)
	nNumeroPaginas := ''
	contador := 1 
	do while contador <= len(nPaginas)
		if isdigit(subst(nPaginas,contador,1))
			nNumeroPaginas := nNumeroPaginas + subst(nPaginas,contador,1)
		Endif
	   contador ++
	Enddo			
	nNumeroPaginas := val(nNumeroPaginas)
	consultatabela.label_8.value := str(nNumeroPaginas)
	consultatabela.label_7.value := '1'
	exit
enddo   
fclose(nHandle)
if nNumeroPaginas = 0 
	msginfo('Erro na Apuração do Número de Páginas do Portal ABCFARMA.','ATENÇÃO')
	return
Endif	

** agora busco todas as paginas do webservice
contador := 2 // a primeira pagina ja foi importada anteriormente
do while contador <= nNumeroPaginas
	if file(cCaminhoExe + '\' + 'abcfarma' + alltrim(str(contador)) + '.txt') = .f.
*		cABCFARMA := "https://webserviceabcfarma.org.br/webservice/"
*		_cnpj_cpf := 'seu_cnpj'
*		_senha    := 'sua_senha'
*		_cnpj_sh  := 'Senha_sh'
*		_pagina   := alltrim(str(contador))
* 	     strXml += [cnpj_cpf=]+_cnpj_cpf
*	     	strXml += [&senha=]+_senha
*	      strXml += [&cnpj_sh=]+_cnpj_sh
*	      strXml += [&pagina=]+_pagina
	
		oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP")
		oServer:Open( "POST", cABCFARMA, .f. )
		oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
		oServer:SetRequestHeader( "Connection", "keep-alive" )
		oServer:Send(strXml)
		oServer:WaitForResponse( 10000 )                      
            
		cRetorno:= oServer:ResponseBody
		if lPreview             	
		  cArquivoAbcfarma := 'abcfarma' + alltrim(str(contador)) + '.txt'
		  MemoWrit(cArquivoAbcfarma, cRetorno )
		Else
			msginfo('Erro no Retorno do Portal ABCFARMA.')
		endif
		consultatabela.progressbar_1.value := contador
		do events
	endif
	consultatabela.label_7.value := str(contador)
	contador ++
Enddo
consultatabela.progressbar_1.visible := .f.
consultatabela.label_4.visible := .f.
                                                                  

** puxei todas as tabelas
** agora vou importar para o grid
***


contador := 1
cArquivoAbcfarma := directory(cCaminhoExe + '\' + 'abcfarma*.txt')
do while contador <= nNumeroPaginas
	cArquivo := cCaminhoExe + '\' + cArquivoAbcfarma[contador,1]
	cLinha := space(F_BLOCK)
	nHandle  := fopen(cArquivo, 0)
	tamanhoarquivo := fread(nHandle, @cLinha, F_BLOCK) // em bites
	
	do while len(cLinha) > 0 
		*** pego produtos
		nInicio := at('ID_PRODUTO',cLinha)
		if nInicio = 0 
			exit                                                       
		Endif	
		cLinha := '{' + subst(cLinha,nInicio + 12,F_BLOCK)
	   nFim := at('ID_PRODUTO',cLinha)
	   if nFim > 0 
			cComando := subst(cLinha,1,nFim - 4)
		Else
		   cComando := alltrim(cLinha)
		Endif
	   
		*** agora pego os componentes de cComando

		_id_produto 			:= subst(cComando,3 , at('EAN',cComando) - 6)
		_ean 						:= subst(cComando,at('EAN',cComando) 						+ len('EAN') + 3 						,at('REGISTRO_ANVISA',cComando) 		- at('EAN',cComando) 					- len('EAN') - 6)
		_registro_anvisa 		:= subst(cComando,at('REGISTRO_ANVISA',cComando) 		+ len('REGISTRO_ANVISA') + 3 		,at('GGREM',cComando) 					- at('REGISTRO_ANVISA',cComando) 	- len('REGISTRO_ANVISA') - 6)	
		_ggrem            	:= subst(cComando,at('GGREM',cComando) 					+ len('GGREM') + 3 					,at('NOME',cComando) 					- at('GGREM',cComando) 					- len('GGREM') - 6)	
		_nome             	:= subst(cComando,at('NOME',cComando) 						+ len('NOME') + 3 					,at('DESCRICAO',cComando)				- at('NOME',cComando) 					- len('NOME') - 6)	
		_descricao        	:= subst(cComando,at('DESCRICAO',cComando) 				+ len('DESCRICAO') + 3 				,at('COMPOSICAO',cComando)				- at('DESCRICAO',cComando) 			- len('DESCRICAO') - 6)	
		_composicao       	:= subst(cComando,at('COMPOSICAO',cComando) 				+ len('COMPOSICAO') + 3 			,at('QTD_EMBALAGEM',cComando)			- at('COMPOSICAO',cComando) 			- len('COMPOSICAO') - 6)	
      _qtde_embalagem   	:= subst(cComando,at('QTD_EMBALAGEM',cComando) 			+ len('QTD_EMBALAGEM') + 3 		,at('PF_20',cComando)					- at('QTD_EMBALAGEM',cComando) 		- len('QTD_EMBALAGEM') - 6)	
		_pf_20            	:= subst(cComando,at('PF_20',cComando) 					+ len('PF_20') + 3 					,at('PMC_20',cComando)					- at('PF_20',cComando) 					- len('PF_20') - 6)	
      _pmc_20           	:= subst(cComando,at('PMC_20',cComando) 					+ len('PMC_20') + 3 					,at('PF_18',cComando)					- at('PMC_20',cComando) 				- len('PMC_20') - 6)	
		_pf_18            	:= subst(cComando,at('PF_18',cComando) 					+ len('PF_18') + 3 					,at('PMC_18',cComando)					- at('PF_18',cComando) 					- len('PF_18') - 6)	
      _pmc_18           	:= subst(cComando,at('PMC_18',cComando) 					+ len('PMC_18') + 3 					,at('PF_17',cComando)					- at('PMC_18',cComando) 				- len('PMC_18') - 6)	
      _pf_17            	:= subst(cComando,at('PF_17',cComando) 					+ len('PF_17') + 3 					,at('PMC_17',cComando)					- at('PF_17',cComando) 					- len('PF_17') - 6)	
      _pmc_17           	:= subst(cComando,at('PMC_17',cComando) 					+ len('PMC_17') + 3 					,at('PF_17_5',cComando)					- at('PMC_17',cComando) 				- len('PMC_17') - 6)	
      _pf_17_5          	:= subst(cComando,at('PF_17_5',cComando) 					+ len('PF_17_5') + 3 				,at('PMC_17_5',cComando)				- at('PF_17_5',cComando) 				- len('PF_17_5') - 6)	
      _pmc_17_5         	:= subst(cComando,at('PMC_17_5',cComando) 				+ len('PMC_17_5') + 3 				,at('PF_12',cComando)					- at('PMC_17_5',cComando) 				- len('PMC_17_5') - 6)	
      _pf_12            	:= subst(cComando,at('PF_12',cComando) 					+ len('PF_12') + 3 					,at('PMC_12',cComando)					- at('PF_12',cComando) 					- len('PF_12') - 6)	
      _pmc_12           	:= subst(cComando,at('PMC_12',cComando) 					+ len('PMC_12') + 3 					,at('PF_0',cComando)						- at('PMC_12',cComando) 				- len('PMC_12') - 6)	
      _pf_0           		:= subst(cComando,at('PF_0',cComando) 						+ len('PF_0') + 3 					,at('PMC_0',cComando)					- at('PF_0',cComando) 					- len('PF_0') - 6)	
      _pmc_0           		:= subst(cComando,at('PMC_0',cComando) 					+ len('PMC_0') + 3 					,at('PERCENTUAL_IPI',cComando)			- at('PMC_0',cComando) 					- len('PMC_0') - 6)	
      _percentual_ipi  		:= subst(cComando,at('PERCENTUAL_IPI',cComando) 		+ len('PERCENTUAL_IPI') + 3 		,at('DATA_VIGENCIA',cComando)			- at('PERCENTUAL_IPI',cComando) 		- len('PERCENTUAL_IPI') - 6)	
      _data_vigencia   		:= subst(cComando,at('DATA_VIGENCIA',cComando) 			+ len('DATA_VIGENCIA') + 3 		,at('NOVO',cComando)						- at('DATA_VIGENCIA',cComando) 		- len('DATA_VIGENCIA') - 6)	
      _novo   					:= subst(cComando,at('NOVO',cComando) 						+ len('NOVO') + 3 					,at('VARIACAO_PRECO',cComando)		- at('NOVO',cComando) 					- len('NOVO') - 6)	
      _variacao_preco		:= subst(cComando,at('VARIACAO_PRECO',cComando) 		+ len('VARIACAO_PRECO') + 3 		,at('PF_17_ALC',cComando)				- at('VARIACAO_PRECO',cComando) 		- len('VARIACAO_PRECO') - 6)	
      _pf_17_alc				:= subst(cComando,at('PF_17_ALC',cComando) 				+ len('PF_17_ALC') + 3 				,at('PMC_17_ALC',cComando)				- at('PF_17_ALC',cComando) 			- len('PF_17_ALC') - 6)	
      _pmc_17_alc				:= subst(cComando,at('PMC_17_ALC',cComando) 				+ len('PMC_17_ALC') + 3 			,at('PF_17_5_ALC',cComando)			- at('PMC_17_ALC',cComando) 			- len('PMC_17_ALC') - 6)	
      _pf_17_5_alc			:= subst(cComando,at('PF_17_5_ALC',cComando) 			+ len('PF_17_5_ALC') + 3 			,at('PMC_17_5_ALC',cComando)			- at('PF_17_5_ALC',cComando) 			- len('PF_17_5_ALC') - 6)	
      _pmc_17_5_alc			:= subst(cComando,at('PMC_17_5_ALC',cComando) 			+ len('PMC_17_5_ALC') + 3 			,at('PF_18_ALC',cComando)				- at('PMC_17_5_ALC',cComando) 		- len('PMC_17_5_ALC') - 6)	
      _pf_18_alc				:= subst(cComando,at('PF_18_ALC',cComando) 				+ len('PF_18_ALC') + 3 				,at('PMC_18_ALC',cComando)				- at('PF_18_ALC',cComando) 			- len('PF_18_ALC') - 6)	
      _pmc_18_alc				:= subst(cComando,at('PMC_18_ALC',cComando) 				+ len('PMC_18_ALC') + 3 			,at('NCM',cComando)						- at('PMC_18_ALC',cComando) 			- len('PMC_18_ALC') - 6)	
      _ncm						:= subst(cComando,at('NCM',cComando) 						+ len('NCM') + 3 						,at('ID_TARJA',cComando)				- at('NCM',cComando) 					- len('NCM') - 6)	
      _id_tarja				:= subst(cComando,at('ID_TARJA',cComando) 				+ len('ID_TARJA') + 3 				,at('CLASSE_TERAPEUTICA',cComando)	- at('ID_TARJA',cComando) 				- len('ID_TARJA') - 6)	
      _classe_terapeutica	:= subst(cComando,at('CLASSE_TERAPEUTICA',cComando)	+ len('CLASSE_TERAPEUTICA') + 3 	,at('PORTARIA_344_98',cComando)		- at('CLASSE_TERAPEUTICA',cComando) - len('CLASSE_TERAPEUTICA') - 6)	
      _portaria_344_98		:= subst(cComando,at('PORTARIA_344_98',cComando)		+ len('PORTARIA_344_98') + 3 		,at('PRODUTO_REFERENCIA',cComando)	- at('PORTARIA_344_98',cComando) 	- len('PORTARIA_344_98') - 6)	
      _produto_referencia	:= subst(cComando,at('PRODUTO_REFERENCIA',cComando)	+ len('PRODUTO_REFERENCIA') + 3 	,at('CAS',cComando)						- at('PRODUTO_REFERENCIA',cComando) - len('PRODUTO_REFERENCIA') - 6)	
      _cas						:= subst(cComando,at('CAS',cComando)						+ len('CAS') + 3 						,at('DCB',cComando)						- at('CAS',cComando) 					- len('CAS') - 6)	
      _atc_code				:= subst(cComando,at('ATC_CODE',cComando)					+ len('ATC_CODE') + 3 				,at('CAP',cComando)						- at('ATC_CODE',cComando) 				- len('ATC_CODE') - 6)	
      _cap						:= subst(cComando,at('CAP',cComando)						+ len('CAP') + 3 						,at('CONFAZ_87',cComando)				- at('CAP',cComando) 					- len('CAP') - 6)	
      _confaz_87				:= subst(cComando,at('CONFAZ_87',cComando)				+ len('CONFAZ_87') + 3 				,at('TISS_TUSS',cComando)				- at('CONFAZ_87',cComando) 			- len('CONFAZ_87') - 6)	
     	_tiss_tuss					:= subst(cComando,at('TISS_TUSS',cComando)					+ len('TISS_TUSS') + 3 						,at('CEST',cComando)							- at('TISS_TUSS',cComando) 					- len('TISS_TUSS') - 6)	
      _cest							:= subst(cComando,at('CEST',cComando)							+ len('CEST') + 3 							,at('ID_FABRICANTE',cComando)				- at('CEST',cComando)		 					- len('CEST') - 6)	
     	_id_fabricante				:= subst(cComando,at('ID_FABRICANTE',cComando)				+ len('ID_FABRICANTE') + 3 				,at('NOME_FABRICANTE',cComando)			- at('ID_FABRICANTE',cComando)				- len('ID_FABRICANTE') - 6)	
      _nome_fabricante			:= subst(cComando,at('NOME_FABRICANTE',cComando)			+ len('NOME_FABRICANTE') + 3 				,at('ID_LCCT',cComando)						- at('NOME_FABRICANTE',cComando)				- len('NOME_FABRICANTE') - 6)	
      _descricao_lista			:= subst(cComando,at('DESCRICAO_LISTA',cComando)			+ len('DESCRICAO_LISTA') + 3 				,at('ID_REGIME_PRECO',cComando)			- at('DESCRICAO_LISTA',cComando)				- len('DESCRICAO_LISTA') - 6)	
      _id_regime_preco			:= subst(cComando,at('ID_REGIME_PRECO',cComando)			+ len('ID_REGIME_PRECO') + 3 				,at('DESCRICAO_REGIME_PRECO',cComando)	- at('ID_REGIME_PRECO',cComando)				- len('ID_REGIME_PRECO') - 6)	
      _descricao_regime_preco	:= subst(cComando,at('DESCRICAO_REGIME_PRECO',cComando)	+ len('DESCRICAO_REGIME_PRECO') + 3 	,at('ID_TIPO_PRODUTO',cComando)			- at('DESCRICAO_REGIME_PRECO',cComando)	- len('DESCRICAO_REGIME_PRECO') - 6)	
      _id_tipo_produto		 	:= subst(cComando,at('ID_TIPO_PRODUTO',cComando)			+ len('ID_TIPO_PRODUTO') + 3 				,at('DESCRICAO_TIPO_PRODUTO',cComando)	- at('ID_TIPO_PRODUTO',cComando)				- len('ID_TIPO_PRODUTO') - 6)	
     	_descricao_tipo_produto	:= subst(cComando,at('DESCRICAO_TIPO_PRODUTO',cComando)	+ len('DESCRICAO_TIPO_PRODUTO') + 3 	,at('DESCRICAO_TIPO_PRODUTO',cComando)	- at('DESCRICAO_TIPO_PRODUTO',cComando)	- len('DESCRICAO_TIPO_PRODUTO') - 6)	

		**acrescento no grid
		add item(consultatabela.grid_1.itemcount + 1 ,{_id_produto,_ncm,_id_fabricante,_nome_fabricante,;
							_nome,_descricao,_pf_18,_pmc_18,'0',_qtde_embalagem,_percentual_ipi,_data_vigencia,;
							_ean,_registro_anvisa,_descricao_lista,upper(_composicao),_classe_terapeutica } ) to grid_1 of consultatabela

		cLinha := alltrim(subst(cLinha,nFim -1,2000000))
  	Enddo   
	contador ++
	consultatabela.label_7.value := str(contador)
	consultatabela.progressbar_1.value := contador
	do events
Enddo