Como Sumar los grupos en cabecera de cada grupo en el Reporte

868 views
Skip to first unread message

Pool

unread,
Sep 14, 2016, 3:43:06 PM9/14/16
to Comunidad de Visual Foxpro en Español
Hola Buenas Tardes Foxeros una me podrian ayudar como puedo sumar los grupos de los reportes pero que me salgan en la cabezara de cada uno ...muchas gracias de antemano..

Germán Fabricio Valdez

unread,
Sep 14, 2016, 5:12:19 PM9/14/16
to Comunidad de Visual Foxpro en Español
se me ocurre que primero tenes que hacer un cursor con un comanndo select campogrupo, sum(campovalor) as suma from tablareporte into cursor sumgrupos readwriter
luego crear un indice por campogrupo

luego te vas a tu tablareporte con select tablareporte y estableves un set relation to campogrupo into sumgrupos

luego en el reporte en la cabecera colocas un campo sumgrupos.suma

probalo y me contas

exl260708 .

unread,
Sep 14, 2016, 6:06:21 PM9/14/16
to publice...@googlegroups.com
gracias Germán Lo Voy a Probar la solucion que me das  y connfigurando el reporte no se puede ...

HernanCano

unread,
Sep 14, 2016, 6:13:34 PM9/14/16
to Comunidad de Visual Foxpro en Español
Pool:
Supongo que sabes ubicar un "SubTotal" debajo de la banda de Detalle.

Lo que debes hacer para tu inquietud es poner el mismo "campo" para SubTotal... pero en la banda de Cabecera del Detalle.........................

Dale...

exl260708 .

