Campos variables en un reporte de visual Foxpro

Creo un cursor en base a ciertos criterios, algunas veces genera tres campos otras cinco y así, ademas los campos no siempre se llaman igual. Al crear el reporte para el usuario, no puedo estar cambiando los nombres de los campos cada que hace una consulta, como puedo definir los campos algo como esto: iiF(fcount() > 10, field(5) , "") cuando pongo field(5) me da el nombre le campo, he intentado poniendo &filed(5) pero manda error.

De antemano gracias.

1 Respuesta

Respuesta
1

Pasa la consulta para doder mirar que hacer en la consulta por eso de que a veces te trae unos campos y a veces te trae otros es un poco extraño debes estar usando algunas condiciones también puedes usa AS no se si lo haces para generar campos con nombres standat

Gracias de por la pronta respuesta

note tengo unas bases de inventarios de las cuales selecciono algunas familias o grupos

SELECT FAMI_TIP AS FAMILIA, UNIDAD, OR_FAM, fam_clas , SUM(VALOR) AS VALOR;
FROM INV_1 WHERE LEN(ALLTRIM(fami_tip)) > 0;
GROUP BY 1,2,3,4 ORDER BY 3 ,4 INTO CURSOR FAMILIA READWRITE

SELECT distinct familia, fam_clas , or_fam FROM familia ;
order by 2 , 3 INTO CURSOR familias readwrite

** para hacer mi tabla parto de las familias que cumplen con la condición

y el nombre de la familia la uso como nombre del campo creando una cadena como sigue

CFIELDS = ""
SELECT FAMILIAS
GOTO TOP
DO WHILE !EOF()
CFIELDS = CFIELDS + CHRTRAN(ALLTRIM(FAMILIA)," ","_") + " N(15,2) , "
SKIP
ENDDO

note y creo un cursor con tantos campos hayan familias encontradas con la condición

CREATE CURSOR INVENTARIO ;

(plAZA C(20) ,DESCRIPCIÓN C(20),&cFild, &CFIELDS ;
FECHA D)

note cuando muestro el grid en el formulario uso los nombres de los campos como los encabezados para verlo y queda bienuso el sigi código

oGrd1 = Thisform.Grid1 &&GRidsel1
oGrd1.Anchor = 0
Select &c_base1
Goto Top
lcAlias = Alias()
oGrd1.RecordSource = ""
oGrd1.RecordSource = lcAlias
oGrd1.ScrollBars = nscroll
Select (lcAlias )
Goto Top
oGrd1.ColumnCount = FCOUNT() -1
For i = 1 To FCOUNT() -1
oGrd1.Columns(i).Visible = .T.
oGrd1.Columns(i).ControlSource = Field(i)
oGrd1.Columns(i).Header1.FontSize = 7
oGrd1.Columns(i).Header1.caption = ALLTRIM(CHRTRAN(Field(i),"_"," "))
oGrd1.Columns(i).Header1.FontBold = .T.
oGrd1.Columns(i).Header1.wordwrap = .T.
oGrd1.Columns(i).Header1.Alignment = 2
oGrd1.Columns(i).ReadOnly = .T.
oGrd1.Columns(i).fontsize = 9
If Type(Field(i)) = "N"
oGrd1.Columns(i).InputMask = "999,999,999"
Endif
ENDFOR

note ahí todo bien le pogno algunas monerías que no vienen que no vienen al caso.

**********************************

el problema lo tengo cuando diseño el reporte porque los campos son dinámicos en función a si cumplen la condición inicial, a veces son cinco otras son 10 ahí el problema

Los campos plaza , descripción no tienen problema el problema es con los que se crean en función a la tabla familias

como hacerlo?

de antemano mil gracias

Interesante lo que haría yo es crear un solo campo como cuando creas el grid para ponerlo alado de descripción simulando varias columnas sin embargo seria solo una tendrías problemas con el espacio que los separa pero si pudiste idear lo del grid yo creo que podrás encontrar la solución par los espacios de separación según el contenido de la columna o Campo entonces el titulo del report seria también una variable con datos de la tabla como el encabezado del grid y el contenido un solo campo con los datos de la consulta la única limitante es que por campo solo tienes 256 caracteres. No se si me deje entrender

Si muy claro, de hecho lo he intentado el problema es que cuando se genera el informe necesito usar fuente curier para que se muestre como columnas lo que hace que pierda un poco la cosmética del informe, lo veré con mi usuario para ver si no le molesta usar curier en su informe. gracias por el tip si encuentro una solución la comentare.

Muchas gracias por tu tiempo y apoyo.

Muy bien Finaliza tu pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas