Ir para conteúdo
  • Cadastre-se

dev botao

Nota a partir de uma TreeView


Ver Solução Respondido por EMBarbosa,
  • Este tópico foi criado há 1393 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia a Todos !

Tenho um programa que ler um xml de uma nota fiscal e põe em uma treeview, estou tentando agora fazer o caminho de volta ou seja gravar do treeview para o

xml, porém no momento que mando gravar a partir do  treeview, o que é gravado é uma arvore de dados, porém não é um XML, baixei e instalei o ACBR, em minha maquina tive alguma dificuldade mas as superei, só que agora eu vi que o componente ACBrNFe1 não é um treeview, mas se mandar ele gravar ele grava um

xml de fato que é o que eu preciso, dai eu tenho como ler mais não gravo, eu gravo mas não mostro, tem algum comando do tipo assign, que eu possa transportar todo o conteúdo de uma treeview para o componente ACBrNfe1, tipo    ACBrNe1.Assign(Treeview1), (Já tentei isso não deu certo não), e já tentei um while percorrendo toda treeview mas também não deu certo, reconheço que minha experiencia em  manusear o treeview é pouquissima, se tiver como me ajudar mostrando como posso fazer isso em comandos agradeço muito desde já!

 

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

Boa tarde Rogério.

24 minutos atrás, Rogério Vieira de Melo disse:

mponente ACBrNfe1, tipo    ACBrNe1.Assign(Treeview1),

   Não existe esse método. Então algo assim realmente não vai funcionar... O componente não foi feito para trabalhar com treeview genérico e sim com uma estrutura bem definida que é a da NF-e .

25 minutos atrás, Rogério Vieira de Melo disse:

já tentei um while percorrendo toda treeview mas também não deu certo

   Uma treeview nada mais é que uma árvore de dados, por isso quando você mandou gravar foi gerado uma árvore de dados. O XML pode ser representado como árvore de dados, por isso você consegue transferir fazendo a leitura. Então vai depender de como você programa seu while já que não é uma estrutura linear.

   Teoricamente bastaria você fazer o caminho inverso do que você fez na leitura para pegar do xml e jogar no treeview.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Administradores

Tópico movido para a área do SAC, para que o SLA de respostas seja considerado

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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 !!

Link para o comentário
Compartilhar em outros sites

2 horas atrás, EMBarbosa disse:

Boa tarde Rogério.

   Não existe esse método. Então algo assim realmente não vai funcionar... O componente não foi feito para trabalhar com treeview genérico e sim com uma estrutura bem definida que é a da NF-e .

   Uma treeview nada mais é que uma árvore de dados, por isso quando você mandou gravar foi gerado uma árvore de dados. O XML pode ser representado como árvore de dados, por isso você consegue transferir fazendo a leitura. Então vai depender de como você programa seu while já que não é uma estrutura linear.

   Teoricamente bastaria você fazer o caminho inverso do que você fez na leitura para pegar do xml e jogar no treeview.

Boa tarde usuário SAC, desculpe não sei o seu nome por isso estou me referindo com a informação que tem ai!

Deixa eu lhe explicar o que tenho na mão, estou na obrigação de desenvolver um soft que tire um peso do departamento fiscal aqui de onde eu trabalho, o problema é que nos somo um bureau de serviços contábeis, e recebemos algumas milhares de notas fiscais de balcão, e muitas delas são de restaurantes, e estas normalmente vem com Descontos no corpo da nota, então minha missão é criar um ROBÔ que leia a nota verifique se tem desconto e retire as linhas de desconto ou o desconto do item, eu até já consegui fazer isso porém quado dou um treeview.savetofile(nomarq) o que é gravado não é nem de perto o XML da nota fiscal pois o treeview faz o favor de retirar as tags, não tenho muita familiaridade com o treeview dai pensei que o ACBRNfe poderia me ajudar pois ele lé um XML e grava o XML, porém eu preciso mostrar o que eu estou lendo, e a forma mais pratica seria um Treeview1 porém isso esta se mostrando uma coisa quase que impossível, pois na minha cabeça bastava ler o XML com o Treeview fazer as alterações necessárias dai então preservando toda estrutura do XML mandar para o ACBRNFE, e dai então poder gravar!

