Autor Tema: Urgente necesito de su ayuda (visual Fox)  (Leído 4201 veces)

0 Usuarios y 1 Visitante están viendo este tema.

wchinchillas

  • Visitante
Urgente necesito de su ayuda (visual Fox)
« : junio 10, 2008, 08:04:45 am »
Buenos dias, me gustaria me ayuden.-

Soy nuevo en hacer consultas en este foro.

tengo un problema con consolidados academicos, adjunto pongo una imagen del reporte que deseo.

El detalles es que tengo una cantidad de N materias por cada nivel academico, pero para cada año el mismo nivel academico puede tener mas materias o menos materia.

En fin, lo que no logro hacer es que sin importar el numero de materias que tenga pueda imprimir el mismo reporte sin estarlo modificando(desarrollo), es con el objetivo de que el usuario pueda modificar el numero de materias por nivel y asi siemrpre utilizar el mismo reporte, los campos son mas o menos asi:

codigo_alumno, nombre_alumno, mat1_nombre, mat1_act1, mat1_act2, mat1_act3, mat1_prom1, mat2_act1, mat2_nombre, mat2_act2, mat2_act3, mat2_prom1, y asi sucesivamente y estos son los campos que utilizo en el reporte.-


Las materias las tengo como registros pero tengo una rutinita que me los pasa asi con los nombres de campos que indico arriba.

Gracias de antemano,

Desconectado ruiz

  • Sv Full Member
  • *
  • Mensajes: 729
Re: Urgente necesito de su ayuda (visual Fox)
« Respuesta #1 : junio 10, 2008, 08:27:31 am »
bueno yo en lo personal no me complico mucho en estos casos lo que hago es mandar esos reportes a excel de ahi es mas facil para el usuario mandaros a imprimir

wchinchillas

  • Visitante
Re: Urgente necesito de su ayuda (visual Fox)
« Respuesta #2 : junio 10, 2008, 09:54:43 am »
Si los enviara a excel como lo puedo hacer para que este reporte tenga la misma apariencia y tomar en cuenta que pueden ser 2 o tres paginas y ademas una cantidad de materias diferente para cada nivel.

gracias por tu ayuda

Desconectado ruiz

  • Sv Full Member
  • *
  • Mensajes: 729
Re: Urgente necesito de su ayuda (visual Fox)
« Respuesta #3 : junio 10, 2008, 11:01:24 am »
miara quie te pongo un pequeño ejemplo mira si lo puedes adecuar a tu necesidad..

m.oExcel = CREATEOBJECT("Excel.Application")

WITH m.oExcel

&&Abrimos un libro nuevo
.Workbooks.ADD

&&Agregamos hojas (en caso necesario)
.Sheets.ADD

&&Cambiamos el nombre de la hoja
.activesheet.NAME = "Mi Hoja"

&&Le damos formato a una celda
.Sheets("Mi Hoja").cells(1,1).NumberFormat = "#,##0.00"

&&Salvamos el libro
.SAVE

&&Salimos de Excel
.QUIT
RELEASE m.oExcel



aqui est otro..


oExcel = createObject('Excel.Application')
oWorkbooks = oExcel.Workbooks.open(pagos) aqui es donde me marca error
Son = oWorkbooks.ActiveSheet.UsedRange.Rows.Count
Son1 = oWorkbooks.ActiveSheet.UsedRange.Columns.Count
if son > 1
With oWorkbooks.ActiveSheet
&& FILA = FILAS DE EXCEL
&& COLUMNA = COLUMNAS DE EXCEL
For FILA = 2 to son
VALOR_DE_LA_CELDA = .cells(FILA,columna).value
SELE pagos
APPEND BLANK
REPLACE auto WITH auto
replace docto with docto
replace fec_venc with fec_venc
replace importe wiTH importe
Endfor
Endwith
ENDIF



mira este un programita que hice yo por ahi para una aplicacion parecida a la que tu necesitas solo que este era para una de ventas por producto por mes...
espero te sirva..

aqui te pondo un ejemplo completo de como lo puedes hecer
para que lo pruebes

http://www.gigasize.com/get.php?d=vrnbv4dlm5f



IF USED('tabla')
   USE IN 'tabla'
