pfmoretto
-
Total de ítens
8 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por pfmoretto
-
-
2 horas atrás, EMBarbosa disse:
Me parece que não... Quando eu li pela primeira vez, acho que não atentei a essa frase direito:
Tecnicamente, os dois são um arquivo XML. Isso indica que há um problema nos dados e não na maneira que você usa para extrair os dados.
Os dois documentos podem ser armazenados da mesma maneira. Mas será que estão sendo?
É possível que os CFe não estejam sendo salvos da mesma maneira que os NFe. Verifique se os CF-e estão realmente no Banco de dados igual aos arquivos NFe.
Então tecnicamente os dois são um XML, mas será que um ele grava em forma de texto e outro ele salva o arquivo mesmo (o binario)? Pois os campos são o mesmo domain, são identicos só consigo pensar que o insert está sendo feito de formas diferentes. Segue foto em anexo.
-
Em 29/03/2023 at 16:06, EMBarbosa disse:
O que isso quer dizer?
Quando eu abro o XML dentro está escrito assim "(Memo)". Não faço ideia o porque.
10 horas atrás, Cleber Ferreira disse:Bom dia,
eu utilizado dessa forma:
(FDQuery1.FieldByName('XML') as TBlobField).SaveToFile(PCHar(pathXMLOrig));
Infelizmente acontece a mesma coisa. O arquivo sai em branco.
Eu acredito que exista alguma diferença na forma como os arquivos são salvos. Acho que no que eu consigo exportar o XML ele salva o texto e nos outros talvez o arquivo mesmo? Como que faria pa extrair?
-
Em 25/03/2023 at 13:39, Dfox disse:
boa tarde
tenta usar essa função
function IfExtraiXmlnf(sXML : string; sQuery :TDataSet): String; var sl : TStringList; begin if not DirectoryExists(ExtractFilePath(sXML)) then ForceDirectories(ExtractFilePath(sXML)); if sQuery.fieldbyname('xml').AsString <> '' then begin {TBlobField(sQuery.FieldByName('xml')).SaveToFile(sXML);} try sl := TStringList.Create; sl.Add(sQuery.fieldbyname('xml').AsString); sl.SaveToFile(sXML, TEncoding.UTF8); finally sl.Free; end; end; Result := sXML; end;
exemplo de uso
var sXML: string; begin sXML := qrnota.fieldbyname('nfe_xml').AsString; try if FileExists(IfExtraiXmlnf(sXML,qrnota)) then begin end;
Muito obrigado mas Infelizmente o resultado é o mesmo que eu estava tendo antes.
-
Estou tentando extrair alguns "arquivos" XML que foram armazenados no BD em forma de texto em campos blob
BLOB SUB_TYPE 1 SEGMENT SIZE 100 CHARACTER SET WIN1252 COLLATE WIN1252
O BD é Fire Bird 2.5. (Não fui eu quem criei o banco).
Estou tentando extrair os arquivos XML de NFe e CFe. O código é o mesmo para ambos os documentos só troco o tipo na query.
Quando o documento é NFe ele funciona normal.
Quando o documento é CFe ele não funciona.
Se eu utilizar
ArqXML.Text := qry2.Fields[0].AsString;
O arquivo salva em branco.
Se eu utilizar
ArqXML.Text := qry2.Fields[0].Text;
O arquivo salva com um (Memo) dentro.
Estou tentando resolver isso a alguns dias mas não consegui já tentei basicamente de tudo. Alguém tem alguma luz?
try Conn1 := FConnectionManager.AcquireConn1('Conn1'); Conn2 := FConnectionManager.AcquireConn2('Conn2'); qry1 := TFDQuery.Create(nil); qry2 := TFDQuery.Create(nil); qry1.Connection := Conn1; qry2.Connection := Conn2; ArqXML := TStringList.Create; { Encontra os XML que foram emitidos } try qry1.Close; qry1.SQL.Clear; qry1.SQL.Add('select' + ' nf_numero,' + ' nf_nfe_chave_identificacao' + ' from nf' + ' where NF_MODELO = ' + QuotedStr('SAT') + ' and nf_cancelada = ' + QuotedStr('N') + ' and nf_nfe_enviado = ' + QuotedStr('S') + ' and NF_DTEMISSAO BETWEEN ' + QuotedStr(sDataInicial) + ' AND ' + QuotedStr(sDataFinal)); qry1.Open; except on E: Exception do begin ShowMessage('Erro: ' + E.Message ); qry1.Close; end; end; { Caso encontre XML inicia exportação } if not qry1.IsEmpty then begin qry1.FetchAll; qry1.First; { Cria a pasta no desktop } if not DirectoryExists(uSysTools.DirDesktop + '\xml_sat') then begin ForceDirectories(uSysTools.DirDesktop + '\xml_sat'); end; while not qry1.Eof do begin try qry2.Close; qry2.SQL.Clear; qry2.SQL.Add('select' + ' NF_NFE_XML' + ' from nf ' + ' where nf_nfe_chave_identificacao = ' + QuotedStr(qry1.Fields[1].Text) + ' and nf_numero = ' + QuotedStr(qry1.Fields[0].Text) + ' and nf_modelo = ' + QuotedStr('SAT')); qry2.Open; except on E: Exception do begin ShowMessage('Erro: ' + E.Message ); qry2.Close; end; end; if not qry2.IsEmpty then begin ArqXML.Clear; ArqXML.Text := qry2.Fields[0].AsString; ArqXML.SaveToFile(uSysTools.DirDesktop + '\xml_sat' + qry1.Fields[1].Text + '.xml'); end; qry1.Next; end; end; finally FreeAndNil(qry1); FreeAndNil(qry2); FreeAndNil(ArqXML); FConnectionManager.ReleaseConn1(Conn1); FConnectionManager.ReleaseConn2(Conn2); end;
-
Boa tarde, gero os blocos C800 e C850 do sped fiscal, mas estou enfrentando problemas de performance pois o numero de registros é muito grande. Estou tentando realizar a geração através do componente ACBrSPEDFiscal1 para melhorar. Tentei gerar apenas o bloco C800 porém ele salva apenas o arquivo sem as informações dentro. ( Arquivo em anexo ) Alguém poderia me dizer onde estou errando? Já olhei o exemplo mas não consegui descobrir onde estou errando.
Outra duvida é a seguinte, quando vou passar o COD_SIT se eu utilizo COD_SIT.sdRegular; ou COD_SIT:= sdRegular; das duas formas ele da erro. Qual a forma correta de utilizar?
with ACBrSPEDFiscal1 do begin DT_INI := DtInicial.Date; DT_FIN := DtFinal.Date; Arquivo:='C:\Users\Felipe\Desktop\teste.txt'; LinhasBuffer := StrToIntDef('10', 0); IniciaGeracao; while not qryC800.EOF do begin with Bloco_C.RegistroC800New do begin COD_MOD:='59'; //COD_SIT.sdRegular; NUM_CFE := qryC800.Fields[2].Text; DT_DOC := StrToDate(qryC800.Fields[3].Text); VL_CFE := StrToFloat(qryC800.Fields[4].Text); VL_PIS := StrToFloat(qryC800.Fields[5].Text); VL_COFINS := StrToFloat(qryC800.Fields[6].Text); CNPJ_CPF := qryC800.Fields[7].Text;; NR_SAT := qryC800.Fields[8].Text; CHV_CFE := qryC800.Fields[9].Text; VL_DESC := StrToFloat(qryC800.Fields[10].Text); VL_MERC := StrToFloat(qryC800.Fields[11].Text); VL_ICMS := StrToFloat(qryC800.Fields[12].Text); end; qryC800.Next; WriteBloco_C(False); end; WriteBloco_C(True); SaveFileTXT; ShowMessage('finalizado'); end;
-
Para solucionar o caso acima, basta declarar na uses a biblioteca: pcnConversao e fazer as respectivas conversões
CST := CSTICMSToStr(ACBrSAT.CFe.Det.Items[a].Imposto.ICMS.CST); CSOSN := CSOSNIcmsToStr(ACBrSAT.CFe.Det.Items[a].Imposto.ICMS.CSOSN);
-
Boa noite, tenho vários arquivos XML mod 59 (CFe) e preciso importar as informações. Estou usando o componente ACBrSAT para me auxiliar mas estou tendo dificuldade para a leitura de algumas tags por ex: CST e CSOSN do ICMS
CST := ACBrSAT.CFe.Det.Items[a].Imposto.ICMS.CST; CSOSN := ACBrSAT.CFe.Det.Items[a].Imposto.ICMS.CSOSN;
Quando tento receber o valor na variável desta forma eu não consigo, alguém poderia me dar uma luz? Possuo o mesmo tipo de problema com o pis e cofins. Consultei os arquivos de exemplo mas não encontrei de importação.
Extrair xml de campo blob
em Object Pascal - Delphi & Lazarus
Postado
Não fui eu quem criou o banco e salvou as informações. Estou conectado em um banco de terceiro... Estou tentando adivinhar o que fizeram.