Não teria como fazer isso não, como é um While não linear? desculpe a pergunta pois em DELPHI sou novo!

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Você poderia carregar no componente esses XML e remover no componente e pedir para salvar novamente

mas vai estar alterando o xml original e válido

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

12 minutos atrás, Juliomar Marchetti disse:

Você poderia carregar no componente esses XML e remover no componente e pedir para salvar novamente

mas vai estar alterando o xml original e válido

Vc terial algum programa exemplo que faça esta operação de leitura e gravação pois estou apanhando aqui com a leitura do ACBR

Link para o comentário
Compartilhar em outros sites

  • Consultores
1 hora atrás, Rogério Vieira de Melo disse:

desculpe não sei o seu nome

Se está falando de mim, está na assinatura. Meu nome é Elton.

1 hora atrás, Rogério Vieira de Melo disse:

estou na obrigação de desenvolver um soft que tire um peso do departamento fiscal aqui de onde eu trabalho, o problema é que nos somo um bureau de serviços contábeis, e recebemos algumas milhares de notas fiscais de balcão, e muitas delas são de restaurantes, e estas normalmente vem com Descontos no corpo da nota, então minha missão é criar um ROBÔ que leia a nota verifique se tem desconto e retire as linhas de desconto ou o desconto do item, eu até já consegui fazer isso porém quado dou um treeview.savetofile(nomarq) o que é gravado não é nem de perto o XML da nota fiscal pois o treeview faz o favor de retirar as tags,

1 hora atrás, Rogério Vieira de Melo disse:

pois na minha cabeça bastava ler o XML com o Treeview fazer as alterações necessárias dai então preservando toda estrutura do XML

Não é bem assim que funciona. A partir do momento que você jogou os dados no treeview, não é mais um xml. Passa a ser uma árvore de dados ligada a um componente visual. O TreeView em si não conhece XMLs de NF-e e por isso não vai saber como gerar um. Você deve ter um código que alimenta o treeview ou então ele consegue ler XMLs genéricos e por isso a primeira parte do que você deseja funciona, mas não o final.

1 hora atrás, Rogério Vieira de Melo disse:

pensei que o ACBRNfe poderia me ajudar pois ele lé um XML e grava o XML,

Realmente, acho muito mais fácil você trabalhar com o ACBrNFe. Ele vai ler o XML e mostrar pra você os dados em formato de classes. Daí você pode trabalhar com todos os dados que precisar da NFe e modificá-los nas classes. Finalmente, você poderá gerar um xml que, embora não seja um documento fiscal, seguirá os padrões da Sefaz para uma NFe e de forma geral poderá ser lido por qualquer sistema que consiga ler uma NF-e.

1 hora atrás, Rogério Vieira de Melo disse:

porém eu preciso mostrar o que eu estou lendo, e a forma mais pratica seria um Treeview1

Isso depende do ponto de vista. Qual o objetivo de mostrar o que está sendo lido? Não seria melhor apresentar os dados no formato de DANFe? Quem vai acompanhar o que está sendo lido e com quê objetivo?

 

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Bom quem vai acompanhar é um operador do departamento fiscal, porém o soft ele precisa ter a possibilidade de ler apenas um documento de N.Fiscal ou uma pasta cheia deles, no caso de ser lido apenas um documento o operador ler, abre o documento na parte dos itens, identifica que existe ou não o desconto, clica no botão de retirar o desconto, dai então o desconto é retirado da nota, e na operação seguinte ele manda gravar o novo xml já sem o desconto, para posteriormente ele ser processado pelo ERP que faz todas as operações das empresas, eu já pensei em ler e gravar em tabelas, o problema é que o corpo da nota nem sempre tem os mesmo campos, a situações que tem campos a mais e situações que tem campos a menos, pois alguns deles são opcionais, dai então fica difícil preparar uma tabela que nem sempre o campo vai estar presente!

 

