consumo webservice

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

ar sistemas
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 05 Jun 2018 00:11
Localização: BELO HORIZONTE/MG

consumo webservice

Mensagem 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 ..
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

consumo webservice

Mensagem 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 )
ar sistemas
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 05 Jun 2018 00:11
Localização: BELO HORIZONTE/MG

consumo webservice

Mensagem 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
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

consumo webservice

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

consumo webservice

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

consumo webservice

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

consumo webservice

Mensagem por Kapiaba »

// #include "FiveWin.ch"

#include "oseuarquivo.ch" // da sua lib. no meu caso, se eu não colocar, não compila. Abs.
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

consumo webservice

Mensagem 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,
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
ar sistemas
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 05 Jun 2018 00:11
Localização: BELO HORIZONTE/MG

consumo webservice

Mensagem 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	

Responder