Fórum Passando objetos num loop com: TStringlist >AddObject(Value, MinhaClasse ) #586566
08/10/2017
0
Olá caros amigos, estou com um método que não estou conseguindo resolver
Estou num loop executando o preenchimento de minha classe até aí tudo normal, e estou colocando ela no final do looping em uma lista:
TStringlist >AddObject(Value, MinhaClasse ) ;
var wObjetoXML : TLm_bkpdfe;
..//..
if wListaXMLs.IndexOf(wObjetoXML.Chave) <0 then
wListaXMLs.AddObject(wObjetoXML.Chave, wObjetoXML);
O problema ocorre quando vou ler essa lista e todos os objetos adcionados estão com o mesmo valor da ultima vez que foi dado um ADD na lista
Vi no Wacth que o ponteiro esta com mesmo valor de referencia para tods os objetos asdicionados, como faço para dar um ADDOBJECT com a classe e obter os valores nelas passados para cada volta do looping?
Espero ter me expressado adequadamente
Saudações.
Estou num loop executando o preenchimento de minha classe até aí tudo normal, e estou colocando ela no final do looping em uma lista:
TStringlist >AddObject(Value, MinhaClasse ) ;
var wObjetoXML : TLm_bkpdfe;
..//..
if wListaXMLs.IndexOf(wObjetoXML.Chave) <0 then
wListaXMLs.AddObject(wObjetoXML.Chave, wObjetoXML);
O problema ocorre quando vou ler essa lista e todos os objetos adcionados estão com o mesmo valor da ultima vez que foi dado um ADD na lista
Vi no Wacth que o ponteiro esta com mesmo valor de referencia para tods os objetos asdicionados, como faço para dar um ADDOBJECT com a classe e obter os valores nelas passados para cada volta do looping?
Espero ter me expressado adequadamente
function fXMLEnvio: boolean; //Aqui a classe é atribuida os valores: wObjetoXML : TLm_bkpdfe;
var wChaveAux: string;
begin
Result := False;
with wObjetoXML do
begin
wErro := FindFirst(wPathFile+'\\'+ Env_, faAnyFile, wFRec);
wOK := wErro = 0;
while wOK do
begin
strAUX := '';
pIniciaCampos;
wXmlName := wFRec.Name;
Chave := fGetChaveFilename(wXmlName);
if Pos('Env_',wXmlName) > 0 then
begin
wZipName := wPathFile+'\\'+ChangeFileExt(wXmlName,'.zip');
fZipFile(wZipName, wPathFile+'\\'+wXmlName);
XMLArq.LoadFromFile(wPathFile+'\\'+wXmlName);
wNodeXML := XMLArq.documentElement;
wNodeXML.ChildNodes.Count;
wNodeXML := wNodeXML.ChildNodes.First;
if Assigned(wNodeXML) then
begin
if Assigned(wNodeXML) and (wNodeXML.NodeName = 'NFe') then
begin
wNodeXML := wNodeXML.ChildNodes.First;
if Assigned(wNodeXML) and (wNodeXML.NodeName = 'infNFe') then
begin
wChaveAux := wNodeXML.AttributeNodes.FindNode('Id').text;
wChaveAux := Copy(wChaveAux,4,44);
wNodeXML := wNodeXML.ChildNodes.First;
if Assigned(wNodeXML) and (wNodeXML.NodeName = 'ide') then
begin
Idf_documento := StrToInt64Def(funcvarXML(wNodeXML.ChildNodes['nNF']),0);
Dataemissao := DateXMLToDate(funcvarXML(wNodeXML.ChildNodes['dhEmi']));
Tipoambiente := funcvarXML(wNodeXML.ChildNodes['tpAmb']); // Tipo de Ambiente da Nota Fiscal(Produção/Homologação)
if Tipoambiente = '1' then
Tipoambiente := 'Produção'
else
Tipoambiente := 'Homologação';
Xmlenvio := TFileStream.Create(wZipName, fmOpenRead);
if Chave <> wChaveAux then
ShowMessage('Chaves do arquivo XML diferem');
end;
end;
end
else
begin
if Assigned(wNodeXML) and (wNodeXML.NodeName = 'infNFe') then
begin
// ShowMessage('Nota de envio ');
wChaveAux := wNodeXML.AttributeNodes.FindNode('Id').text;
wChaveAux := Copy(wChaveAux,4,44);
wNodeXML := wNodeXML.ChildNodes.First;
if Assigned(wNodeXML) and (wNodeXML.NodeName = 'ide') then
begin
Idf_documento := StrToInt64Def(funcvarXML(wNodeXML.ChildNodes['nNF']),0); // Código sequencial NFe
Dataemissao := DateXMLToDate(funcvarXML(wNodeXML.ChildNodes['dhEmi']));
Tipoambiente := funcvarXML(wNodeXML.ChildNodes['tpAmb']); // Tipo de Ambiente da Nota Fiscal(Produção/Homologação)
if Tipoambiente = '1' then
Tipoambiente := 'Produção'
else
Tipoambiente := 'Homologação';
Xmlenvio := TFileStream.Create(wZipName, fmOpenRead);
if Chave <> wChaveAux then
ShowMessage('Chaves do arquivo XML diferem');
end;
end;
end;
if wListaXMLs.IndexOf(wObjetoXML.Chave) <0 then
wListaXMLs.AddObject(wObjetoXML.Chave, wObjetoXML); //Depois de ter atribuidos os valores, dou addObjetc na lista com :wObjetoXML
end;
end;
wErro := FindNext(wFRec);
strAUX := FileSearch(wZipName, wPathFile);
wOK := (wErro = 0) ;
Xmlenvio.Free;
if FileExists(strAUX) then
if DeleteFile(strAUX)then
AddLog('LogDelete',ExtractFileDir(strAUX),'DeleteFile: '+strAUX );
end;
Result := True;
end;
end;
(*Depois faço a lietura da lista *)
//O método ainda não retorna nada pq não está pronto...
function pGravaXML: boolean; //Aqui gravo os dados da lista, porém todos os objetos tem os valoreas do ultimo objeto adcionado
var i: Integer;
begin
if not Assigned(wListaXMLs) then
Exit;
for I := 0 to wListaXMLs.Count-1 do
begin
wDaoXML.fCarregaXMLEnvio(wListaXMLs.Objects[i] as TLm_bkpdfe);
end;
end;
Saudações.
Anderson Gaitolini
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)