Ir para conteúdo
  • Cadastre-se

dev botao

Contagem de produtos componente ACBRNfe


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

Recommended Posts

Bom dia. Estou implantando uma rotina para emissão de nota de estorno. Já está funcionando,  consigo emitir a nota, porém  fiz os testes com Danfes que contenham apenas um produto.

Nessa rotina, estou utilizando dois componentes ACBRNfe, sendo  que um deles lê o XML da nota a ser estornada e o segundo grava o XML após eu colocar o número da nota a ser emitida e também o CFOP de entrada , justificativa  (inf complementares, nota referenciada  etc.. Os dados do emitente coloco manualmente (banco de dados ) ---  do destinatário e dos produtos, extraio do XML / leitura .

2)   Minha dúvida é a seguinte : Como faço para saber quantos produtos existem no Danfe ( que então foi lido ) para que eu possa fazer um laço e " pegar " todos os produtos nele (Danfe) constantes ?

Estou tentando assim :   if AcbrNfe2.NotasFiscais.Items[0].NFe.Det.Count > 0 then
    ShowMessage ('Tem produtos');

Porém eu precisava saber " quantos " são os produtos . Obrigado pela atenção.

Nota : pesquisei anteriormente no forum nada encontrei a respeito.

 

 

Link para o comentário
Compartilhar em outros sites

Rotina onde incluo o produto :

 

{Dados dos produtos}

  ACBrNFe1.NotasFiscais[0].NFe.Det.Clear;

  ACBrNFe1.NotasFiscais[0].NFe.Det.Add;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.cProd  :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.cProd ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.nItem  :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.nItem ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.cEAN   :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.cEAN  ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.xProd  :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.xProd ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.NCM    :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.NCM   ;

{Colocar uma escolha para diversos CfopS}

  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.CFOP   := '1101';

  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.uCom   :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.uCom  ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.qCom   :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.qCom  ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.vUnCom :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.vUnCom ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.vProd  :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.vProd ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.uTrib  :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.uTrib  ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.qTrib  :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.qTrib  ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.vUnTrib :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.vUnTrib ;
  ACBrNFe1.NotasFiscais[0].NFe.Det[0].Prod.cEANTrib :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[0].Prod.cEANTrib ;
end;

Link para o comentário
Compartilhar em outros sites

Muito bem, independentemente de ficar aguardando alguma resposta, continuei a fazer testes e já consegui a forma de saber quantos produtos constam da nota :

A rotina que usei ( num buttom ) é a seguinte :

var
  Itens : Integer;
begin
  Itens := 0;

//    ..........   leiitura do xml ..... 


  if  AcbrNfe2.NotasFiscais[0].NFe.Det.Count > 0 then
    ShowMessage ('Número de produtos  : ' +
      InttoStr (AcbrNfe2.NotasFiscais[0].NFe.Det.Count) );
end;

Agora se alguém puder me auxiliar, eu gostaria de saber como poderia fazer um laço antes de incluir os produtos no componente , a fim de que eles sejam todos  incluídos .

Obrigado !.

Link para o comentário
Compartilhar em outros sites

  • Solution

Solicito ao Sr. moderador que coloque " Resolvido " no tópico. 

Solução :

{Adiciona produtos}

  Contador := 0;        // variável Integer declarar no início da rotina 
  Itens    := 0;           // variável Integer
  Contador := AcbrNfe2.NotasFiscais[0].NFe.Det.Count ;

  ACBrNFe1.NotasFiscais[0].NFe.Det.Clear;
  While Itens < Contador do
  begin

  ACBrNFe1.NotasFiscais[0].NFe.Det.Add;
  ACBrNFe1.NotasFiscais[0].NFe.Det[Itens].Prod.cProd  :=
    ACBrNFe2.NotasFiscais[0].NFe.Det[Itens].Prod.cProd ;
.................    // outras propriedades preenchidas .....

//   finalzinho da rotina

  Itens    := Itens + 1;
  ShowMessage ('Número de produtos = ' + InttoStr (Contador ) +
    #13 + 'Variável Itens = ' + InttoStr ( Itens ));
  end;
De qualquer forma, ficam meus agradecimentos a alguém que possa haver lido e tido a intenção de ajudar-me ( o que vale é a intencão ).

Abraços a todos .

 

Link para o comentário
Compartilhar em outros sites

Para varrer todos os itens da nota pode fazer assim:

 

for i := 0 to ACBrNFe1.NotasFiscais.Items[0].NFe.Det.Count - 1 do
       begin
           ... //---Fazer sua rotina...

            with ACBrNFe1.NotasFiscais.Items[0].NFe.Det do
                 begin

                     ....

                     ....

                 end;

        end;

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2127 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.