- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Problema em query - SPED050
×
Linguagem de Programação ADVPL
Perguntas Problema em query - SPED050
- MacSanches
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 6
- Obrigados Recebidos: 0
10 anos 9 meses atrás #20516
por MacSanches
Problema em query - SPED050 foi criado 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
Desde já agradeço.
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
- MacSanches
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 6
- Obrigados Recebidos: 0
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
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
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
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.
- MacSanches
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 6
- Obrigados Recebidos: 0
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);
Aproveitando vou mandar um print do erro.
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.
Ultima edição: 10 anos 9 meses atrás por MacSanches.
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
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"
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.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Problema em query - SPED050
Tempo para a criação da página:0.147 segundos