<div dir="ltr"><div>Gracias Ismael.</div><div>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.</div><div>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á.<br></div><div><br></div><div>En mi consulta original especifiqué lo siguiente:</div><div><<Nota: el pase de parámetros con ParName - ParValue o con FindVariable no es una opción porque se pretende que el reporte <u>no esté atado a un formulario</u>.>></div><div><br></div><div>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.</div><div>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.</div><div><br></div><div>Gracias por tu ayuda, Ismael.</div><div><br></div><div>ILH<br></div><div><br></div><div>(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<br></div><div>(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<br>

</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El lun., 11 may. 2020 a las 15:35, Ismael L. Donis Garcia via Lazarus-es (<<a href="mailto:lazarus-es@lists.lazarus-ide.org">lazarus-es@lists.lazarus-ide.org</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>





<div bgcolor="#ffffff">
<div><font size="2" face="Arial">Lees el valor en el procedimiento BeginBand y lo 
asignas en el procedimiento GetValue</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">Una cosa muy importante, o mejor dicha obligatorio 
en el pie del grupo tienes que poner el campo a calcular</font></div>
<div><font size="2" face="Arial">Si no quieres el pie visible lo ocultas en el 
segundo pase</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">Te paso un procedimiento de leer que tengo, en este 
ejemplo el control se llama rpt</font></div>
<div><font size="2" face="Arial">En este ejemplo los campos de la BD son: 
nat, debe, haber y saldo</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">procedure Tflbal.rptBeginBand(Band: 
TfrBand);<br>var<br>  i, j: integer;<br>begin<br>  
if rpt.FinalPass then begin</font></div>
<div><font size="2" face="Arial">  // SEGUNDO PASE<br></font></div>
<div><font size="2" face="Arial">  // aqui ocultas los pies si no los quieres 
visibles y inicializas los indices del arreglo</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">    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<br>     Band.Visible := 
false;<br></font><font size="2" face="Arial">    if 
(Band.Name='GroupHeader1') then begin<br>      // reset 
index<br>      sctaindex := 
-1;<br>      capindex := 
-1;<br>      scapindex := 
-1;<br>      eleindex := 
-1;<br>      empindex := 
-1;<br>      inc(ctaindex);<br>   end 
else if (Band.Name='GroupHeader2') then<br>      
inc(sctaindex)<br>    else if (Band.Name='GroupHeader3') 
then<br>       
inc(capindex)<br>    else if (Band.Name='GroupHeader4') 
then<br>      inc(scapindex)<br>    else 
if (Band.Name='GroupHeader5') then<br>   
   inc(eleindex)<br>    end else if 
(Band.Name='GroupHeader6') then<br>    
  inc(empindex);<br></font><font size="2" face="Arial"></font></div>
<div><font size="2" face="Arial"> // PRIMER PASE<br>  end else if 
Band.IsDataBand then begin<br>      if 
(UpperCase(dm.rssc7.FieldByName('nat').AsString) = 'A') then 
begin<br>        dhaber := dhaber + 
dm.rssc7.FieldByName('saldo').AsFloat;<br>        
dmhaber := dmhaber + dm.rssc7.FieldByName('haber').AsFloat - 
dm.rssc7.FieldByName('debe').AsFloat;<br>      end else 
begin<br>        ddebe := ddebe + 
dm.rssc7.FieldByName('saldo').AsFloat;<br>        
dmdebe := dmdebe + dm.rssc7.FieldByName('debe').AsFloat - 
dm.rssc7.FieldByName('haber').AsFloat;<br>      
end;<br>      ddif := ddebe - 
dhaber;<br>      dmdif := dmdebe - 
dmhaber;<br>      if 
((dm.rssc7.FieldByName('saldo').AsFloat = 0) and 
(dm.rssc7.FieldByName('debe').AsFloat = dm.rssc7.FieldByName('haber').AsFloat)) 
then<br>        Band.Visible := 
false<br>      
else<br>        Band.Visible := 
true;<br>    end else if (Band.name='GroupHeader1') then 
begin<br>      i := 
Length(Hdrs);<br>      SetLength(Hdrs, 
i+1);<br>    end else if (Band.Name='GroupFooter1') then 
begin<br>      i := 
Length(Hdrs)-1;<br>      Hdrs[i].Sum := 
frParser.Calc('SUM([dm.rssc7."SALDO"], 
MasterData1)');<br>      Hdrs[i].Debe := 
frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], 
MasterData1)');<br>      Hdrs[i].Haber := 
frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], 
MasterData1)');<br>    end else if (Band.Name='GroupFooter2') 
then begin<br>      i := 
Length(Hdrs)-1;<br>      j := 
Length(Hdrs[i].sascta);<br>      
SetLength(Hdrs[i].sascta, j+1);<br>      
SetLength(Hdrs[i].pdscta, j+1);<br>      
SetLength(Hdrs[i].phscta, j+1);<br>      
Hdrs[i].sascta[j] := frParser.Calc('SUM([dm.rssc7."SALDO"], 
MasterData1)');<br>      Hdrs[i].pdscta[j] := 
frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], 
MasterData1)');<br>      Hdrs[i].phscta[j] := 
frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], 
MasterData1)');<br>    end else if (Band.Name='GroupFooter3') 
then begin<br>      i := 
Length(Hdrs)-1;<br>      j := 
Length(Hdrs[i].sacap);<br>      
SetLength(Hdrs[i].sacap, j+1);<br>      
SetLength(Hdrs[i].pdcap, j+1);<br>      
SetLength(Hdrs[i].phcap, j+1);<br>      
Hdrs[i].sacap[j] := frParser.Calc('SUM([dm.rssc7."SALDO"], 
MasterData1)');<br>      Hdrs[i].pdcap[j] := 
frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], 
MasterData1)');<br>      Hdrs[i].phcap[j] := 
frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], 
MasterData1)');<br>    end else if (Band.Name='GroupFooter4') 
then begin<br>      i := 
Length(Hdrs)-1;<br>      j := 
Length(Hdrs[i].sascap);<br>      
SetLength(Hdrs[i].sascap, j+1);<br>      
SetLength(Hdrs[i].pdscap, j+1);<br>      
SetLength(Hdrs[i].phscap, j+1);<br>      
Hdrs[i].sascap[j] := frParser.Calc('SUM([dm.rssc7."SALDO"], 
MasterData1)');<br>      Hdrs[i].pdscap[j] := 
frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], 
MasterData1)');<br>      Hdrs[i].phscap[j] := 
frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], 
MasterData1)');<br>    end else if (Band.Name='GroupFooter5') 
then begin<br>      i := 
Length(Hdrs)-1;<br>      j := 
Length(Hdrs[i].saele);<br>      
SetLength(Hdrs[i].saele, j+1);<br>      
SetLength(Hdrs[i].pdele, j+1);<br>      
SetLength(Hdrs[i].phele, j+1);<br>      
Hdrs[i].saele[j] := frParser.Calc('SUM([dm.rssc7."SALDO"], 
MasterData1)');<br>      Hdrs[i].pdele[j] := 
frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], 
MasterData1)');<br>      Hdrs[i].phele[j] := 
frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], 
MasterData1)');<br>    end else if (Band.Name='GroupFooter6') 
then begin<br>      i := 
Length(Hdrs)-1;<br>      j := 
Length(Hdrs[i].saemp);<br>      
SetLength(Hdrs[i].saemp, j+1);<br>      
SetLength(Hdrs[i].pdemp, j+1);<br>      
SetLength(Hdrs[i].phemp, j+1);<br>      
Hdrs[i].saemp[j] := frParser.Calc('SUM([dm.rssc7."SALDO"], 
MasterData1)');<br>      Hdrs[i].pdemp[j] := 
frParser.Calc('SUM([[dm.rssc7."DEBE"]-[dm.rssc7."HABER"]], 
MasterData1)');<br>      Hdrs[i].phemp[j] := 
frParser.Calc('SUM([[dm.rssc7."HABER"]-[dm.rssc7."DEBE"]], 
MasterData1)');<br>    end;<br>  
end;<br>end;     <br></font></div><font size="2" face="Arial"></font>
<div><font size="2" face="Arial">Saludos Reiterados</font></div>
<div>--<br>Ismael<br>Devuan User: <a href="http://distrowatch.com/table.php?distribution=devuan" target="_blank">http://distrowatch.com/table.php?distribution=devuan</a></div>
<div>Personal Web Site: <a href="http://www.sisconge.byethost15.com" rel="noopener noreferrer" target="_blank">http://www.sisconge.byethost15.com</a></div>
<div><font size="2" face="Arial"></font> </div>
<blockquote style="padding-right:0px;padding-left:5px;margin-left:5px;border-left:2px solid rgb(0,0,0);margin-right:0px">
  <div style="font:10pt arial">----- Original Message ----- </div>
  <div style="background:rgb(228,228,228) none repeat scroll 0% 0%;font:10pt arial"><b>From:</b> 
  <a title="lazarus-es@lists.lazarus-ide.org" href="mailto:lazarus-es@lists.lazarus-ide.org" target="_blank">Iván Lugo Herrera via 
  Lazarus-es</a> </div>
  <div style="font:10pt arial"><b>To:</b> <a title="lazarus-es@lists.lazarus-ide.org" href="mailto:lazarus-es@lists.lazarus-ide.org" target="_blank">Spanish version of Lazarus 
  List</a> </div>
  <div style="font:10pt arial"><b>Cc:</b> <a title="ivanlugoh@gmail.com" href="mailto:ivanlugoh@gmail.com" target="_blank">Iván Lugo Herrera</a> </div>
  <div style="font:10pt arial"><b>Sent:</b> Monday, May 11, 2020 2:45 PM</div>
  <div style="font:10pt arial"><b>Subject:</b> Re: [Lazarus-es] Lectura de 
  tabla en scrip de LazReport</div>
  <div><font size="2" face="Arial"></font><br></div>
  <div dir="ltr">
  <div>Buenas tardes Ismael. Gracias por atender mi consulta.</div>
  <div>Suena ingenioso lo del reporte en dos pases, sobre todo para acumulados y 
  paginación.</div>
  <div><br></div>
  <div>Tengo un inconveneinte en la aplicación de tu propuesta:</div>
  <div> - cuando hago el primer pase no tengo un valor que guardar en el 
  arreglo porque no lo he buscado en sqlCuentas</div>
  <div> - si uso el valor actual de CTANOM en sqlCuentas siempre será el 
  mismo</div>
  <div><br></div>
  <div>Lo que quisiera hacer es una lectura por clave a una tabla desde el 
  reporte.</div>
  <div><br></div>
  <div>Gracias nuevamente.</div>
  <div><br></div>
  <div>ILH<br></div></div>
  <div id="gmail-m_700402038046021163DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br>
  <table style="border-top:1px solid rgb(211,212,222)">
    <tbody>
    <tr>
      <td style="width:55px;padding-top:18px"><a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail" target="_blank"><img style="width: 46px; height: 29px;" alt="" src="https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif" width="46" height="29"></a></td>
      <td style="font-size:13px;width:470px;color:rgb(65,66,78);line-height:18px;padding-top:17px;font-family:Arial,Helvetica,sans-serif">Libre 
        de virus. <a style="color:rgb(68,83,234)" href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail" target="_blank">www.avast.com</a> </td></tr></tbody></table><a href="#m_700402038046021163_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" height="1" width="1"></a></div><br>
  <div class="gmail_quote">
  <div class="gmail_attr" dir="ltr">El lun., 11 may. 2020 a las 14:13, Ismael L. 
  Donis Garcia via Lazarus-es (<<a href="mailto:lazarus-es@lists.lazarus-ide.org" target="_blank">lazarus-es@lists.lazarus-ide.org</a>>) 
  escribió:<br></div>
  <blockquote class="gmail_quote" style="padding-left:1ex;margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)"><u></u>
    <div bgcolor="#ffffff">
    <div><font size="2" face="Arial">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.</font></div>
    <div><font size="2" face="Arial"></font> </div>
    <div><font size="2" face="Arial">Saludos</font></div>
    <div>--<br>Ismael<br>Devuan User: <a href="http://distrowatch.com/table.php?distribution=devuan" target="_blank">http://distrowatch.com/table.php?distribution=devuan</a></div>
    <div>Personal Web Site: <a href="http://www.sisconge.byethost15.com" rel="noopener noreferrer" target="_blank">http://www.sisconge.byethost15.com</a></div>
    <blockquote style="padding-right:0px;padding-left:5px;margin-left:5px;border-left:2px solid rgb(0,0,0);margin-right:0px">
      <div style="font:10pt arial">----- Original Message ----- </div>
      <div style="background:rgb(228,228,228) none repeat scroll 0% 0%;font:10pt arial"><b>From:</b> 
      <a title="lazarus-es@lists.lazarus-ide.org" href="mailto:lazarus-es@lists.lazarus-ide.org" target="_blank">Iván Lugo 
      Herrera via Lazarus-es</a> </div>
      <div style="font:10pt arial"><b>To:</b> <a title="lazarus-es@lists.lazarus-ide.org" href="mailto:lazarus-es@lists.lazarus-ide.org" target="_blank">lazarus-es@lists.lazarus-ide.org</a> </div>
      <div style="font:10pt arial"><b>Cc:</b> <a title="ivanlugoh@gmail.com" href="mailto:ivanlugoh@gmail.com" target="_blank">Iván Lugo Herrera</a> 
      </div>
      <div style="font:10pt arial"><b>Sent:</b> Friday, May 08, 2020 7:33 
      PM</div>
      <div style="font:10pt arial"><b>Subject:</b> [Lazarus-es] Lectura de 
      tabla en scrip de LazReport</div>
      <div><br></div>
      <div dir="ltr">
      <div>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.</div>
      <div>Me alegra encontrar información sobre Lazarus el español.</div>
      <div>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.</div>
      <div>Aunque jamás utilicé Delphi, he apoyado mi aprendizaje con diversos 
      consejos en español para este equivalente comercial.</div>
      <div><br></div>
      <div>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.</div>
      <div></div>
      <div>Consulta LazReport:<br>Desde un script en LazReport ¿puedo leer un 
      registro de una tabla que es visible desde el reporte?<br>Algo 
      como:<br><br>  if 
      [sqlCuentas.Locate('CTACOD',[Cuenta],[loPartialKey])] then ;<br>  
       Text:= [sqlCuentas.FieldByName('CTANOM').AsString] ;<br>  
       else Text:= 'No identificada';<br><br>- La instrucción anterior 
      (locate) está en un cuadro de texto en la banda GroupHeader (Condición: 
      [sqlMovim."CTACOD"])<br>- en la banda MasterData tengo la tabla 
      "sqlMovim"<br>- "sqlCuentas", con todos sus campos, es visible desde el 
      reporte en modo "design"<br>- "Cuenta" en una variable (Otras) que 
      contiene [sqlMovim."CTACOD"] que tiene su equivalente en sqlCuentas<br>He 
      probado con "begin // end", he incluido "uses db;"<br><br>invariablemente 
      el resultado es "No identificada"<br><br>hay un cuadro de texto que 
      contiene sqlCuentas.CtaNom y siempre muestra el primer registro<br><br>¿es 
      posible lo que pretendo?<br>si lo es, ¿cómo debo realizarlo? o ¿cuál es mi 
      error?</div>
      <div><br></div>
      <div>Nota: el pase de parámetros con ParName - ParValue o con FindVariable 
      no es una opción</div>
      <div>porque se pretende que el reporte no esté atado a un 
      formulario.<br></div>
      <div><br></div>
      <div>De antemano, gracias.</div>
      <div><br></div>
      <div>Iván Lugo Herrera</div>
      <div>Valencia, Venezuela<br></div></div>
      <p></p>
      <hr>

      <p></p>_______________________________________________<br>Lazarus-es 
      mailing list<br><a href="mailto:Lazarus-es@lists.lazarus-ide.org" target="_blank">Lazarus-es@lists.lazarus-ide.org</a><br><a href="https://lists.lazarus-ide.org/listinfo/lazarus-es" target="_blank">https://lists.lazarus-ide.org/listinfo/lazarus-es</a><br>
      <p></p></blockquote></div>_______________________________________________<br>Lazarus-es 
    mailing list<br><a href="mailto:Lazarus-es@lists.lazarus-ide.org" target="_blank">Lazarus-es@lists.lazarus-ide.org</a><br><a href="https://lists.lazarus-ide.org/listinfo/lazarus-es" rel="noreferrer" target="_blank">https://lists.lazarus-ide.org/listinfo/lazarus-es</a><br></blockquote></div>
  <p>
  </p><hr>

  <p></p>_______________________________________________<br>Lazarus-es mailing 
  list<br><a href="mailto:Lazarus-es@lists.lazarus-ide.org" target="_blank">Lazarus-es@lists.lazarus-ide.org</a><br><a href="https://lists.lazarus-ide.org/listinfo/lazarus-es" target="_blank">https://lists.lazarus-ide.org/listinfo/lazarus-es</a><br><p></p></blockquote></div>
_______________________________________________<br>
Lazarus-es mailing list<br>
<a href="mailto:Lazarus-es@lists.lazarus-ide.org" target="_blank">Lazarus-es@lists.lazarus-ide.org</a><br>
<a href="https://lists.lazarus-ide.org/listinfo/lazarus-es" rel="noreferrer" target="_blank">https://lists.lazarus-ide.org/listinfo/lazarus-es</a><br>
</blockquote></div>