Ir para conteúdo
Fórum Script Brasil
  • 0

ACBr SAT


anabon

Pergunta

Boa noite pessoal,

 

  Mais um vez peço a ajuda de vocês....  Estou adaptando o SAT em meu sistema, utilizando DELPHI + ACBr SAT tudo lindo maravilhoso, até tentar emitir mais de um item.  Na parte mais simples do código não sei o que fazer .... já tentei de tudo ... quando não pega somente o ultimo item, da erro de somatória de item ... aparece na tag  nitem uma contagem tipo 34.

   Desde já peço desculpas se for muito iniciante a solução, mas realmente estou batendo a cabeça... Uso Delphi RAD 10.2, banco firebirb. Segue abaixo parte do codigo que acredito que esteja o erro.

  Desde já agradeço imensamente quem puder me ajudar 
 

 Loops := max(Trunc(FrmConfig_SAT.seItensVenda.Value / 3)-1, 0);

    ClientDataSet2.Open;
    ClientDataSet2.Filter := '[n_pedido] = ' + QuotedStr(FrmVenda_Balcao.lblpedido.Caption);
    ClientDataSet2.Filtered := True; // ativa o filtro

     For A := 0 to loops  do   // Ajuste aqui para vender mais itens

    begin
    with Det.Add do
    begin
      nItem := 1 + (A * 3);
      WHILE NOT ClientDataSet2.Eof DO
      BEGIN
      Prod.cProd := ClientDataSet2.FieldByName('COD_PRODUTO').AsString;
      Prod.cEAN := '6291041500213';
      Prod.xProd := ClientDataSet2.FieldByName('PRODUTO').AsString;
      ClientDataSet3.Open;
      ClientDataSet3.Filter := '[cod_produto] = ' + QuotedStr(ClientDataSet2.FieldByName('cod_produto').AsString);
      ClientDataSet3.Filtered := True; // ativa o filtro
      while not ClientDataSet3.Eof do

 

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

da erro de somatória de item ... aparece na tag  nitem uma contagem tipo 34.

For A := 0 to loops  do 
...
nItem := 1 + (A * 3);

nesse caso A vale 11 ... onde o valor de nItem será 34

não entendi a sua dúvida...

sugiro que voce use o Break Point do Delphi para acompanhar os resultados no código

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite Jhonas,

 

   Obrigada pela atenção. Já usei o black point ... dessa maneira como esta ele sai apenas um item, o que quero é Emitir mais que um ...

 Tentei da seguinte maneira
 

Loops := 0;


    For A := 0 to loops  do // Ajuste aqui para vender mais itens
     Loops := Loops + A;
    begin

    with Det.Add do
    begin
      nItem := A + (A * 3);
     WHILE NOT Frmfinalizar_Venda.ClientDataSet2.Eof DO
      BEGIN
      Prod.cProd :=  Frmfinalizar_Venda.ClientDataSet2.FieldByName('COD_PRODUTO').AsString;
      Prod.cEAN := '6291041500213';
      Prod.xProd := Frmfinalizar_Venda.ClientDataSet2.FieldByName('PRODUTO').AsString;
      Frmfinalizar_Venda.ClientDataSet3.Open;
      Frmfinalizar_Venda.ClientDataSet3.Filter := '[cod_produto] = ' + QuotedStr(Frmfinalizar_Venda.ClientDataSet2.FieldByName('cod_produto').AsString);
      Frmfinalizar_Venda.ClientDataSet3.Filtered := True; // ativa o filtro
      while not Frmfinalizar_Venda.ClientDataSet3.Eof do
      begin
      prod.NCM := Frmfinalizar_Venda.ClientDataSet3.FieldByName('NCM').AsString;
      Prod.CFOP := Frmfinalizar_Venda.ClientDataSet3.FieldByName('cfop').AsString;
      Prod.uCom := Frmfinalizar_Venda.ClientDataSet3.FieldByName('unidade_medida').AsString;
      Frmfinalizar_Venda.ClientDataSet3.Next;
      end;

 

  Mas o retorno que tenho no xml é o seguinte:

    </dest>
      <det nItem="4">
         <prod>
            <cProd>3</cProd>
            <cEAN>6291041500213</cEAN>
            <xProd>X BACON</xProd>
            <NCM>19022000</NCM>
            <CFOP>5405</CFOP>
            <uCom>UN</uCom>
            <qCom>1.0000</qCom>
            <vUnCom>20.00</vUnCom>
            <indRegra>A</indRegra>
            <obsFiscoDet xCampoDet="campo">
               <xTextoDet>texto</xTextoDet>
            </obsFiscoDet>
         </prod>
         <imposto>
            <vItem12741>2.40</vItem12741>
            <ICMS>
               <ICMSSN102>
                  <Orig>0</Orig>
                  <CSOSN>102</CSOSN>
               </ICMSSN102>
            </ICMS>
            <PIS>
               <PISSN>
                  <CST>49</CST>
               </PISSN>
            </PIS>
            <COFINS>
               <COFINSSN>
                  <CST>49</CST>
               </COFINSSN>
            </COFINS>
         </imposto>
         <infAdProd>Informacoes adicionais</infAdProd>
      </det>
      <total>
         <vCFeLei12741>1.23</vCFeLei12741>
      </total>
      <pgto>
         <MP>
            <cMP>01</cMP>
            <vMP>50.00</vMP>
         </MP>
      </pgto>
   </infCFe>