endif

Do Case
Case Thisform.optiongroup1.Value = 1
   Use c:\productos_todo.Dbf Alias tabla
Case Thisform.optiongroup1.Value = 2
   Use c:\productos_cantidad.Dbf Alias tabla
Case Thisform.optiongroup1.Value = 3
   Use c:\productos_monto.Dbf Alias tabla
Endcase

x_registros = Afields(campos,'tabla')

x_periodo = 'Fecha inicial : 01/01/2008       Fecha final : 31/01/2008'

xlCenter   = -4108
xlBottom   = -4107
xlContext   = -5002

xlDiagonalDown      = 5
xlDiagonalUp      = 6
xlEdgeLeft         = 7
xlEdgeTop         = 8
xlEdgeBottom      = 9
xlEdgeRight         = 10
xlInsideVertical   = 11
xlInsideHorizontal   = 12

xlNone            = -4142
xlContinuous      = 1
xlAutomatic         = -4105
xlHairline         = 1

Wait Windows 'Creado el objeto Excel....' Nowait
oexcel = Createobject('excel.application')
oexcel.Workbooks.Add

If Type('oexcel') = 'O'
   x_fila      = 1
   x_columna    = 1

   Wait Windows 'Generando encabezados...' Nowait

   oexcel.cells(x_fila,x_columna).Select
   oexcel.Selection.Font.Size = 12
   oexcel.Selection.Font.Bold = .T.
   oexcel.Selection.Value = Alltrim(g_empresa)

   x_fila = x_fila + 1

   oexcel.cells(x_fila,x_columna).Select
   oexcel.Selection.Font.Size = 10
   oexcel.Selection.Font.Bold = .T.
   oexcel.Selection.Value = 'REPORTE DE PRODUCTO POR SUCURSAL'

   x_fila = x_fila + 2

   oexcel.cells(x_fila,x_columna).Select
   oexcel.Selection.Font.Size = 8
   oexcel.Selection.Font.Bold = .T.
   oexcel.Selection.Value = x_periodo

   x_fila = x_fila + 2

   oexcel.Rows(x_fila).Select
   oexcel.Selection.Font.Bold = .T.

   
   IF Thisform.optiongroup1.Value = 1
      For i = 1 To x_registros

         x_columna = i

         If x_columna = 1
            oexcel.cells(x_fila,x_columna).Select
            oexcel.Selection.ColumnWidth = 30
            oexcel.cells(x_fila,x_columna).Value = campos(i,1)
         Endif

         If Mod(i,2) = 0 &&Or i = x_registros

            oexcel.Columns(i).Select
            oexcel.Selection.NumberFormat = "#,##0"
            oexcel.Selection.ColumnWidth = 5.5

            oexcel.Columns(i+1).Select
            oexcel.Selection.NumberFormat = "#,##0.00"
            oexcel.Selection.ColumnWidth = 7.5

            If Substr(campos(i,1),Len(campos(i,1))-1,1) = '_'
               oexcel.cells(x_fila,x_columna).Value = Substr(campos(i,1),1,Len(campos(i,1))-2)
            Else
               oexcel.cells(x_fila,x_columna).Value = campos(i,1)
            Endif

            oexcel.Range(oexcel.cells(x_fila,x_columna),oexcel.cells(x_fila,x_columna+1)).Select
            With oexcel.Selection
               .HorizontalAlignment = xlCenter
               .VerticalAlignment = xlBottom
               .WrapText = .F.
               .Orientation = 0
               .AddIndent = .F.
               .IndentLevel = 0
               .ShrinkToFit = .F.
               .ReadingOrder = xlContext
               .MergeCells = .F.
            Endwith
            oexcel.Selection.Merge

            If i = x_registros-1
               oexcel.cells(x_fila,x_columna).Value = 'TOTAL'
            Endif
         Endif
      Next

      x_fila = x_fila + 1

      For i = 2 To x_registros

         x_columna = i

         If Mod(i,2) = 0
            oexcel.cells(x_fila,x_columna).Value = 'CANT'
         Else
            oexcel.cells(x_fila,x_columna).Value = 'MONTO'
         Endif
      Next


      oexcel.Range(oexcel.Columns(1),oexcel.Columns(x_registros)).Select

   ELSE

      For i = 1 To x_registros

         x_columna = i

         If x_columna = 1
            oexcel.cells(x_fila,x_columna).Select
            oexcel.Selection.ColumnWidth = 30
            oexcel.cells(x_fila,x_columna).Value = campos(i,1)
         Else
            
            IF thisform.optiongroup1.Value = 2
               oexcel.Columns(i).Select
               oexcel.Selection.NumberFormat = "#,##0"               
            ELSE
               oexcel.Columns(i).Select
               oexcel.Selection.NumberFormat = "#,##0.00"            
            endif
            
            oexcel.Selection.ColumnWidth = 8
            
            If Substr(campos(i,1),Len(campos(i,1))-1,1) = '_'
               oexcel.cells(x_fila,x_columna).Value = Substr(campos(i,1),1,Len(campos(i,1))-2)
            Else
               oexcel.cells(x_fila,x_columna).Value = campos(i,1)
            Endif

            If i = x_registros
               oexcel.cells(x_fila,x_columna).Value = 'TOTAL'
            Endif
         Endif
      Next

   ENDIF

   oexcel.Rows(x_fila).Select
   oexcel.Selection.Font.Bold = .T.
   With oexcel.Selection
      .HorizontalAlignment = xlCenter
      .VerticalAlignment = xlBottom
      .WrapText = .F.
      .Orientation = 0
      .AddIndent = .F.
      .IndentLevel = 0
      .ShrinkToFit = .F.
      .ReadingOrder = xlContext
      .MergeCells = .F.
   Endwith

   Select tabla
   Go Top
   Scan
      x_columna    = 0
      x_fila = x_fila + 1
      Wait Windows 'Enviando a  excel el producto ----> ' + Alltrim(producto) Nowait
      For i = 1 To x_registros
         x_columna    = x_columna + 1
         x_valor    = 'tabla.' + campos(i,1)
         x_tipo       = campos(i,2)

         If x_tipo = 'N'
            oexcel.cells(x_fila,x_columna).Value = &x_valor
         Else
            oexcel.cells(x_fila,x_columna).Value  = [']+&x_valor
         Endif
      Next

   Endscan

   oexcel.Rows(x_fila).Select
   oexcel.Selection.Font.Bold = .T.


   oexcel.Range(oexcel.cells(6,1),oexcel.cells(x_fila,x_columna)).Select

   oexcel.Selection.BorderS(xlDiagonalDown).LineStyle = xlNone
   oexcel.Selection.BorderS(xlDiagonalUp).LineStyle = xlNone
   With oexcel.Selection.BorderS(xlEdgeLeft)
      .LineStyle = xlContinuous
      .ColorIndex = xlAutomatic
      .TintAndShade = 0
      .Weight = xlHairline
   Endwith
   With oexcel.Selection.BorderS(xlEdgeTop)
      .LineStyle = xlContinuous
      .ColorIndex = xlAutomatic
      .TintAndShade = 0
      .Weight = xlHairline
   Endwith
   With oexcel.Selection.BorderS(xlEdgeBottom)
      .LineStyle = xlContinuous
      .ColorIndex = xlAutomatic
      .TintAndShade = 0
      .Weight = xlHairline
   Endwith
   With oexcel.Selection.BorderS(xlEdgeRight)
      .LineStyle = xlContinuous
      .ColorIndex = xlAutomatic
      .TintAndShade = 0
      .Weight = xlHairline
   Endwith
   With oexcel.Selection.BorderS(xlInsideVertical)
      .LineStyle = xlContinuous
      .ColorIndex = xlAutomatic
      .TintAndShade = 0
      .Weight = xlHairline
   Endwith
   With oexcel.Selection.BorderS(xlInsideHorizontal)
      .LineStyle = xlContinuous
      .ColorIndex = xlAutomatic
      .TintAndShade = 0
      .Weight = xlHairline
   Endwith

   oexcel.Selection.Font.Size = 8
   oexcel.Visible = .T.

   Release oexcel
   Messagebox('Proceso concluido')
Else

Endif
« Última Modificación: junio 10, 2008, 11:27:03 am por ruiz »