Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2020-05

Lectura de tabla en scrip de LazReport

6 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Iván Lugo Herrera

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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20200508/8c6e2304/attachment.html>

Reply by email

Ismael L. Donis Garcia
to Iván Lugo Herrera

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

Earlier message 53 lines
----- 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 ------------------------------------------------------------------------------

Reply by email

Iván Lugo Herrera
to Ismael L. Donis Garcia

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

<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Libre
de virus. www.avast.com
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

El lun., 11 may. 2020 a las 14:13, Ismael L. Donis Garcia via Lazarus-es (<

Show quoted text 76 lines
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 <lazarus-es en lists.lazarus-ide.org> *To:* lazarus-es en lists.lazarus-ide.org *Cc:* Iván Lugo Herrera <ivanlugoh en gmail.com> *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

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20200511/2f96004e/attachment-0001.html>

Reply by email

Ismael L. Donis Garcia
to Iván Lugo Herrera

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

Earlier message 92 lines
----- 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 --------------------------------------------------------------------------

Reply by email

Iván Lugo Herrera
to Ismael L. Donis Garcia

Gracias Ismael.
Muy interesante tu procedimiento, precisamente lo que se requiere para un Balance, sea contable o auxiliar. Incluso, para mí que no tengo tanto conocimiento, es material de estudio, p.ej.: SetLength() jamás lo he utilizado y de frParser.Calc() ni siquiera encontré documentación. Ya te lo heredé. Gracias.
Me gustaría saber qué otros recursos de in-formación podrías recomendarme, además de Free Pascal wiki donde debería estar todo, pero no está.

En mi consulta original especifiqué lo siguiente: <<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*.>>

En mi proyecto para hacer un Sistema administrativo con Lazarus los reportes se seleccionan de un pequeño panel que contiene un ListBox con la identificación de los reportes, un RadioGroup con las salidas posibles: pantalla, impresora, pdf y hoja de cálculo, y los botones [Imprimir] y [Salir]. Allí no puedo colocar código para una cantidad de reportes diferentes(1). El registro que contiene la información de cada reporte posee un campo donde se guarda una instrucción "select" en la cual se basa el reporte y que nuestro pequeño panel procesa de forma genérica(2). Los componentes de LazReport están en un DataModule, sólo hay un TFrReport en todo el Sistema.
Espero haber explicado mejor mi búsqueda a través de los objetivos que persigo. Necesito que el reporte tenga la independencia suficiente para actuar sin depender de un formulario.

Gracias por tu ayuda, Ismael.

ILH

(1) El panel de cheques tiene su botón para emitir el cheque y utiliza parámetros que lo relacionan con el reporte, como ésta puede haber otras excepciones
(2) en el momento de la emisión se pasa un número variable de parámetros predeterminados que limitan el alcance del reporte: fecha o período, sujeto(s) involucrado(s), etc

El lun., 11 may. 2020 a las 15:35, Ismael L. Donis Garcia via Lazarus-es (<

Show quoted text 262 lines
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 <lazarus-es en lists.lazarus-ide.org> *To:* Spanish version of Lazarus List <lazarus-es en lists.lazarus-ide.org> *Cc:* Iván Lugo Herrera <ivanlugoh en gmail.com> *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 <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Libre de virus. www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> <#m_700402038046021163_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> 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 > <lazarus-es en lists.lazarus-ide.org> > *To:* lazarus-es en lists.lazarus-ide.org > *Cc:* Iván Lugo Herrera <ivanlugoh en gmail.com> > *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 _______________________________________________ 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/2dbf800c/attachment-0001.html>

Reply by email

Ismael L. Donis Garcia
to Iván Lugo Herrera

Ante todo te diré que no estoy trabajando todos los días, por ese motivo puedo demorar en leer los mensajes. Hoy trabaje.

Busco información de todos los lados, donde aparezca.

Respecto a tu problema debes entender como es el funcionamiento del LazReport, es muy parecido al FastReport, la literatura de uno te puede servir para el otro.

Puedes en los objetos del reporte lo puedes marcar como código y ahí le puedes pasar el código que desees. Aunque esta forma no la he utilizado.

Otra es poner el código en el datamodule que es donde tienes el componente del reporte en tu caso.

Saludos Reiterados

Earlier message 245 lines
----- 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 10:15 PM Subject: Re: [Lazarus-es] Lectura de tabla en scrip de LazReport Gracias Ismael. Muy interesante tu procedimiento, precisamente lo que se requiere para un Balance, sea contable o auxiliar. Incluso, para mí que no tengo tanto conocimiento, es material de estudio, p.ej.: SetLength() jamás lo he utilizado y de frParser.Calc() ni siquiera encontré documentación. Ya te lo heredé. Gracias. Me gustaría saber qué otros recursos de in-formación podrías recomendarme, además de Free Pascal wiki donde debería estar todo, pero no está. En mi consulta original especifiqué lo siguiente: <<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.>> En mi proyecto para hacer un Sistema administrativo con Lazarus los reportes se seleccionan de un pequeño panel que contiene un ListBox con la identificación de los reportes, un RadioGroup con las salidas posibles: pantalla, impresora, pdf y hoja de cálculo, y los botones [Imprimir] y [Salir]. Allí no puedo colocar código para una cantidad de reportes diferentes(1). El registro que contiene la información de cada reporte posee un campo donde se guarda una instrucción "select" en la cual se basa el reporte y que nuestro pequeño panel procesa de forma genérica(2). Los componentes de LazReport están en un DataModule, sólo hay un TFrReport en todo el Sistema. Espero haber explicado mejor mi búsqueda a través de los objetivos que persigo. Necesito que el reporte tenga la independencia suficiente para actuar sin depender de un formulario. Gracias por tu ayuda, Ismael. ILH (1) El panel de cheques tiene su botón para emitir el cheque y utiliza parámetros que lo relacionan con el reporte, como ésta puede haber otras excepciones (2) en el momento de la emisión se pasa un número variable de parámetros predeterminados que limitan el alcance del reporte: fecha o período, sujeto(s) involucrado(s), etc El lun., 11 may. 2020 a las 15:35, Ismael L. Donis Garcia via Lazarus-es (<lazarus-es en lists.lazarus-ide.org>) escribió: 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 ----------------------------------------------------------------------

Reply by email