</CFe> )
27/02/18 00:32:41:600 -   Gravando XML Venda enviado: C:\tdbfastfood\Win32\Debug\Enviado\29299698000170\CFe\2018\02\27\AD20180227003241-663874-env.xml
27/02/18 00:32:42:328 - NumeroSessao: 663874 - Resposta:663874|06010|1019|Numeração dos itens não é sequencial crescente||
27/02/18 00:32:42:331 - EACBrSATErro - Nenhum CFe carregado na memória

 

   Desde já agradeço muito que puder me ajudar...

Editado por anabon
Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite,

  Consegui em partes com o seguinte código:
  

  For A := 0 to loops  do // Ajuste aqui para vender mais itens
     Loops := Loops + A;
    begin

    with Det.Add do
    begin
      nItem := A + (A * 0);
     WHILE NOT Frmfinalizar_Venda.ClientDataSet2.Eof DO
      BEGIN
      Prod.cProd :=  Frmfinalizar_Venda.ClientDataSet2.FieldByName('COD_PRODUTO').AsString;
      Prod.cEAN := '6291041500213';
      Prod.xProd := Frmfinalizar_Venda.ClientDataSet2.FieldByName('PRODUTO').AsString;
      Frmfinalizar_Venda.ClientDataSet3.Open;
      Frmfinalizar_Venda.ClientDataSet3.Filter := '[cod_produto] = ' + QuotedStr(Frmfinalizar_Venda.ClientDataSet2.FieldByName('cod_produto').AsString);
      Frmfinalizar_Venda.ClientDataSet3.Filtered := True; // ativa o filtro
      while not Frmfinalizar_Venda.ClientDataSet3.Eof do
      begin
      prod.NCM := Frmfinalizar_Venda.ClientDataSet3.FieldByName('NCM').AsString;
      Prod.CFOP := Frmfinalizar_Venda.ClientDataSet3.FieldByName('cfop').AsString;
      Prod.uCom := Frmfinalizar_Venda.ClientDataSet3.FieldByName('unidade_medida').AsString;
      Frmfinalizar_Venda.ClientDataSet3.Next;
      end;

 Mas ele só me traz o ultimo item ... por exemplo:

X - Salada 15,00

X - Bacon 20,00

---------------------------------------------------------------------

 

Ele só emite o X-Bacon ....

Mas uma vez agradeço muito quem puder me ajudar

 

Link para o comentário
Compartilhar em outros sites

  • 0

nItem := A + (A * 0);

Todo numero multiplicado por zero ( 0 ) sempre será zero ( 0 )

então se voce fizer :

nItem := 1 + ( 1 * 0 )   será 1

nItem := 2 + ( 2 * 0 )   será 2

nItem := 3 + (3 * 0 )   será 3

nItem := 4 + (4 * 0 )   será 4

OBS: Depois de um Comando For ...do  se coloca  o begin .. depois dele voce coloca outros comando

veja alguns exemplos ... a acho que voce esta com dificuldades com o comando FOR

procedure TForm1.Button1Click(Sender: TObject);
var A, Loops, nItem : integer;
begin

   Loops := 10;
   for A := 0 to Loops do
      begin
        /// Sem necessidade desse comando
        Loops := Loops + A;

        nItem := A + (A * 0);
        showmessage('nItem = ' +  inttostr( nItem));
      end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var A, Loops, nItem : integer;
begin

   Loops := 10;
   for A := 0 to Loops do
      begin
        // Sem necessidade desse comando
        Loops := Loops + A;

        nItem := A + (A * 3);
        showmessage('nItem = ' +  inttostr( nItem));
      end;

end;

