× Linguagem de Programação ADVPL

Perguntas Problema em query - SPED050

Mais
10 anos 9 meses atrás #20516 por MacSanches
Boa tarde Pessoal


Estou com o seguinte problema aqui na empresa, estou desenvolvendo uma tela customizada para o reenvio de NF-e para o cliente mais quando estou efetuando a query no banco, ele me da problema justinho no campo que contém o XML os outros campos funcionam normalmente. Será que alguém poderia me dar uma ajuda, segue a minha query
cQuery := "SELECT cast(cast([SPED050].[XML_SIG] as varbinary(max))as varchar(max)) AS XMLSIGA,*," 
cQuery := cQuery + " SUBSTRING (NFE_ID ,1 , 3 ) AS SERIE, SUBSTRING(NFE_ID,4,10) AS NF, XML_SIG AS XML, SUBSTRING(DATE_NFE,7,2) AS DIA, "
cQuery := cQuery + " SUBSTRING(DATE_NFE,5,2) AS MES, SUBSTRING(DATE_NFE,1,4) AS ANO From P11_FBRASIL_SPED.dbo.SPED050 where NFE_ID = " + "'" + cSerie + cNum + "'"

Desde já agradeço.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 9 meses atrás #20517 por kanaamlrr
Respondido por kanaamlrr no tópico Problema em query - SPED050
Qual o problema?
Qual erro é apresentado?
Tentou rodar a query no SQL Management studio?

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 9 meses atrás #20518 por MacSanches
Respondido por MacSanches no tópico Problema em query - SPED050
Bom a query roda no Protheus e não da erro, porém quando eu vou jogar o resultado em uma variável ele da um erro dizendo que o campo é inválido, já rodei no SQL management e funcionou perfeitamente. Por isso que eu não consigo entender

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 9 meses atrás #20519 por kanaamlrr
Respondido por kanaamlrr no tópico Problema em query - SPED050
provavelmente esse retorno está estourando o tamanho máximo de string do protheus.

Tenta atribuir da seguinte forma
Local cXML1 := ""
Local cXML2 := ""

cXML1 := Substring(QRY->XMLSIGA,1,LEN(QRY->XMLSIGA)/2)
cXML2 := Substring(QRY->XMLSIGA,(LEN(QRY->XMLSIGA)/2)+1, LEN(QRY->XMLSIGA)-(LEN(QRY->XMLSIGA)/2))

