[Lazarus-es] Lectura de tabla en scrip de LazReport

Ismael L. Donis Garcia slibre en natio.co.cu
Lun Mayo 11 21:35:29 CEST 2020


Lees el valor en el procedimiento BeginBand y lo asignas en el procedimiento GetValue

Una cosa muy importante, o mejor dicha obligatorio en el pie del grupo tienes que poner el campo a calcular
Si no quieres el pie visible lo ocultas en el segundo pase

Te paso un procedimiento de leer que tengo, en este ejemplo el control se llama rpt
En este ejemplo los campos de la BD son: nat, debe, haber y saldo

procedure Tflbal.rptBeginBand(Band: TfrBand);
var
  i, j: integer;
begin
  if rpt.FinalPass then begin
  // SEGUNDO PASE

  // aqui ocultas los pies si no los quieres visibles y inicializas los indices del arreglo

    if ((Band.Name='GroupFooter1') or (Band.Name='GroupFooter2') or (Band.Name='GroupFooter3') or (Band.Name='GroupFooter4') or (Band.Name='GroupFooter5') or (Band.Name='GroupFooter6')) then
     Band.Visible := false;
    if (Band.Name='GroupHeader1') then begin
      // reset index
      sctaindex := -1;
      capindex := -1;
      scapindex := -1;
      eleindex := -1;
      empindex := -1;
      inc(ctaindex);
   end else if (Band.Name='GroupHeader2') then
      inc(sctaindex)
    else if (Band.Name='GroupHeader3') then
       inc(capindex)
    else if (Band.Name='GroupHeader4') then
      inc(scapindex)
    else if (Band.Name='GroupHeader5') then
      inc(eleindex)
    end else if (Band.Name='GroupHeader6') then
      inc(empindex);

 // PRIMER PASE
  end else if Band.IsDataBand then begin
      if (UpperCase(dm.rssc7.FieldByName('nat').AsString) = 'A') then begin
        dhaber := dhaber + dm.rssc7.FieldByName('saldo').AsFloat;
        dmhaber := dmhaber + dm.rssc7.FieldByName('haber').AsFloat - dm.rssc7.FieldByName('debe').AsFloat;
      end else begin
        ddebe := ddebe + dm.rssc7.FieldByName('saldo').AsFloat;
        dmdebe := dmdebe + dm.rssc7.FieldByName('debe').AsFloat - dm.rssc7.FieldByName('haber').AsFloat;
      end;
      ddif := ddebe - dhaber;
      dmdif := dmdebe - dmhaber;
      if ((dm.rssc7.FieldByName('saldo').AsFloat = 0) and (dm.rssc7.FieldByName('debe').AsFloat = dm.rssc7.FieldByName('haber').AsFloat)) then
        Band.Visible := false
      else
        Band.Visible := true;
    end else if (Band.name='GroupHeader1') then begin
      i := Length(Hdrs);
      SetLength(Hdrs, i+1);
    end else if (Band.Name='GroupFooter1') then begin
      i := Length(Hdrs)-1;
      Hdrs[i].Sum := frParser.Calc('SUM([dm.rssc7."SALDO"], MasterData1)');
      Hdrs[i].Debe := frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], MasterData1)');
      Hdrs[i].Haber := frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], MasterData1)');
    end else if (Band.Name='GroupFooter2') then begin
      i := Length(Hdrs)-1;
      j := Length(Hdrs[i].sascta);
      SetLength(Hdrs[i].sascta, j+1);
      SetLength(Hdrs[i].pdscta, j+1);
      SetLength(Hdrs[i].phscta, j+1);
      Hdrs[i].sascta[j] := frParser.Calc('SUM([dm.rssc7."SALDO"], MasterData1)');
      Hdrs[i].pdscta[j] := frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], MasterData1)');
      Hdrs[i].phscta[j] := frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], MasterData1)');
    end else if (Band.Name='GroupFooter3') then begin
      i := Length(Hdrs)-1;
      j := Length(Hdrs[i].sacap);
      SetLength(Hdrs[i].sacap, j+1);
      SetLength(Hdrs[i].pdcap, j+1);
      SetLength(Hdrs[i].phcap, j+1);
      Hdrs[i].sacap[j] := frParser.Calc('SUM([dm.rssc7."SALDO"], MasterData1)');
      Hdrs[i].pdcap[j] := frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], MasterData1)');
      Hdrs[i].phcap[j] := frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], MasterData1)');
    end else if (Band.Name='GroupFooter4') then begin
      i := Length(Hdrs)-1;
      j := Length(Hdrs[i].sascap);
      SetLength(Hdrs[i].sascap, j+1);
      SetLength(Hdrs[i].pdscap, j+1);
      SetLength(Hdrs[i].phscap, j+1);
      Hdrs[i].sascap[j] := frParser.Calc('SUM([dm.rssc7."SALDO"], MasterData1)');
      Hdrs[i].pdscap[j] := frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], MasterData1)');
      Hdrs[i].phscap[j] := frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], MasterData1)');
    end else if (Band.Name='GroupFooter5') then begin
      i := Length(Hdrs)-1;
      j := Length(Hdrs[i].saele);
      SetLength(Hdrs[i].saele, j+1);
      SetLength(Hdrs[i].pdele, j+1);
      SetLength(Hdrs[i].phele, j+1);
      Hdrs[i].saele[j] := frParser.Calc('SUM([dm.rssc7."SALDO"], MasterData1)');
      Hdrs[i].pdele[j] := frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], MasterData1)');
      Hdrs[i].phele[j] := frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], MasterData1)');
    end else if (Band.Name='GroupFooter6') then begin
      i := Length(Hdrs)-1;
      j := Length(Hdrs[i].saemp);
      SetLength(Hdrs[i].saemp, j+1);
      SetLength(Hdrs[i].pdemp, j+1);
      SetLength(Hdrs[i].phemp, j+1);
      Hdrs[i].saemp[j] := frParser.Calc('SUM([dm.rssc7."SALDO"], MasterData1)');
      Hdrs[i].pdemp[j] := frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], MasterData1)');
      Hdrs[i].phemp[j] := frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], MasterData1)');
    end;
  end;