procedure TForm1.Button3Click(Sender: TObject);
var A, Loops, nItem : integer;
begin

   Loops := 10;
   for A := 0 to Loops do

      /// onde está o erro ... o begin vem depois do 
      /// " for A := 0 to Loops do "
      Loops := Loops + A;  ////  <== ERRO
       

      begin
        nItem := A;
        showmessage('nItem = ' +  inttostr( nItem));
      end;


end;

OBS: no código acima, veja que não é necessario o Loops := Loops + A

e na variavel nItem basta colocar somente a variavel A para receber o valor

Correção do seu Código:

 For A := 0 to loops  do // Ajuste aqui para vender mais itens
    begin

    with Det.Add do
    begin
      nItem := A;
     WHILE NOT Frmfinalizar_Venda.ClientDataSet2.Eof DO
      BEGIN
      Prod.cProd :=  Frmfinalizar_Venda.ClientDataSet2.FieldByName('COD_PRODUTO').AsString;
      Prod.cEAN := '6291041500213';
      Prod.xProd := Frmfinalizar_Venda.ClientDataSet2.FieldByName('PRODUTO').AsString;
      Frmfinalizar_Venda.ClientDataSet3.Open;
      Frmfinalizar_Venda.ClientDataSet3.Filter := '[cod_produto] = ' + QuotedStr(Frmfinalizar_Venda.ClientDataSet2.FieldByName('cod_produto').AsString);
      Frmfinalizar_Venda.ClientDataSet3.Filtered := True; // ativa o filtro
      
      END; <<< Voce não Finaliza esse While ??? 

      while not Frmfinalizar_Venda.ClientDataSet3.Eof do
      begin
      prod.NCM := Frmfinalizar_Venda.ClientDataSet3.FieldByName('NCM').AsString;
      Prod.CFOP := Frmfinalizar_Venda.ClientDataSet3.FieldByName('cfop').AsString;
      Prod.uCom := Frmfinalizar_Venda.ClientDataSet3.FieldByName('unidade_medida').AsString;
      Frmfinalizar_Venda.ClientDataSet3.Next;
      end;

 

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde,

  Obrigada Jhonas por me responder, realmente estou com dificuldade nesse laços de repetição, corrigi o codigo em parte deu certo, Esse while not com o filter do data set utilizo em varias partes e sempre me deu o resultado que busco.

    Porém nesta parte do codigo ele só me retorna o ultimo registro .

Ex: x- salada

     X - Bacon

 

ele me retorna

 

X_ Bacon

X-Bacon

Já tentei utilizar um clientdataset.firts antes do EOF, porém não obtive resultado ....

Agradeço imensamente que puder me ajudar

Obrigada..

 

COdigo que estou utilizando:

   Loops := 1;


    For A := 0 to loops  do // Ajuste aqui para vender mais itens

    begin

    with Det.Add do
    begin
      nItem := A;
     Frmfinalizar_Venda.ClientDataSet2.Open;
    Frmfinalizar_Venda.ClientDataSet2.Filter := '[n_pedido] = ' + QuotedStr(FrmVenda_Balcao.lblpedido.Caption);
      Frmfinalizar_Venda. ClientDataSet2.Filtered := True; // ativa o filtro
    Frmfinalizar_Venda.ClientDataSet2.First;

     while not Frmfinalizar_Venda.ClientDataSet2.Eof do
      BEGIN

      Prod.cProd :=  Frmfinalizar_Venda.ClientDataSet2.FieldByName('COD_PRODUTO').AsString;
      Prod.cEAN := '6291041500213';
      Prod.xProd := Frmfinalizar_Venda.ClientDataSet2.FieldByName('PRODUTO').AsString;
      Frmfinalizar_Venda.ClientDataSet2.Next;
      END;
      Frmfinalizar_Venda.ClientDataSet3.Open;
      Frmfinalizar_Venda.ClientDataSet3.Filter := '[cod_produto] = ' + QuotedStr(Frmfinalizar_Venda.ClientDataSet2.FieldByName('cod_produto').AsString);
      Frmfinalizar_Venda.ClientDataSet3.Filtered := True; // ativa o filtro
      while not Frmfinalizar_Venda.ClientDataSet3.Eof do
      begin
      prod.NCM := Frmfinalizar_Venda.ClientDataSet3.FieldByName('NCM').AsString;
      Prod.CFOP := Frmfinalizar_Venda.ClientDataSet3.FieldByName('cfop').AsString;
      Prod.uCom := Frmfinalizar_Venda.ClientDataSet3.FieldByName('unidade_medida').AsString;
      Frmfinalizar_Venda.ClientDataSet3.Next;
      end;
       while not Frmfinalizar_Venda.ClientDataSet2.Eof do
       BEGIN
      Prod.qCom := Frmfinalizar_Venda.ClientDataSet2.FieldByName('QUANTIDADE').AsInteger;
      Prod.vUnCom := Frmfinalizar_Venda.ClientDataSet2.FieldByName('VALOR_UN').AsFloat;
      Prod.indRegra := irTruncamento;
      Prod.vDesc := StrToCurr(Frmfinalizar_Venda.txtdesconto.text);
       Frmfinalizar_Venda.ClientDataSet2.Next;
      END;

 

