Ir para conteúdo
  • Cadastre-se

  • Este tópico foi criado há 266 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros
Postado

 

Pessoal a 4 horas batendo cabeça e não sei como adicionar itens de um objeto para outro 

 

procedure TForm3.Button2Click(Sender: TObject);
Var I, vIndex: Integer;
Var ACBrNFe1, ACBrNFe2: TACBrNFe;
Var StringStreamIn: TStringStream;
Var Produto: TDetCollectionItem;
Var NotaF: NotaFiscal;
begin
 ACBrNFe1 := TACBrNFe.Create(Self);
 ACBrNFe2 := TACBrNFe.Create(Self);
 Try

  StringStreamIn := TStringStream.Create;
  StringStreamIn.LoadFromFile('D:\A.xml');
  ACBrNFe1.NotasFiscais.LoadFromStream(StringStreamIn);
  FreeAndNil(StringStreamIn);

  StringStreamIn := TStringStream.Create;
  StringStreamIn.LoadFromFile('D:\B.xml');
  ACBrNFe2.NotasFiscais.LoadFromStream(StringStreamIn);
  FreeAndNil(StringStreamIn);

  with ACBrNFe2.NotasFiscais.Items[0].NFe do begin
   for I := 0 to Det.Count - 1 do begin
 //   vIndex := ACBrNFe1.NotasFiscais.Items[0].NFe.Det.Count;

  {  NotaF := ACBrNFe1.NotasFiscais.Add;
     Produto := NotaF.NFe.Det.New;
     Produto.Assign(Det.Items[I]);  Erro }

   // ACBrNFe1.NotasFiscais.Items[0].NFe.Det.New.Assign(Det.Items[I]); Erro

//    ACBrNFe1.NotasFiscais.Items[0].NFe.Det.Items[vIndex].Prod.nItem := vIndex + 1;
   End;
  end;

  ACBrNFe1.NotasFiscais.Items[0].GerarXML;
  ACBrNFe1.NotasFiscais.Items[0].GravarXML('D:\XMLteste.XML');

 Finally
  ACBrNFe1.Free;
  ACBrNFe2.Free; // Erro
 End;
end;

 

  • Consultores
Postado

Mas o que tu quer fazer em si?

copiar o objeto TNFe inteiro de um para outro ou é outra coisa?

tentei entender mas não consegui o seu código o que deseja fazer

 

mas já vai uma observação não use WITH vai se perder você e o código

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros
Postado
13 horas atrás, Juliomar Marchetti disse:

Mas o que tu quer fazer em si?

copiar o objeto TNFe inteiro de um para outro ou é outra coisa?

tentei entender mas não consegui o seu código o que deseja fazer

 

mas já vai uma observação não use WITH vai se perder você e o código

isso mesmo copiar uma objeto de um TACBrNFe para outro porém usar "Assign" e pegar a referencia e isso está gerando os problemas

  • 2 semanas depois ...
  • Consultores
Postado
Em 04/07/2025 at 11:42, luciano_f disse:

isso mesmo copiar uma objeto de um TACBrNFe para outro porém usar "Assign" e pegar a referencia e isso está gerando os problemas

pesquisa por assign no fórum inteiro

lembro de ver alguém enviar um código com correção , vale a pena validar 

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros
Postado
13 horas atrás, Juliomar Marchetti disse:

pesquisa por assign no fórum inteiro

lembro de ver alguém enviar um código com correção , vale a pena validar 


já fiz essa pesquisa e não consegui encontrar algo que faça o que eu preciso

  • Consultores
Postado
6 horas atrás, luciano_f disse:


já fiz essa pesquisa e não consegui encontrar algo que faça o que eu preciso

certeza?
abre a pesquisa e veja a primeira ou segunda opção

https://www.projetoacbr.com.br/forum/search/?q=assign&quick=1

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • 2 meses depois ...
  • Membros
Postado (editado)

Pessoal eu tinha resolvido esse questão com o seguinte codigo 

 

