Bom dia, Gostaria de saber como faço para obter os dados do xml da tabela SPED050 CAMPO XML_SIG e da tabela SPED054 O campo XML_PROT e juntar esse dois dados num mesma string.
Bom dia, Gostaria de saber como faço para obter os dados do xml da tabela SPED050 CAMPO XML_SIG e da tabela SPED054 O campo XML_PROT e juntar esse dois dados num mesma string.
o primeiro passo é identificar se as tabelas do TSS estão na mesma base do Protheus, se estiverem uma base separada você precisará usar o tclink ( https://thiagocoimbra.com.br/2016/04/16/usando-tclink-para-conectar-a-outra-base-de-dados/ ) para conectar e realizar queries.
é preciso lembrar que as tabelas do TSS não constam do SX2, então só será possível lê-las via embedded query com o desafio adicional de que os cmpos xml_sig e xml_prot são campos memo, ou seja, campos blob no banco.
para ler esses campos via query você precisará de abordagens diferentes conforme o banco que você usa, agora estamos muito longe do pai dbaccess :-D
Como ler campo memo em Oracle: https://qastack.com.br/programming/828650/how-do-i-get-textual-contents-from-blob-in-oracle-sql Como ler campo memo em Sql Server: https://dba.stackexchange.com/questions/240441/sql-server-convert-blob-data-to-string
Após conseguir fazer a query nos campos blob do TSS é só seguir a receita de bolo abaixo para recuperar o xml assinado e protocolodo pelo Sefaz:
Inicie a string com o cabeçalho padrâo:
_cxml := '<?xml version="1.0" encoding="UTF-8"?>'
Então localize a NF na tabela SPED050 usando como filtro no where SPED050.DOCCHV = SF2010.F2_CHVNFE, não se preocupe, não tem SIX mas a SPED050 tem índice criado por padrão para o campo DOCCHV e o mesmo é chave única.
Desse registro, adicione o string que recuperar do campo XML_SIG ao _cxml que começou a monta acima, cuidado com o tamanho do string recuperado, pode chegar fácil em 20 kbytes, então puxe em quantos campos string precisar para garantir que vai recuperar todo string do campo blob.
Então faça uma nova query na tabela SPED054 filtrando no where por SPED054.NFE_CHV = SF2010.F2_CHVNFE, mais uma vez não se preocupe, que o NFE_CHV é chave única e índice na SPED054.
Então adicione o conteúdo do XML_PROT à sua variável e finalize o cabeçalho que incluiu no começo:
_cxml += ''
Não esqueça de voltar a conexão do tclink para a conexão padrão e na variável _cxml você tem o xml como se tivesse recuperado na tela do monitor de nfe.