end;     

Saludos Reiterados
--
Ismael
Devuan User: http://distrowatch.com/table.php?distribution=devuan
Personal Web Site: http://www.sisconge.byethost15.com

  ----- Original Message ----- 
  From: Iván Lugo Herrera via Lazarus-es 
  To: Spanish version of Lazarus List 
  Cc: Iván Lugo Herrera 
  Sent: Monday, May 11, 2020 2:45 PM
  Subject: Re: [Lazarus-es] Lectura de tabla en scrip de LazReport


  Buenas tardes Ismael. Gracias por atender mi consulta.
  Suena ingenioso lo del reporte en dos pases, sobre todo para acumulados y paginación.


  Tengo un inconveneinte en la aplicación de tu propuesta:
   - cuando hago el primer pase no tengo un valor que guardar en el arreglo porque no lo he buscado en sqlCuentas
   - si uso el valor actual de CTANOM en sqlCuentas siempre será el mismo


  Lo que quisiera hacer es una lectura por clave a una tabla desde el reporte.


  Gracias nuevamente.


  ILH


       Libre de virus. www.avast.com  



  El lun., 11 may. 2020 a las 14:13, Ismael L. Donis Garcia via Lazarus-es (<lazarus-es en lists.lazarus-ide.org>) escribió:

    En las opciones del reporte lo debes definir como de 2 pasos, en el primero guardas el valor en un arreglo y en el segundo pase asignas el valor tomándolo del arreglo.

    Saludos
    --
    Ismael
    Devuan User: http://distrowatch.com/table.php?distribution=devuan
    Personal Web Site: http://www.sisconge.byethost15.com
      ----- Original Message ----- 
      From: Iván Lugo Herrera via Lazarus-es 
      To: lazarus-es en lists.lazarus-ide.org 
      Cc: Iván Lugo Herrera 
      Sent: Friday, May 08, 2020 7:33 PM
      Subject: [Lazarus-es] Lectura de tabla en scrip de LazReport


      Recién me inscribo en esta lista de correo dedicada a Lazarus IDE, con el interés de progresar en esta herramienta de desarrollo de software.
      Me alegra encontrar información sobre Lazarus el español.
      La mayoría de las fuentes que he encontrado en los dos años que llevo estudiando esta paltaforma son: inglés, portugués (bastante), francés (algo) y poco en español.
      Aunque jamás utilicé Delphi, he apoyado mi aprendizaje con diversos consejos en español para este equivalente comercial.


      No descubrí la manera de consultar en la lista los temas tratados previamente, así que quizá mi consulta ya haya sido respondida en el sitio.
      Consulta LazReport:
      Desde un script en LazReport ¿puedo leer un registro de una tabla que es visible desde el reporte?
      Algo como:

        if [sqlCuentas.Locate('CTACOD',[Cuenta],[loPartialKey])] then ;
         Text:= [sqlCuentas.FieldByName('CTANOM').AsString] ;
         else Text:= 'No identificada';

      - La instrucción anterior (locate) está en un cuadro de texto en la banda GroupHeader (Condición: [sqlMovim."CTACOD"])
      - en la banda MasterData tengo la tabla "sqlMovim"
      - "sqlCuentas", con todos sus campos, es visible desde el reporte en modo "design"
      - "Cuenta" en una variable (Otras) que contiene [sqlMovim."CTACOD"] que tiene su equivalente en sqlCuentas
      He probado con "begin // end", he incluido "uses db;"

      invariablemente el resultado es "No identificada"

      hay un cuadro de texto que contiene sqlCuentas.CtaNom y siempre muestra el primer registro

      ¿es posible lo que pretendo?
      si lo es, ¿cómo debo realizarlo? o ¿cuál es mi error?


      Nota: el pase de parámetros con ParName - ParValue o con FindVariable no es una opción
      porque se pretende que el reporte no esté atado a un formulario.



      De antemano, gracias.


      Iván Lugo Herrera
      Valencia, Venezuela



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


      _______________________________________________
      Lazarus-es mailing list
      Lazarus-es en lists.lazarus-ide.org
      https://lists.lazarus-ide.org/listinfo/lazarus-es


    _______________________________________________
    Lazarus-es mailing list
    Lazarus-es en lists.lazarus-ide.org
    https://lists.lazarus-ide.org/listinfo/lazarus-es



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


  _______________________________________________
  Lazarus-es mailing list
  Lazarus-es en lists.lazarus-ide.org
  https://lists.lazarus-ide.org/listinfo/lazarus-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20200511/165d2c04/attachment-0001.html>


Más información sobre la lista de distribución Lazarus-es