Procedure P_CloseAcbrNFe(Origem, Destino: TACBrNFe);
Var I, vIndex: Integer;
Begin
 with Origem.NotasFiscais.Items[0].NFe do begin

  for I := 0 to Det.Count - 1 do begin
   vIndex := Destino.NotasFiscais.Items[0].NFe.Det.Count;
   
   Destino.NotasFiscais.Items[0].NFe.Det.Add(Det.Items[I]);
   Destino.NotasFiscais.Items[0].NFe.Det.Items[vIndex].Prod.NItem := vIndex + 1;
  end;

 end;
End;

Estava funcionado 100%

porém ao atualizar para ultima versão de ontem dá erro ao fechar o Formulario onde esse codigo é executado
o erro é interno no ACBR ao destruir 
Como eu deve fazer para clonar ?

Eu já cansei de pesquisar porém o que de fato preciso não encontrei se existe me passe o topico extado onde está o problema pois estou cego aqui.

certeza?
abre a pesquisa e veja a primeira ou segunda opção

https://www.projetoacbr.com.br/forum/search/?q=assign&quick=1

Erro em :

destructor NotaFiscal.Destroy;
begin
  // Xml
  FNFeW.Free;
  FNFeR.Free;
  // Ini
  FNFeIniR.Free;
  FNFeIniW.Free;

  FNFe.Free; Erro AccessViolation

  inherited Destroy;
end;

 

 

Editado por luciano_f
  • Membros
Postado (editado)
4 minutos atrás, Fabio Franzini - Compsoft disse:

Ao destruir, Destino e Origem, inverte a ordem para ver se da certo.

os dois objetos estão no formulario e não faço free neles de forma manual

porém acabei de tentar sua ideia porém mesmo erro

o problema que esse codigo meu não clona ele apenas passar de um para outro que queria uma forma de Clonar de fato e poder destruir a origem e deixar apenas o destino porem usando "Assign"  isso não é possivel  e esse Metodo ADD internamente acredito usar um Assign

Editado por luciano_f
Postado

  

17 horas atrás, luciano_f disse:

os dois objetos estão no formulario e não faço free neles de forma manual

Vou deixar aqui minha Sugestão baseado na minha opinião, sem entrar no mérito do que é certo ou errado.

Primeiramente o ACBrNFe1.NotasFiscais.LoadFromStream(StringStreamIn); poderia ser substituído por ACBrNFe1.NotasFiscais.LoadFromFile('D:\A.xml'); simplificando o processo.

Em segundo lugar, nunca usar componentes que fazem processos complexos não visuais adicionados em formulário. Criar tais componentes somente no inicio do processo e garantindo que sejam destruídos ao final do processo, isso evita de ficar algum lixo ou configuração alterada em relação a emissão anterior.

Em terceiro lugar, porque não usar RTTI para clonar dados de uma Nota para outra.

  • Obrigado 1
  • Consultores
Postado

e mais uma , note que tem a opção loadfromjson e savetojson

veja com foi feito, pois é algo com o que precisa fazer

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros
Postado
Em 17/09/2025 at 11:10, everson.turossi disse:

  

Vou deixar aqui minha Sugestão baseado na minha opinião, sem entrar no mérito do que é certo ou errado.

Primeiramente o ACBrNFe1.NotasFiscais.LoadFromStream(StringStreamIn); poderia ser substituído por ACBrNFe1.NotasFiscais.LoadFromFile('D:\A.xml'); simplificando o processo.

Em segundo lugar, nunca usar componentes que fazem processos complexos não visuais adicionados em formulário. Criar tais componentes somente no inicio do processo e garantindo que sejam destruídos ao final do processo, isso evita de ficar algum lixo ou configuração alterada em relação a emissão anterior.

Em terceiro lugar, porque não usar RTTI para clonar dados de uma Nota para outra.

Em terceiro lugar, porque não usar RTTI para clonar dados de uma Nota para outra.

Poderia postar um codigo que faz isso ?

  • Consultores
Postado
  • Curtir 1
  • Obrigado 1

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 266 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.