Link para o comentário
Compartilhar em outros sites

  • 0

 

 Loops := 10; ///<== Numero de repetições do FOR 


    For A := 0 to loops  do // Ajuste aqui para vender mais itens

    begin

    with Det.Add do
    begin
      nItem := A;
      Frmfinalizar_Venda.ClientDataSet2.Open;
      Frmfinalizar_Venda.ClientDataSet2.Filter := '[n_pedido] = ' +    
      QuotedStr(FrmVenda_Balcao.lblpedido.Caption);
      Frmfinalizar_Venda. ClientDataSet2.Filtered := True; // ativa o filtro
      Frmfinalizar_Venda.ClientDataSet2.First;

      while not Frmfinalizar_Venda.ClientDataSet2.Eof do
      BEGIN
         Prod.cProd :=  Frmfinalizar_Venda.ClientDataSet2.FieldByName('COD_PRODUTO').AsString;
         Prod.cEAN := '6291041500213';
         Prod.xProd := Frmfinalizar_Venda.ClientDataSet2.FieldByName('PRODUTO').AsString;
         Frmfinalizar_Venda.ClientDataSet2.Next;
      END;
                         
      /// ATENÇÃO: O código acima só vai trazer o ultimo registro 
      ///          do Frmfinalizar_Venda.ClientDataSet2
      
      Frmfinalizar_Venda.ClientDataSet3.Open;
      Frmfinalizar_Venda.ClientDataSet3.Filter := '[cod_produto] = ' +              
      QuotedStr(Frmfinalizar_Venda.ClientDataSet2.FieldByName('cod_produto').AsString);
      Frmfinalizar_Venda.ClientDataSet3.Filtered := True; // ativa o filtro
      
      while not Frmfinalizar_Venda.ClientDataSet3.Eof do
      begin
         prod.NCM := Frmfinalizar_Venda.ClientDataSet3.FieldByName('NCM').AsString;
         Prod.CFOP := Frmfinalizar_Venda.ClientDataSet3.FieldByName('cfop').AsString;
         Prod.uCom := Frmfinalizar_Venda.ClientDataSet3.FieldByName('unidade_medida').AsString;
         Frmfinalizar_Venda.ClientDataSet3.Next;
      end;
                         
      /// ATENÇÃO: O código acima só vai trazer o ultimo registro 
      ///          do Frmfinalizar_Venda.ClientDataSet3                  

      while not Frmfinalizar_Venda.ClientDataSet2.Eof do
      BEGIN
         Prod.qCom := Frmfinalizar_Venda.ClientDataSet2.FieldByName('QUANTIDADE').AsInteger;
         Prod.vUnCom := Frmfinalizar_Venda.ClientDataSet2.FieldByName('VALOR_UN').AsFloat;
         Prod.indRegra := irTruncamento;
         Prod.vDesc := StrToCurr(Frmfinalizar_Venda.txtdesconto.text);
         Frmfinalizar_Venda.ClientDataSet2.Next;
      END;
                         
      /// ATENÇÃO: O código acima só vai trazer o ultimo registro 
      ///          do Frmfinalizar_Venda.ClientDataSet2                  

OBS:   Voce tem que lembrar que um comando While ficara sendo executado até que a condição de fim de arquivo seja encontrada ( ou seja, somente quando chegar o ultimo registro da sua tabela - Frmfinalizar_Venda.ClientDataSet2 )

somente depois disso é que o fluxo de comandos continua

mas ao encontrar outro comando While, o mesmo processo continuara até que, novamente o fim de arquivo seja encontrado ( ou seja, novamente, somente quando chegar no ultimo registro da outra tabela - Frmfinalizar_Venda.ClientDataSet3 )

então, não importa quantas repetições tenha no comando " For A := 0 to loops  do "

sugiro que voce repense a lógica nessa parte do programa

se usar o comando FOR, coloque nele, toda a sequencia de comandos para executar a impressão de um registro ...  depois disso voce continua no proximo laço ( loop ) para o proximo registro ... e assim até que a repetição do comando FOR termine.

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...