Link para o comentário
Compartilhar em outros sites

  • Consultores
Em 18/05/2020 at 15:49, Rogério Vieira de Melo disse:

eu já pensei em ler e gravar em tabelas, o problema é que o corpo da nota nem sempre tem os mesmo campos, a situações que tem campos a mais e situações que tem campos a menos, pois alguns deles são opcionais, dai então fica difícil preparar uma tabela que nem sempre o campo vai estar presente!

Minha sugestão é você fazer a leitura usando o ACBrNFe.

Daí pegar os dados do ACBrNFE e jogar pra exibição conforme você quiser. Pode ser um treeview, ou algo diferente. Na minha cabeça a ideia seria um DANFe, mas eu posso não ter entendido o seu objetivo.

Daí, depois de alterado, (ou durante a alteração caso prefira), você volta com os dados ao ACBrNFe.

Por fim o ACBrNFe gera o arquivo XML novamente.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Em 18/05/2020 at 12:48, EMBarbosa disse:

Boa tarde Rogério.

   Não existe esse método. Então algo assim realmente não vai funcionar... O componente não foi feito para trabalhar com treeview genérico e sim com uma estrutura bem definida que é a da NF-e .

   Uma treeview nada mais é que uma árvore de dados, por isso quando você mandou gravar foi gerado uma árvore de dados. O XML pode ser representado como árvore de dados, por isso você consegue transferir fazendo a leitura. Então vai depender de como você programa seu while já que não é uma estrutura linear.

   Teoricamente bastaria você fazer o caminho inverso do que você fez na leitura para pegar do xml e jogar no treeview.

 

Em 18/05/2020 at 14:31, Juliomar Marchetti disse:

Você poderia carregar no componente esses XML e remover no componente e pedir para salvar novamente

mas vai estar alterando o xml original e válido

 

Em 19/05/2020 at 17:30, EMBarbosa disse:

Minha sugestão é você fazer a leitura usando o ACBrNFe.

Daí pegar os dados do ACBrNFE e jogar pra exibição conforme você quiser. Pode ser um treeview, ou algo diferente. Na minha cabeça a ideia seria um DANFe, mas eu posso não ter entendido o seu objetivo.

Daí, depois de alterado, (ou durante a alteração caso prefira), você volta com os dados ao ACBrNFe.

Por fim o ACBrNFe gera o arquivo XML novamente.

 Estou tentando fazer isso neste momento de ler  ACBRNfe, mando para algumas tabelas, e agora estou tentando voltar para o ACBRNfe e não estou conseguindo,

A grosso modo estou fazendo assim

Lendo o ACBRNFE

 Memo1.Lines.Text:=AcbrNfe1.NotasFiscais.Items[0].GerarNfeini;

Com isso boto todo o conteúdo do ACBrNe1 para o Memo1, faço as alterações

Tentei  

   ACbrNfe1.NotasFiscais.clear;

    For x:=0 to  Memo1.Lines.Count-1 do

         ACbrNfe1.NotasFiscais.Items[0]:= Memo1.Lines.String[x];

Não funciona! 

Como faço para botar dentro do ACBrNfe1 o Conteúdo de um MemoEdit??

 

 

     

 

Link para o comentário
Compartilhar em outros sites

Não é bem assim! De fato eu tenho uma quantidade enorme de Notas fiscais de vários restaurantes porém o meu objetivo é ler estas notas uma por