não testei, pode ser que funcione e pode ser que não.
Se não funcionar, tenta quebrar esse campo em vários campos direto na query

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 9 meses atrás - 10 anos 9 meses atrás #20520 por MacSanches
Respondido por MacSanches no tópico Problema em query - SPED050
Cara não deu certo :( dessa vez vou mandar o fonte e um print do erro. obrigado pela ajuda não sei mais o que fazer nem o suporte da TOTVS sabe qual o problema (na verdade é difícil eles resolverem alguma coisa);
User Function XMLENV()
	Local cFilSX5
	
	Private cCliente  := Space(1)
	Private cEmail 	:= Space(1)
	Private cEmissao	:= Space(1)
	Private cNum 		:= Space(6)
	Private cSerie    := Space(3)
	Private cXML      	:= space(10000)   

	SetPrvt("oDlg","oGrp1","oSay3","oSay4","oSay6","oCliente","oEmail","oXML","oBtnEnvia","oGrp2","oSay1")
	SetPrvt("oSay5","oNum","oSerie","oBtnCarrega","oEmissao")

	oDlg := MSDialog():New( 087,275,476,853,"Reenvio de arquvos XML - NF-e",,,.F.,,,,,,.T.,,,.T. )
	oGrp1 := TGroup():New( 036,004,180,276,"Dados da NF-e",oDlg,CLR_BLACK,CLR_WHITE,.T.,.F. )
	oSay3 := TSay():New( 048,008,{||"Cliente:"},oGrp1,,,.F.,.F.,.F.,.T.,CLR_BLACK,CLR_WHITE,020,008)
	oSay4 := TSay():New( 061,008,{||"E-mail enviado:"},oGrp1,,,.F.,.F.,.F.,.T.,CLR_BLACK,CLR_WHITE,040,008)
	oSay6 := TSay():New( 076,008,{||"XMl da NF-e:"},oGrp1,,,.F.,.F.,.F.,.T.,CLR_BLACK,CLR_WHITE,032,008)
	oCliente	:= TGet():New( 046,028,{|u|           

      If(PCount()>0,cCliente:=u,cCliente)},oGrp1,240,008,'',,CLR_BLACK,CLR_WHITE,,,,.T.,"",,,.F.,.F.,,.T.,.F.,"","cCliente",,)
	oEmail     := TGet():New( 060,048,{|u| 

If(PCount()>0,cEmail:=u,cEmail)},oGrp1,220,008,'',,CLR_BLACK,CLR_WHITE,,,,.T.,"",,,.F.,.F.,,.F.,.F.,"","cEmai
l",,)
	oXML       	:= TMultiGet():New( 084,008,{|u| 

If(PCount()>0,cXML:=u,cXML)},oGrp1,260,072,,,CLR_BLACK,CLR_WHITE,,.T.,"",,,.F.,.F.,.F.,,,.F.,,  )

oBtnEnvia 	:= TButton():New( 160,232,"Enviar E-
mail",oGrp1,carrega(cSerie,cNum),037,012,,,,.T.,,"",,,,.F. )

	oGrp2      	:= TGroup():New( 004,004,032,276,"Pesquisa de NF-e",oDlg,CLR_BLACK,CLR_WHITE,.T.,.F. )
		oSay1      	:= TSay():New( 016,008,{||"Número:"},oGrp2,,,.F.,.F.,.F.,.T.,CLR_BLACK,CLR_WHITE,024,008)
		oSay2      	:= TSay():New( 016,066,{||"Série:"},oGrp2,,,.F.,.F.,.F.,.T.,CLR_BLACK,CLR_WHITE,014,008)
		oSay5      	:= TSay():New( 015,106,{||"Emissão:"},oGrp2,,,.F.,.F.,.F.,.T.,CLR_BLACK,CLR_WHITE,022,008)
		oNum       	:= TGet():New( 014,030,{|u| If(PCount()>0,cNum:=u,cNum)},oGrp2,033,008,'',,CLR_BLACK,CLR_WHITE,,,,.T.,"",,,.F.,.F.,,.F.,.F.,"","cNum",,)
		oSerie     := TGet():New( 014,082,{|u| If(PCount()>0,cSerie:=u,cSerie)},oGrp2,020,008,'',,CLR_BLACK,CLR_WHITE,,,,.T.,"",,,.F.,.F.,,.F.,.F.,"","cSerie",,)
		
		@013, 227 BUTTON oBtnCarreg PROMPT "Carregar NF-e" SIZE 045, 012 OF oDlg ACTION carrega(cSerie,cNum) PIXEL 
		oEmissao   := TGet():New( 014,128,{|u| If(PCount()>0,cEmissao:=u,cEmissao)},oGrp2,095,008,'',,CLR_BLACK,CLR_WHITE,,,,.T.,"",,,.F.,.F.,,.T.,.F.,"","cEmissao",,)

	oDlg:Activate(,,,.T.)

	Static Function carrega(cSerie,cNum)
		Local aValores		:= {}
		Local cQuery 		:= ""
		Local cXML1 := ""
		Local cXML2 := ""
		
		if !Empty(cSerie) .And. !Empty(cNum)
			cQuery := "SELECT cast(cast([SPED050].[XML_SIG] as varbinary(max))as varchar(max)) AS XMLSIGA,*," 
			cQuery := cQuery + " SUBSTRING (NFE_ID ,1 , 3 ) AS SERIE, SUBSTRING(NFE_ID,4,10) AS NF, XML_SIG AS XML, SUBSTRING(DATE_NFE,7,2) AS DIA, "
			cQuery := cQuery + " SUBSTRING(DATE_NFE,5,2) AS MES, SUBSTRING(DATE_NFE,1,4) AS ANO From P11_FBRASIL_SPED.dbo.SPED050 where NFE_ID = " + "'" + cSerie + cNum + "'" 
		
			memowrite('C:\XMLENV.txt',cQuery)
			TCQUERY cQuery NEW ALIAS "TMP"
		
			dbSelectArea("TMP")
			
			cXML1 := Substring(TMP->XMLSIGA,1,LEN(TMP->XMLSIGA)/2)
			cXML2 := Substring(TMP->XMLSIGA,(LEN(TMP->XMLSIGA)/2)+1, LEN(TMP->XMLSIGA)-(LEN(TMP->XMLSIGA)/2))
			
			//cXML := TMP->XMLSIGA
			//ALERT(TMP->XMLSIGA)
			
			cEmissao := cValtochar(TMP->Dia) + "/" + cValtoChar(TMP->Mes) + "/" + cValtoChar(TMP->Ano) + " - " + cValtoChar(TMP->TIME_NFE)
				
			OpenSm0()
			cFilSX5 := SM0->M0_CODFIL
		
			cQuery := "SELECT "
			cQuery := cQuery + "A1_COD,A1_NOME,F2_CLIENTE,A3_NOME,A3_COD, A1_EMAIL"
			cQuery := cQuery + " FROM " 
			cQuery := cQuery + "SA1010,SF2010,SA3010 "
			cQuery := cQuery + "WHERE F2_CLIENTE = A1_COD AND F2_VEND1 = A3_COD AND "
			cQuery := cQuery + "F2_DOC = " + "'" + ALLTRIM(cNum) + "'" + " AND F2_SERIE = " + "'" + ALLTRIM(cSerie) + "' "
			cQuery := cQuery + "AND F2_FILIAL = " + "'" + cFilSX5 + "'" 
	   		
   			memowrite('C:\XMLENV_AUX.txt',cQuery)
			TCQUERY cQuery NEW ALIAS "TMP2"
		
			dbSelectArea("TMP2")
		
			cCliente := cValtoChar(TMP2->A1_COD) + " - " + TMP2->A1_NOME 
			cEmail := TMP->EMAIL
		
			TMP2->(DbCloseArea())
			TMP->(DbCloseArea())
		Endif
	Return

	User Function addemail()


	Return
Return

Aproveitando vou mandar um print do erro.
Anexos:
Ultima edição: 10 anos 9 meses atrás por MacSanches.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 9 meses atrás #20523 por kanaamlrr
Respondido por kanaamlrr no tópico Problema em query - SPED050
Cara, coloca um ponto de parada na linha
dbSelectArea("TMP")
e verifica em tabelas de dados se o campos XMLSIGA existe, depois de um F10 e verifique se ainda existe.
O problema é que não está reconhecendo o nome do campo no alias "TMP"

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.147 segundos
Joomla templates by a4joomla