unread,
Sep 14, 2016, 6:19:27 PM9/14/16
to publice...@googlegroups.com
si Hernancano o e puesto el campo subtotal en la cabecera del grupo claro con su configuración (calculate Type  --SUM -nombredelgrupo pero no me suma nada sale cero porque sera ...

Víctor Hugo Espínola Domínguez

unread,
Sep 14, 2016, 6:23:27 PM9/14/16
to publice...@googlegroups.com

Saludos,
Víctor.
Lambaré - Paraguay.

exl260708 .

unread,
Sep 14, 2016, 6:38:32 PM9/14/16
to publice...@googlegroups.com
Gracias Victor Hugo  si revise ese pagina veo que crean variables en los reportes  en verdad no lo entiendo bien ...

Víctor Hugo Espínola Domínguez

unread,
Sep 14, 2016, 6:57:26 PM9/14/16
to publice...@googlegroups.com
Envía los datos y hago el report

Saludos,
Víctor.
Lambaré - Paraguay.


HernanCano

unread,
Sep 14, 2016, 6:58:12 PM9/14/16
to Comunidad de Visual Foxpro en Español
Si observas la URL, ves que ---aunque sem mencione la palabra "VARIABLE"-- se habla de Calculation type que se debe poner en sum, que es la forma como trabaja el concepto de SubTotal que conoces.

El procedimiento es el mismo que el que conoces y que te dije: agregar el subtotal al Header del Detalle, en vez de agregarlo a la banda de Footer del Detalle.

exl260708 .

unread,
Sep 14, 2016, 7:09:11 PM9/14/16
to publice...@googlegroups.com
tengo varios grupos y quiero que los totales de cada grupos se muestren el Header  del grupo esdecir a su costado de la descripcion de cada grupo y la banda detalle tiene header ...

exl260708 .

unread,
Sep 14, 2016, 7:14:53 PM9/14/16
to publice...@googlegroups.com
talves si es mucho pedir no tendran un ejemplo que alguna ves hayan echo se los agradesco de antemano ..




El 14 de septiembre de 2016, 18:09, exl260708 .<eryp...@gmail.com> escribió:
tengo varios grupos y quiero que los totales de cada grupos se muestren el Header  del grupo esdecir a su costado de la descripcion de cada grupo y la banda detalle tiene header ...

Víctor Hugo Espínola Domínguez

unread,
Sep 14, 2016, 7:30:39 PM9/14/16
to publice...@googlegroups.com
DO Form _Samples + "\Solution\Europa\MultipleDetail2"


Saludos,
Víctor.
Lambaré - Paraguay.


HernanCano

unread,
Sep 14, 2016, 8:13:47 PM9/14/16
to Comunidad de Visual Foxpro en Español
Ah.. perdón... Pensé que ya habías generado algún reporte con subtotales....

exl260708 .

unread,
Sep 14, 2016, 8:37:37 PM9/14/16
to publice...@googlegroups.com
Si tengo el reporte haber  si lo observan enque estoy haciendo mal
TotalesEncebezadoGrup._rar

Luiz Alexandre Ruiz

unread,
Sep 14, 2016, 9:01:28 PM9/14/16
to Comunidad de Visual Foxpro en Español
Olá Pool, é o seguinte o total por variável não funciona para ti, porque para totalizar o mecanismo do relatório precisa passar pelos registros para ir somando.

No seu caso tem que ser como o German falou, você vai precisar dois Cursores, um que é o totalizador e o outro com os registros a serem mostrados.

Depois dos dois cursores criados é preciso usar o SET RELATION

Também será necessário colocar o cursor totalizador como primeiro, então o seu relatório terá um grupo e dois "detalhes", sendo que você não irá utilizar o cabeçalho e sim o primeiro grupo para totalizar e depois o segundo para mostrar os itens.

Isto é uma ideia, talvez ajude a solucionar o seu problema.

exl260708 .

unread,
Sep 14, 2016, 9:05:36 PM9/14/16
to publice...@googlegroups.com
Gracias Luis Alexandre Ruiz estoy tratando de resolverlo

HernanCano

unread,
Sep 15, 2016, 2:28:57 AM9/15/16
to Comunidad de Visual Foxpro en Español
Sí, Pool.
Como dice Luiz: "se necesita recorrer todos y cada uno de los registros para ir sumando" cuando el SubTotal se debe mostrar en la clásica banda de Footer.

Para poder mostrarlos en el mismo encabezado, debes utilizar efectivamente el concepto de Variables. Leí la URL "Visual FoxPro 9.0 Report Writer In Action", pero me queda pendiente entender.

Sin embargo el Solution que te pasó Víctor te hace la tarea.

Usalo y nos cuentas.

exl260708 .

unread,
Sep 16, 2016, 12:20:45 PM9/16/16
to publice...@googlegroups.com
Que tal Buen dia foxeros estube leyendo y haciendo pruebas respecto a informacion de victor Hugo  y no logre comprenderlos hice pruebas como me recomendo german fabricio y cuando creo una relacion al momento que reporte si me muestra en la cabecera la suma del total pero cuando voy a ver al siguiente descripcion del mismo grupo me sigue saliendo la misma cantidad en que estare fallando no estare relacionando bien...
Muestro el código   haber si me pueden ayudar

SELECT  TempCompras2 
SELECT zona ,SUM(kbruto) as kBrutos FROM TempCompras2 GROUP BY zona INTO  CURSOR  GroupZonas READWRITE 

SELECT GroupZonas 
INDEX on zona TAG zona 

SELECT  TempCompras2 
SET ORDER TO zona 
SET RELATION TO zona INTO GroupZonas  ADDITIVE 
SET SKIP To GroupZonas 
select TempCompras2
report form resu_compra3.frx preview







Germán Fabricio Valdez

unread,
Sep 16, 2016, 12:44:48 PM9/16/16
to Comunidad de Visual Foxpro en Español
creo que el additive no va y tampoco el set skip to

y en el campo del reporte estas poniendo grupozonas.kbrutos


El miércoles, 14 de septiembre de 2016, 16:43:06 (UTC-3), Pool escribió:

exl260708 .

unread,
Sep 16, 2016, 1:04:00 PM9/16/16
to publice...@googlegroups.com
si haci es pero cuando voy haber el siguiente nombre del grupo no me actualiza pero en el cursor grupozonas si esta sumando los totales con sus respectivos codigos 

exl260708 .

unread,
Sep 16, 2016, 1:19:36 PM9/16/16
to publice...@googlegroups.com
te envio los pantallazos 
​esta un poco en desorden   









Germán Fabricio Valdez

unread,
Sep 16, 2016, 1:19:54 PM9/16/16
to Comunidad de Visual Foxpro en Español
estas poniendo el valos en group header zona y no en page header, manda el reporte para que lo veamos



El miércoles, 14 de septiembre de 2016, 16:43:06 (UTC-3), Pool escribió:

exl260708 .

unread,
Sep 16, 2016, 1:48:46 PM9/16/16
to publice...@googlegroups.com
Ahi lo envio la tabla el reporte y formulario haber si me ayudan...
TotalesEncabGrupo._rar

Germán Fabricio Valdez

unread,
Sep 16, 2016, 1:51:36 PM9/16/16
to Comunidad de Visual Foxpro en Español
el print when del campo lo tenes asi
Auto Generated Inline Image 1

Germán Fabricio Valdez

unread,
Sep 16, 2016, 2:28:24 PM9/16/16
to Comunidad de Visual Foxpro en Español
me parece que
SELECT  TempCompras2
SET ORDER TO zona

ese indice zona no es zona solamente sino que incluye la fecha adelante

exl260708 .

unread,
Sep 16, 2016, 3:13:46 PM9/16/16
to publice...@googlegroups.com
si pero el indice winzard5  lo utilizo para crear grupos  

exl260708 .

unread,
Sep 16, 2016, 3:17:07 PM9/16/16
to publice...@googlegroups.com
lo acabo de coloar en when this data group expression changes con el grupo "ZONA" `pero no me actualiza 

Germán Fabricio Valdez

unread,
Sep 16, 2016, 3:35:20 PM9/16/16
to Comunidad de Visual Foxpro en Español
ya encontre el problema

son varias cositas

primero abrir el reporte resu_compra3 y te vas a dataenvironment y en propiedades pones autoopentables=.f. y autoclosetables=.f. y borras la tabla que esta cargada en el dataenvironment tempo_compra2

vos hiciste todo el reporte con el nombre del alias igual al nombre de la tabla

pero despues  en el formulario abriste la tabla con otro alias y ese es el error

tenes que cambiar todo este codigo que yo ya cambie en el boton del formulario 

y listo ya funciona

cambios 

USE TEMPO_COMPRA2 IN 0  EXCLUSIVE 


SELECT  Tempo_Compra2 
SELECT zona ,SUM(kbruto) as kBrutos FROM Tempo_Compra2 GROUP BY zona INTO  CURSOR  GroupZonas READWRITE 


SELECT  Tempo_Compra2 
SET ORDER TO zona 

SELECT GroupZonas 
INDEX on zona TAG zona 
SET ORDER TO zona 

SELECT  Tempo_Compra2 
SET RELATION TO zona INTO GroupZonas 

*!* SET SKIP To TempCompras2 
*select TempCompras2 &&Tmpresumen
report form resu_compra3.frx preview

exl260708 .

unread,
Sep 16, 2016, 3:42:50 PM9/16/16
to publice...@googlegroups.com
voy a probar la solucion que me das Germán  muchas gracias te comento como va ....

Germán Fabricio Valdez

unread,
Sep 16, 2016, 4:06:15 PM9/16/16
to Comunidad de Visual Foxpro en Español
creo que ademas tenes que volver a ordenar la tabla Tempo_Compra2 con set order to antes de impimir
para que le quede el orden con la que la armaste
y no el orden de zona

select Tempo_Compra2
SET ORDER TO 
report form resu_compra3.frx preview

la relacion que armaste sigue activa y podes agregar mas con la opcion  additive

exl260708 .

unread,
Sep 16, 2016, 4:08:56 PM9/16/16
to publice...@googlegroups.com
si german justo te iba a preguntar eso me  porque me estaban saliendo  el reporte desordenado 

exl260708 .

unread,
Sep 16, 2016, 4:15:04 PM9/16/16
to publice...@googlegroups.com
ya me salio gracias a ti  una pregunta mas German y si quiero crear total de otros grupos y mostralos tambien en el encabezado del respectivo grupo tendria que  crear un cursor por cada grupo o se puede agregar todo en un cursor  ...

Germán Fabricio Valdez

unread,
Sep 16, 2016, 4:17:18 PM9/16/16
to Comunidad de Visual Foxpro en Español
igual la tabla que me  mandaste tiene en zona la A y la K mezclada
el select que hacer suma todas las K y todas las A aunque esten desordenadas
no se si te falta otro campo de agrupacion

exl260708 .

unread,
Sep 16, 2016, 4:44:49 PM9/16/16
to publice...@googlegroups.com
si lo que yo  te preguntaba si quiero sumar totales de otros grupos como es clasificacion o IDENT  si tengo que crear un cursor Por cada Grupo que tenga que sumar sus totales o si lo puedo guadar en un solo cursor y mostralos en el reporte o no se puede 

Germán Fabricio Valdez

unread,
Sep 16, 2016, 4:52:39 PM9/16/16
to Comunidad de Visual Foxpro en Español
un cursor por cada grupo y establecer la relacion con set relation to expresion into cursor additive

no es necesario que la tabla principal este ordernada con un indice para establecer la relacion solo tiene que establecer el orden con set order to en la tabla hija

exl260708 .

unread,
Sep 16, 2016, 5:13:34 PM9/16/16
to publice...@googlegroups.com
a ya te entendí mil gracias German me as ayudado mucho voy hacer las pruebas y te comento 

Víctor Hugo Espínola Domínguez

unread,
Sep 16, 2016, 6:26:24 PM9/16/16
to publice...@googlegroups.com
Además de ZONA, cuales son los demás grupos?

Saludos,
Víctor.
Lambaré - Paraguay.


exl260708 .

unread,
Sep 16, 2016, 9:55:43 PM9/16/16
to publice...@googlegroups.com
CLASIFICACION --ESPECIE Y IDENT 

exl260708 .

unread,
Sep 16, 2016, 10:03:32 PM9/16/16
to publice...@googlegroups.com
cada  grupo tengo que mostrar  los totales de cada columnas en los encabezados ... 

Víctor Hugo Espínola Domínguez

unread,
Sep 16, 2016, 10:04:18 PM9/16/16
to publice...@googlegroups.com
Ahí va otro ejemplo más sencillo y se adecua a tu escenario

Saludos,
Víctor.
Lambaré - Paraguay.


MultiDetails._zip

exl260708 .

unread,
Sep 16, 2016, 10:21:52 PM9/16/16
to publice...@googlegroups.com
Gracias victor no se si lo entendi bien yo  tengo 4 grupos que quiero mostrar sus totales tengo que crear 4 detalles y condicionarlos 

Víctor Hugo Espínola Domínguez

unread,
Sep 16, 2016, 10:36:05 PM9/16/16
to publice...@googlegroups.com
Dame algo de tiempo para experimentar con más de un grupo, mientras debes entender perfectamente como funciona el ejemplo que te envié.

Saludos,
Víctor.
Lambaré - Paraguay.


exl260708 .

unread,
Sep 16, 2016, 10:41:48 PM9/16/16
to publice...@googlegroups.com
ya victor voy a  estudiarlo mas como funciona   porque me interesa muchisimo aprender a hacer reportes de diferentes maneras Gracias 

Saludos ..
Peru-Trujillo

Francisco ji

unread,
Sep 17, 2016, 1:16:52 AM9/17/16
to publice...@googlegroups.com

Disculpen la intromisión, no he leído todo el seguimiento.


Pero lo que entiendo es que se requiere poner un total en el grupo en el reporte al principio.


Lo que yo he hecho es agrupar en un cursos los totales y con un UNION rl detalle.


Al final en el encabezado del grupo pongo el Total de la suma y el resto en el detalle.


Ahí ya depende de las tablas que se utilizan (tal vez ya las detallo el colega, disculpen, no lo leo desde el principio) , tal vez rebusne o estoy diciendo el mismo consejos de los demás.


Espero te ayude.






De: publice...@googlegroups.com <publice...@googlegroups.com> en nombre de exl260708 . <eryp...@gmail.com>
Enviado: sábado, 17 de septiembre de 2016 02:41 a. m.
Para: publice...@googlegroups.com
Asunto: Re: [vfp] Re: Como Sumar los grupos en cabecera de cada grupo en el Reporte
 

exl260708 .

unread,
Sep 17, 2016, 9:57:54 AM9/17/16
to publice...@googlegroups.com
Que tal Buen Dia Foxeros se me presento un problema :

Dentro de Mi Reporte Tengo Grupos que de Penden de Otros grupos ejemplo
Grupo  ZONA Contenedor
           Grupo  CLASIFICACION                        
                                   Grupo  ESPECIE
                                                    Grupo IDENT

El Grupo clasificacion depende de ZONA   no se si estoy fallando en algo la tabla TEMPO_COMPRA2 y tiene indices en campo zona y clase






SELECT  Tempo_Compra2 
SET RELATION TO zona INTO GroupZonas ADDITIVE 

*// Agrupo totales x Clasificacion
SELECT  Tempo_Compra2 
SELECT zona,clase ,SUM(unid)as Unidad,SUM(kilos)as Kilos ,SUM(kbruto) as kBrutos ,sum(v_vta)as vventa,;
SUM(igv)as igv,sum(xprecio)as xprecio FROM Tempo_Compra2 ;
GROUP BY zona,clase INTO  CURSOR  GroupClasif READWRITE 
SELECT GroupClasif 
INDEX on zona TAG zona
INDEX on clase TAG clase 
SET ORDER TO clase 
SELECT Tempo_Compra2 
SET RELATION TO zona + clase into GroupClasif  ADDITIVE 


                      

El 17 de septiembre de 2016, 00:16, Francisco ji<fiba...@hotmail.com> escribió:

Disculpen la intromisión, no he leído todo el seguimiento.


Pero lo que entiendo es que se requiere poner un total en el grupo en el reporte al principio.


Lo que yo he hecho es agrupar en un cursos los totales y con un UNION rl detalle.


Al final en el encabezado del grupo pongo el Total de la suma y el resto en el detalle.


Ahí ya depende de las tablas que se utilizan (tal vez ya las detallo el colega, disculpen, no lo leo desde el principio) , tal vez rebusne o estoy diciendo el mismo consejos de los demás.


Espero te ayude.






Enviado: sábado, 17 de septiembre de 2016 02:41 a. m.

exl260708 .

unread,
Sep 17, 2016, 10:10:47 AM9/17/16
to publice...@googlegroups.com
Disculpen amigos foxeros lo solucione creando un indice por los dos campos y luego ordernarlos mi pregunta es es necesario crear los indices individuales para cada campo en el cursor por ejemplo 
SELECT GroupClasif 
INDEX on zona TAG zona
INDEX on clase TAG clase 

solucion....

SELECT GroupClasif 
INDEX on zona TAG zona
INDEX on clase TAG clase 
***********************************************
INDEX on zona + clase TAG claseZon 
SET ORDER TO claseZon 
*************************************
SELECT Tempo_Compra2 
SET RELATION TO zona + clase into GroupClasif  ADDITIVE

Germán Fabricio Valdez

unread,
Sep 17, 2016, 10:54:34 AM9/17/16
to Comunidad de Visual Foxpro en Español
es index on zona+clase tag zonaclase

siempre hay que convertir a caracter la expresion del indice cuando sea compuesto
por ejemplo index on dtos(fecha]+zona tag fechazona

y en la relacion hacer lo mismo

set relation to dtos(fecha)+zona into cursorhijo

exl260708 .

unread,
Sep 17, 2016, 12:12:20 PM9/17/16
to publice...@googlegroups.com
Gracias Germán Dime cuando por ejemplo me sale un campo del reporte *********   es porque en algunos casos esta diviendo cero / cero y me sale  como puedo controlar para que cuando salga asi *********  me muetre cero yo divido estos dos campos en el reporte GroupClasif.XPRECIO/GroupClasif.KILOS   para que salga  el precio por kilos pero habeces hay pieles que su preciototal y su totalkilo  es cero  y al dividirlos me sale *************** debe ser campo null 

Germán Fabricio Valdez

unread,
Sep 17, 2016, 12:25:16 PM9/17/16
to Comunidad de Visual Foxpro en Español
fijate la funcion IIF() si te sirve o ICASE()

exl260708 .

unread,
Sep 17, 2016, 12:36:40 PM9/17/16
to publice...@googlegroups.com
pero ese valor   **********  es un valor NUll 

Germán Fabricio Valdez

unread,
Sep 17, 2016, 12:44:13 PM9/17/16
to Comunidad de Visual Foxpro en Español
ese valor puede ser por un str() que esta mal dimensionado o un numero mas gramde que el campo que especificaste, no es null
vos tendrias que poner en el campo iif( valor=0,0,valor1/valor)

exl260708 .

unread,
Sep 17, 2016, 1:09:34 PM9/17/16
to publice...@googlegroups.com
gracias German lo solucione con tu ayuda ....

Víctor Hugo Espínola Domínguez

unread,
Sep 17, 2016, 4:37:17 PM9/17/16
to publice...@googlegroups.com
Hola estuve viendo la posibilidad de resolverlo usando multi details bands y ya me convencí que es imposible, para mí :-(

Adjunto una solución basada en consultas SQL que puede ser usada incluso con otros motores de bases de datos. La equivalencia entre los datos es la siguiente:

Grupo  ZONA Contenedor      COUNTRY
   Grupo  CLASIFICACION        CITY                  
      Grupo  ESPECIE              TITLEOFCOURTESY
         Grupo IDENT                 TITLE

En lugar de COUNT irían los SUM de tus datos


Saludos,
Víctor.
Lambaré - Paraguay.


manygroups.prg

HernanCano

unread,
Sep 18, 2016, 3:05:31 AM9/18/16
to Comunidad de Visual Foxpro en Español
Vaya,Víctor. 
Parece que programamos similar: yo tampoco pude llegar a una finalización adecuada con la información que se ha compartido (dos métodos) para "reportes multidetalle".

Aunque llegué a una solición que verás dentro de un rato.

Chao.

HernanCano

unread,
Sep 18, 2016, 3:12:38 AM9/18/16
to Comunidad de Visual Foxpro en Español
Hola, Pool.

Lamento mis respuestas anteriores. Se basan en lo que yo consideraba que debiera ser, no en mi experiencia con subtotales en el encabezado de los grupos, pues no los he usado ni recuerdo haberlos necesitado.

Autorizo a los admores del grupo retirarlos, o tal vez marcarlos como "No usar" o algo similar.

Si es conveniente, yo mismo los retiro luego que tú me autorices, pues realmente no le aportan a tu inquietud. Pido tu autotización, pues sinceramente considero de mal gusto retirar un planteamiento sin saber por qué.

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

Quiero hacerte algunos comentarios con respecto a tu inquietud (tengo una solución y ya puedo aportar acertadamente):

1. Nos mostraste la sgte sentencia:

select ZONA, CLASE, sum(UNID) as UNIDAD, sum(KILOS) as KILOS, sum(KBRUTO) as KBRUTOS, sum(V_VTA) as VVENTA,;
  sum(IGV) as IGV, sum(XPRECIO) as XPRECIO from TEMPO_COMPRA2 ;
  group by ZONA, CLASE into cursor GROUPCLASIF readwrite

donde veo que el ORDER BY no concuerda con lo que dices que necesitas. Quizá este comentario mío te resuelva un aspecto importante de tu planteamiento.

En el mismo mensaje dices que lo que necesitas (con respecto a Grupos) es el sgte esquema:

>>> Dentro de mi reporte tengo grupos que dependen de otros grupos; ejemplo:
>>> Grupo ZONA   Contenedor
>>>   Grupo CLASIFICACION                        
>>>     Grupo ESPECIE
>>>       Grupo IDENT

Por lo tanto tu sentencia debiera contener un Order By como el sgte:

  group by ZONA,CLASE,ESP_COD,IDENT into cursor GROUPCLASIF readwrite

2. Tu reporte tiene algún tipo de inconsistencia, pues la primera página sale en blanco. No busqué por qué. Utilicé tu mismo .FRX para una solución... sin modificar ésto (de la primera página).

3. Los tres primeros campos Unid, Kilos y KBruto están superpuestos... quizá porque el tamaño de la hoja (carta) no te alcanzaba. Hice ajustes para poderlos ver en tiempo de diseño.

4. Con el fin de poder ver en diseño cómo debían quedar los datos (ordenados por los campos adecuados), hice ajustes a la estructura del .DBF para poder ver los campos desde un BROWSE ordenados como se necesitaba. Este cambio no es requerido por mi propuesta: es sólo estético. El único que considero obligatorio es lo que dije en el número 1: ordenar por los cuatro campos.

5. Así mismo hice ajustes al .FRX en los cuatro encabezados para poder entender la petición. Estos cambios tampoco son necesarios para mi propuesta de solución. Sólo los hice para yo poderme guiar. Les puse label y les puse Alignment hacia la izquierda a todos.

6. En los .FRX que tengo está pendiente de aplicar lo que te dijo Germán sobre la columna "Precio x Kg". Hice los ajustes pertinentes y quedan así:

   iif(KILOS=0,0,XPRECIO/KILOS)

Considero que este campo es un PROMEDIO. En cuyo caso el valor que se debe mostrar en el campo de SubTotales (ó en los Encabezados de acuerdo a tu inquietud en este hilo) debiera tener un tratamiento diferente.

Te pido verifiques esta información.

Dentro de un rato te envío mi solución. Voy a hacer algunos ajustes estéticos.

Seguimos en contacto.


HERNAN CANO M
Analista de Sistemas - Programador


El sábado, 17 de septiembre de 2016, 8:57:54 (UTC-5), Pool escribió:
Que tal Buen Dia Foxeros se me presento un problema :

Dentro de Mi Reporte Tengo Grupos que de Penden de Otros grupos ejemplo
Grupo  ZONA Contenedor
           Grupo  CLASIFICACION                        
                                   Grupo  ESPECIE
                                                    Grupo IDENT

El Grupo clasificacion depende de ZONA   no se si estoy fallando en algo la tabla TEMPO_COMPRA2 y tiene indices en campo zona y clase

<< imagen >>

HernanCano

unread,
Sep 18, 2016, 3:31:30 AM9/18/16
to Comunidad de Visual Foxpro en Español
Pool: 

Dado que tienes los campos NOM_ZONA y ESPECIE en la misma DBF, considero que no necesitas el SET RELATION (sinceramemte me parece que TEMPO_COMPRA2.DBF proviene de un cursor --un comando SELECT-- también, en cuyo caso sí puede ser conveniente... pero como ese escenario no lo muestras, me basaré en lo que nos aportas).
 

HernanCano

unread,
Sep 18, 2016, 5:04:38 AM9/18/16
to Comunidad de Visual Foxpro en Español
Hola, Pool.

Como te mencioné antes, tengo una solución y deseo compartirla.

Disclaimer:
---------
Amigos: tomen en cuenta que normalmente toda solución caza adeptos o desacuerdos.

Esta se ofrece como un inicio.

Cada uno puede (1) aportar otra --si lo desea-- o (2) mejorar la presentada --si lo desea--, o incluso (3) descartarla.

La ofrezco para que el colega Pool la use como un inicio para su solventar necesidad, y para que cualq otro la use y/o la mejore según lo considere manteniendo el altruismo del foro.

Primero: el Escenario:
----------------

Nos compartiste varios archivos: TEMPO_COMPRA2.DBF, RESU_COMPRA3.FRX y su .FRT y  algunas imágenes con tu necesidad.

De ello se concluye que el ordenamiento necesario es el sgte:

Nombre del archivo de datos: TEMPO_COMPRA2.DBF

Nombre del Reporte: RESU_COMPRA3.FRX

Ordenamiento necesario:
      |--------------|----------|-------------|
      |Grupo         | Campo    | Campo       |
      |              | Codigo   | Descripcion |
      |--------------|----------|-------------|
      |ZONA          | ZONA     | NOM_ZONA    |
      |CLASIFICACION |          | CLASE       |
      |ESPECIE       | ESP_COD  | ESPECIE     |   
      |IDENT         | IDENT    |             |
      |--------------|----------|-------------|

el cual se puede lograr así:

select ZONA, CLASE, sum(UNID) as UNIDAD, sum(KILOS) as KILOS, sum(KBRUTO) as KBRUTOS, sum(V_VTA) as VVENTA,;
  sum(IGV) as IGV, sum(XPRECIO) as XPRECIO from TEMPO_COMPRA2 ;
  group by ZONA,CLASE,ESP_COD,IDENT into cursor GROUPCLASIF readwrite
  
O también se puede lograr así:

select ZONA, CLASE, sum(UNID) as UNIDAD, sum(KILOS) as KILOS, sum(KBRUTO) as KBRUTOS, sum(V_VTA) as VVENTA,;
  sum(IGV) as IGV, sum(XPRECIO) as XPRECIO from TEMPO_COMPRA2 ;
  group by ZONA, CLASE into cursor GROUPCLASIF readwrite
index on ZONA+CLASE+ESP_COD+IDENT tag IndexadoTemporal
** y así tal vez --al terminar el reporte-- el indexado se borre junto con su cursor GROUPCLASIF


Segundo: Algunos ajustes:
---------------------

- Se ajustaron los campos Unid, Kilos y KBruto, que están superpuestos para poderlos ver bien en diseño.

- Se modificó el grupo Clasificacion: "starts new page if less than: 1cm".

- La columna "Precio x Kg" queda con el sgte expresión:
     iif(KILOS=0,0,XPRECIO/KILOS)

- Se ajustaron los campos de los encabezados.

- No se ajustaron los campos de los Footers. Te lo dejo para que --didácticamente-- los desarrolles tú mismo, donde los requieras. Estos subtotales en los Footers se pueden hacer de la manera stándard como se hacen en VFP. No necesitan la solución que te planteo. 

Lo que te planteo es sólo para que podamos los SubTotales ubicar en el Header (Encabezado) de cada Grupo.

- Debes analizar tú mismo los Format de los campos numéricos. No utilicé la partícula "Kg." para que no interfirieran con la amplitud de cada columna. En tiempo de diseño, quité la partícula "Kg." y los tres campos son visibles completamente


Tercero: La Solución:
-----------------

- Sólo te muestro los tres primeros campos en mi solución, las tres perimeras columnas, y el promedio.

- No modifiqué la zona "Detail".

- Cada uno de los "SubTotales" mostrados en los encabezados tienen la sgte definición; te la expreso inicialmente para el primero.

Veamos cómo se define el SubTotal para el campo UNID en el Header5(Encabezado5) que es IDENT.

1. Se agrega un Field de un reporte (o copia y pega el que pusiste en el Detail y modifica en la pestaña General la expresión para que quede así:

SubTotal ( 'UNID', 'S', 'ZONA+CLASE+ESP_COD+IDENT' )

2. En la pestaña Calculate, verifica que el "Tipo de Cálculo" sea Ninguno.

Otras pestañas y valores no son críticos para la solución. Puedes hacer ajutes en las otras pestañas que desees (Format por ejm) para que al copiar y pegar (ver el sgte paso), te quede la columna simétrica.

3. Copia y pega el campo que acabas de crear en los otros encabezados y haz que la expresión quede según te muestro en el sgte cuadro:

   |---------|--------------|------------------------------------------------------|--------------------|
   | Header  | Grupo        | Expresión                                            |                    |
   |         |              | Campo UNID                                           |                    |
   |---------|--------------|------------------------------------------------------|--------------------|
   | Header1 | dtos(FECHA)  |                                                      |                    |
   | Header2 | ZONA         | SubTotal ( 'UNID', 'S', 'ZONA' )                     |                    |
   | Header3 | CLASE        | SubTotal ( 'UNID', 'S', 'ZONA+CLASE' )               |                    |   
   | Header4 | ESP_COD      | SubTotal ( 'UNID', 'S', 'ZONA+CLASE+ESP_COD' )       |                    |
   | Header5 | IDENT        | SubTotal ( 'UNID', 'S', 'ZONA+CLASE+ESP_COD+IDENT' ) |                    |
   |---------|--------------|------------------------------------------------------|--------------------|

4. Hablemos de la función SubTotal(). Es un .PRG (se adjunta) para que haga la labor que se requiere: obtener el total del subgrupo que se indique en el campo que se indique.

Entonces:
En el Header2 cuyo grupo es por ZONA escribimos:

   SubTotal ( 'UNID', 'S', 'ZONA' )
   
que significa "obtenga el subtotal del campo UNID de acuerdo a la ZONA en que va el reporte".

En el primer  parámetro se indica el campo sobre del que se va a obtener el SubTotal: UNID.
En el segundo parámetro se indica que lo que necesitamos es la SUMA; si deseamos CONTAR escribimos C; si deseamos el PROMEDIO, escribimos P. Esas son las tres operaciones que soporta la función.
En el tercer  parámetro se indica el la expresión para el grupo.  (((una imagen vale más que mil palabras: mira el cuadro que hay unas quince líneas arriba)))

5. La misma explicación para el resto de Headers.

6. Repite la operación con el resto de campos, por ejm para el tercer campo KBRUTO:

   |---------|--------------|--------------------------------------------------------|--------------------|
   | Header  | Grupo        | Expresión                                              |                    |
   |         |              | Campo KBRUTO                                           |                    |
   |---------|--------------|--------------------------------------------------------|--------------------|
   | Header1 | dtos(FECHA)  |                                                        |                    |
   | Header2 | ZONA         | SubTotal ( 'KBRUTO', 'S', 'ZONA' )                     |                    |
   | Header3 | CLASE        | SubTotal ( 'KBRUTO', 'S', 'ZONA+CLASE' )               |                    |   
   | Header4 | ESP_COD      | SubTotal ( 'KBRUTO', 'S', 'ZONA+CLASE+ESP_COD' )       |                    |
   | Header5 | IDENT        | SubTotal ( 'KBRUTO', 'S', 'ZONA+CLASE+ESP_COD+IDENT' ) |                    |
   |---------|--------------|--------------------------------------------------------|--------------------|

Sólo cambiamos UNID por KBRUTO.

7. Repite la operación para el último campo "Precio x Kg.":

   |---------|--------------|------------------------------------------------------------------------------|
   | Header  | Grupo        | Expresión del Campo en el Header para                                        |
   |         |              | obtener el SubTotal ("Promedio") ¿o no es así lo que el cliente necesita?    |
   |---------|--------------|------------------------------------------------------------------------------|
   | Header1 | dtos(FECHA)  |                                                                              |
   | Header2 | ZONA         | SubTotal ( 'iif(KILOS=0,0,XPRECIO/KILOS)', 'P', 'ZONA' )                     |
   | Header3 | CLASE        | SubTotal ( 'iif(KILOS=0,0,XPRECIO/KILOS)', 'P', 'ZONA+CLASE' )               | 
   | Header4 | ESP_COD      | SubTotal ( 'iif(KILOS=0,0,XPRECIO/KILOS)', 'P', 'ZONA+CLASE+ESP_COD' )       |
   | Header5 | IDENT        | SubTotal ( 'iif(KILOS=0,0,XPRECIO/KILOS)', 'P', 'ZONA+CLASE+ESP_COD+IDENT' ) |
   |---------|--------------|------------------------------------------------------------------------------|

Sólo cambiamos UNID por iif(KILOS=0,0,XPRECIO/KILOS). Y observemos la P en el segundo parámetro.

8. Preview. Puedes ejecutar MAIN.PRG
-----------------------------
Es tarde... es largo... traté de ser consciente de todo lo que escribí..... Si hay fallas de ortografía o de sintaxis de programación.... sólo verifiquemos la idea y avancemos. Pueden consultar o informar cómo les va....

Hasta pronto, amigos.

HERNAN

La extensión del adjunto es .ZIP .

Aporte-HCano__zip

exl260708 .

unread,
Sep 19, 2016, 11:07:48 PM9/19/16
to publice...@googlegroups.com
Muchas Gracias  HernanCano te has tomado la molestia y tu tiempo `para poder explicar paso a paso la solucion de mi problema   y tambien Muchas Gracias a todos los colaboradores de este foro --

si logre resolver el problema  pero muestro pantallasos​






HernanCano

unread,
Sep 19, 2016, 11:15:29 PM9/19/16
to Comunidad de Visual Foxpro en Español
Oh....

Luiz Alexandre Ruiz

unread,
Sep 20, 2016, 9:35:29 PM9/20/16
to Comunidad de Visual Foxpro en Español
Olá, não consegui ver as imagens.... :(
Reply all
Reply to author
Forward
0 new messages