uma e no caso da nota ter descontos, eu tenho que retirar este registro que tem o desconto, quando o desconto for igual ao valor do item, ou zerar o desconto e recalcular o valor total da nota, eu não sei porque a contadora faz isso porém isso é feito hoje manualmente, e o que eu preciso é que um programa passe a fazer isso pois não se trata de uma ou duas notas são mais de 15 mil notas, são 3 aux. contabeis fazendo isso quando poderiam estar fazendo outros procedimentos, dai o que foi que eu fiz, eu estou lendo o xml da nota fiscal

ACBRNfe1.NotasFiscais,LoadFromFile('NFEnnnnnnnnn.xml');

Após ler, eu converto os registros de itens e do total da nota em duas tabelas pois é nelas que eu vou mexer,

Feito isso eu dou o seguinte procedimento, para os itens em que o desconto é o mesmo valor do produto, eu cancelo o item

para os items que o valor do desconto é menor que o valor do item, eu subtraio o desconto do valor do item, recalculo o total e 

esta pronta a minha nota, agora eu tenho que mandar de volta para o XML,  dai eu mando os dados para um MemoEdit, com todos os dados

que o XML original tem, exceto os registros que foram cancelados e faço a leitura do ACBNfe1.

ACBrNfe1.NotasFiscais.clear;

ACBrNfe1.NotasFiscais.Add;

ACBrNfe1.NotasFiscais.Items[0].LerArqIni(Memo1.Lines.Text);

O erro que estava danado de (Linst Index Out Of Bounds(0)) Não esta dando mais pois acrescentei o AcbrNfe1.NotasFiscais.Add;

Porém não esta fácil pois quando vou olhar o XML resultante do comando ACBRNfe1.NotasFiscais.GravaXML('NomeArquivoDestinoXML');

Tenho a triste surpresa de que o XML final contem, Identificador, Contem Emitente, contem Destinatário. dai vem o total, e os dados finais da nota ou seja simplesmente os dados dos items que estão no MemoEdit, foram simplesmente ignorados!

Isso tem algum jeito de resolver?

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Rogerio. tu vai usar esse xml para que? pois sabe que ele não é mais válido após essas mudanças.

sabe que pra tu conseguir salvar será sem assinar ou validar qualquer coisa com os schemas.

enfim qual será a finalidade dessas mudanças o porque?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

A finalidade deles é usa-los para serem importados para o Sistema de Contabilidade da Empresa pois este sistema importa o XML da Nota fiscal, mas se importar com os Descontos isso só atrapalha, eles não servem mais para serem validados ou ser mandos para a fazenda porém são a base de entrada de dados para a contabilidade!, e como eu já disse hoje ficam 3 pessoas só para excluir e alterar os dados de forma que a entre na contabilidade apenas os dados que interessam!

Link para o comentário
Compartilhar em outros sites

Bom, eu não sei lhe explicar detalhes sobre este procedimento contábil, porém é que eu estou com esta batata quente na mão, que é uma forma de fazer com que estes descontos que ocorrem em notas de balcão de restaurantes, saiam dos XML, para que a contabilidade possa dar uma tarefa de certa forma até mais digna para estas 3 pessoas do que esta editando xml por xml para retirar os descotos destas notas de balcão e dai então poder importar para o sistema de contabilidade sem estes registros ou sem estes descontos !

Infelizmente já havia até conseguido fazer isso com a treeview porém o componente treeview ler uma coisa e salva outra, ou seja ler um xml mas não salva um XML com o ACBRNfe eu Leio o XML e salvo o XML com tanto que eu não mexa nele! e se eu não posso mexer não adiantou muito para meu

objetivo!

Infelizmente!

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Rogério,

Você pode usar o ACBrNFe para ler o XML da nota, fazer as alterações que deseja e gerar o XML novamente.

Mas esse XML alterado não tem nenhuma validade jurídica, uma vez que ele não condiz com a verdade, ou seja, não é o mesmo que foi enviado para a SEFAZ e por esta autorizado.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Boa tarde Italo, pois é exatamente isso que estou tentando fazer, para lhe explicar o que estou fazendo:

Estou lendo o XML com o componente ACBRNfe, depois que leio este XML, recupero os registros de lançamentos de itens da nota fiscal, juntamente com o registro do Total da nota em duas tabelas, uma para os itens e outra para o total, dai então faço as alterações, uma delas é o seguinte nas notas em que o desconto dado ao item seja igual ao valor total do item ou seja este item esta nulo, eu excluo este registro, nos outros que o desconto é menor eu deduzo do valor total do item o desconto e zero o campo desconto, depois disso re-calculo os item e gravo um novo valor do total, até ai esta tudo bem, feito tudo isso eu estou mandando os dados de volta para o ACBRNFE

ACBrNfe1.NotasFiscais.Clear;

ACBrNfe1.NotasFiscais.Add;

ACBrNfe1.NotasFiscais.Items[0].LerArqIni(Memo1.Lines.text);

ACBRNfe1.NotasFiscais.GravaXML('arquivo_destino.xml');

Aparentemente tudo teria dado certo, só que quando fui conferir o arquivo_destino.xml, notei que simplesmente os itens não estão mais presente, embora que no memo1 eu vejo lá os itens!

Tem alguma forma de gravar estes dados de forma que os itens sejam gravados também?

Link para o comentário
Compartilhar em outros sites

Juliomar muito obrigado mesmo por estar respondendo as minhas indagações!

O problema é que eu estou usando os componentes ACBR a menos de um mês, e não estou bastante familiarizado com eles, e estou sentindo muita dificuldade para chegar nos meus objetivos, por exemplo no caso mesmo que o desconto do item é igual ao valor total do item, eu preciso excluir este registro

Eu tentei mas não encontrei um comando do tipo    ACBrNfe1.NotasFiscais.Items[0].Delete;

Como seria possível deletar um item existente no XML que esta dentro do ACBRNfe1?

Já tentei ver nos exemplos, só que acho que isso é uma coisa tão inusitada que não tem exemplo lá disso, pelo menos eu não vi!

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Rogério,

Ao carregar o XML de uma nota usando o método LoadFromFile as propriedades que representam as informações da nota são carregadas.

No que diz respeito aos itens temos por exemplo:

ACBrNFe1.NotasFiscais.Items[0].NFe.Det.Items[ x ].Prod.vProd

Onde "x" varia de zero até a quantidade de itens -1 e vProd temos o valor do produto (quantidade * valor unitário).

É importante que você tenha em mãos o manual da NF-e que contem o layout do XML para saber os demais campos.

Detalhe importante a nomenclatura usada no componente é a mesma do manual.

Na linha abaixo estou lendo o valor do desconto do item "x" e armazenando na variável DescontoDoItem:

DescontoDoItem := ACBrNFe1.NotasFiscais.Items[0].NFe.Det.Items[ x ].Prod.vDesc;

Na linha abaixo estou atribuindo um novo valor para o desconto do item "x":

ACBrNFe1.NotasFiscais.Items[0].NFe.Det.Items[ x ].Prod.vDesc := 0;

Fácil, não acha?

Desta forma eu consigo ler todas as informações e fazer as alterações que eu julgar necessário.

 

Outro exemplo agora com o total do desconto:

DescontoTotal := ACBrNFe1.NotasFiscais.Items[0].NFe.Total.ICMSTot.vDesc;

ACBrNFe1.NotasFiscais.Items[0].NFe.Total.ICMSTot.vDesc := 0;

 

Observação: como estou carregando uma nota por vez e antes de carregar uma nota é executado:

ACBrNFe1.NotasFiscais.Clear;

O índice do primeiro Items sempre vai ser zero.

 

Feita as alterações basta salvar o XML novamente de preferencia com outro nome usando o método GravarXML que você já conhece.

No meu entendimento você esta fazendo uma tempestade em um copo d'água por algo muito simples.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1393 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.