• Miércoles 29 de Noviembre de 2023, 10:12

Autor Tema:  Editar controles Data Report en tiempo de ejecucion  (Leído 5638 veces)

arbsoft

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Editar controles Data Report en tiempo de ejecucion
« en: Lunes 2 de Agosto de 2010, 03:57 »
0
Hola Expertos del Foro VB 6.0, tengo algo dificil pero no imposible para uds, bueno y ya hice casi de todo y hasta ahora no podido lograrlo, es por eso que recurro a su apoyo de expertos.
Se trata de lo siguiente: Deseo mostrar el DataReport en tiempo de ejecucion (como si estuviera en tiempo de diseño) para que el usuario pueda cambiar de posicion los controles y guardarlos en su nueva posicion, en VFP si se puede, pero en VB 6.0 he intentado y no lo logro, haber si alguien me da una ayuda por favor.

Nota: No confundir con mostrar datos en el reporte.

Les agradezco sus respuestas anticipadamente... saludos

79137913

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Editar controles Data Report en tiempo de ejecucion
« Respuesta #1 en: Lunes 2 de Agosto de 2010, 21:09 »
0
HOLA!!!
Mira, no creo que nos tengas como expertos en VB6 como dice tu mensaje ya que lo googlee con cadena exacta y lo encontre en 3 foros mas, sinceridad aunque sea.

Pero no importa, para mi, no deberias usar un control data report, yo para mis programas imprimo mediante codigo, aca te dejo el ejemplo que me inspiro para hacer esto, y lo que deberias hacer es un form con labels para arrastrar, de tal manera que luego genere el reporte mediante la posicion de los labels ;).

Ahh y aca el MSDN de Microsoft que explica como usar la Clase Priter, es bastante facil.

msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.powerpacks.printing.compatibility.vb6.printer_members.aspx

Código: Visual Basic
  1.  
  2. Private Type lineas
  3.     Tarea As String
  4.     Linea As String
  5.     Cant As String
  6.     PrecioUnitario As String
  7.     PrecioTotal As String
  8.     Descripcion As String
  9.     Nhoras As String
  10. End Type
  11.  
  12. Dim Filas() As lineas
  13.  
  14. Dim x As Integer 'numero de registro de "Filas"
  15. Dim I As Integer
  16.  
  17.  
  18. Dim Contrato As String
  19. Dim Contratista As String
  20. Dim Ejec As String
  21. Dim Fenvio As String
  22. Dim Tarea As String
  23. Dim Tags As String
  24. Dim DescripcionTrabajos As String
  25.  
  26. Private Sub Form_Load()
  27.  
  28.     x = 2
  29.  
  30. ReDim Filas(x)
  31.  
  32. 'rellenamos los datos de las variables de prueba
  33.  
  34.     Contrato = "199827"
  35.     Contratista = "Antonio Fdez."
  36.     Ejec = "324"
  37.     Fenvio = "19/11/06"
  38.     Tarea = "EEAACC"
  39.     Tags = "PAOEIRD"
  40.     DescripcionTrabajos = "Inmunizacion de las bacterias gastroinservibles " & _
  41.                           "de la traqueotomizacion"
  42.  
  43.     Filas(0).Tarea = "111"
  44.     Filas(0).Linea = "11"
  45.     Filas(0).Cant = "1111"
  46.     Filas(0).PrecioUnitario = "11111 €"
  47.     Filas(0).PrecioTotal = "11111 €"
  48.     Filas(0).Descripcion = "Rendicion incondicional de las almorranas involuntarias"
  49.     Filas(0).Nhoras = "34 H"
  50.  
  51.     Filas(1).Tarea = "222"
  52.     Filas(1).Linea = "22"
  53.     Filas(1).Cant = "2222"
  54.     Filas(1).PrecioUnitario = "22222 €"
  55.     Filas(1).PrecioTotal = "22222 €"
  56.     Filas(1).Descripcion = "Caperucita solo tiene 16 primaveras sin flores" & _
  57.                             " sin vida, va tanto el cantaro a la fuente que " & _
  58.                             " se acaba rompiendo esternocleidomastoideo de la sin razon"
  59.     Filas(1).Nhoras = "34 H"
  60.  
  61.     Filas(2).Tarea = "333"
  62.     Filas(2).Linea = "33"
  63.     Filas(2).Cant = "3333"
  64.     Filas(2).PrecioUnitario = "33333 €"
  65.     Filas(2).PrecioTotal = "333333 €"
  66.     Filas(2).Descripcion = "quiero volar lejos de aqui escapar"
  67.     Filas(2).Nhoras = "34 H"
  68.  
  69.     Impresion.Width = 297 'tamaño del formulario (solo para hacer pruebas)
  70.     Impresion.Height = 210 'tamaño del formulario (solo para hacer pruebas)
  71.  
  72.     Me.Show
  73.  
  74.     IMPRIMIR
  75.  
  76. End Sub
  77.  
  78.  
  79. Public Function IMPRIMIR()
  80.  
  81. Dim PosY As Integer 'posicion columna
  82. Dim PosX As Integer 'posicion linea
  83.  
  84. Dim Linea As Integer 'el tamaño maximo de la linea
  85. Dim Text As String 'va guardando el texto por bloques
  86. Dim Caracter As String 'recoge los caracteres
  87. Dim Palabra As String 'recoge la palabra
  88.  
  89. Dim Dia As String
  90. Dim Mes As String
  91. Dim Ano As String
  92.  
  93.     'le decimos la orientacion de las paginas, en este caso apaisada
  94.     Printer.Orientation = 2
  95.  
  96.     'modo de escala en milimetros
  97.     Printer.ScaleMode = 6
  98.  
  99.     'le decimos el tamaño de la escala, en este caso dinA4 en milimetros
  100.     Printer.ScaleWidth = 297
  101.     Printer.ScaleHeight = 210
  102.  
  103.     'el tamaño de la letra
  104.     Printer.FontSize = 9
  105.  
  106.     Printer.FontBold = False
  107.  
  108.     'funcion colocar: el primer valor es el texto, el segundo la posicion _
  109.      en la fila y el tercero la posicion en la columna-> colocar texto, PosicionFila, _
  110.      PosicionColumna
  111.  
  112.     colocar Contrato, 5, 27
  113.     colocar Contratista, 41, 27
  114.     colocar Ejec, 100, 27
  115.  
  116.     'Desglosamos fecha envio (ajustamos a las marcas del impreso / /)
  117.  
  118.     Dia = Mid$(Fenvio, 1, 2)
  119.     Mes = Mid$(Fenvio, 4, 2)
  120.     Ano = Mid$(Fenvio, 7, 2)
  121.  
  122.     colocar Dia, 228, 27
  123.     colocar Mes, 238, 27
  124.     colocar Ano, 248, 27
  125.  
  126.     colocar Tarea, 1, 50
  127.     colocar Tags, 21, 50
  128.     colocar DescripcionTrabajos, 51, 50
  129.  
  130.     PosY = 190
  131.  
  132.     'marcamos el tamaño máximo que puede tener la descripcion por linea
  133.     Linea = 41
  134.  
  135.     For I = 0 To x
  136.         colocar Filas(I).Tarea, 1, PosY
  137.         colocar Filas(I).Linea, 21, PosY
  138.         colocar Filas(I).Cant, 35, PosY
  139.         colocar Filas(I).PrecioUnitario, 52, PosY
  140.         colocar Filas(I).PrecioTotal, 74, PosY
  141.         colocar Filas(I).Nhoras, 183, PosY
  142.  
  143.         Palabra = ""
  144.         Text = ""
  145.         x = 1
  146.  
  147.         'imprimimos la descripcion (segun el tamaño de linea)
  148.  
  149.         'Funcionamiento: le damos un texto de cualquier tamaño y
  150.         'esta parte nos lo ajustará según el tamaño de linea que escojamos
  151.         'en tantas filas como sea necesario, respetando las palabras completas.
  152.  
  153.         Do
  154.  
  155.             Caracter = Mid(Filas(I).Descripcion, x, 1)
  156.  
  157.             If Caracter <> " " And x <> Len(Filas(I).Descripcion) Then
  158.                 Palabra = Palabra & Caracter
  159.             Else
  160.                 'en el case que se ajuste a la linea
  161.                 If Len(Text) + Len(Palabra) = Linea Then
  162.                     colocar Text & " " & Palabra, 98, PosY
  163.                     Palabra = ""
  164.                     Text = " "
  165.                     PosY = PosY + 5
  166.                 'en el caso que sea mayor que la linea
  167.                 ElseIf Len(Text) + Len(Palabra) > Linea Then
  168.                     colocar Text, 98, PosY
  169.                     PosY = PosY + 5
  170.                     Text = Palabra
  171.                     Palabra = ""
  172.                 'en el case que sea la ultima linea
  173.                 ElseIf x = Len(Filas(I).Descripcion) Then
  174.                     colocar Text & " " & Palabra & Right(Filas(I).Descripcion, 1), 98, PosY
  175.                     PosY = PosY + 5
  176.                     Text = ""
  177.                     Palabra = ""
  178.                 Else 'todavía es menor que el tamaño de la linea
  179.                     Text = Text & " " & Palabra
  180.                     Palabra = ""
  181.                 End If
  182.             End If
  183.  
  184.             x = x + 1
  185.    
  186.         Loop Until x > Len(Filas(I).Descripcion)
  187.     Next
  188.            
  189.     ' mandar el trabajo a imprimir
  190.     Printer.EndDoc
  191.  
  192. End Function
  193.  
  194.  
  195. Private Function colocar(texto As String, x As Integer, Y As Integer)
  196.  
  197.     Printer.CurrentX = x
  198.     Printer.CurrentY = Y
  199.     Printer.Print texto
  200.  
  201. End Function
  202.  
  203.     'Para evitar gastar papel "a lo tonto", lo mejor es hacer pruebas en un _
  204.     'formulario para ello, comentar las lineas:
  205.         'Printer.Orientation
  206.         'Printer.EndDoc
  207.     'y sustituir en todo el formulario "printer" por el nombre del formulario, _
  208.     'en este caso
  209.  
  210.  


SUERTE!!!

No desistas pero si vas a un foro no seas adulador para que respondan tus preguntas, si no te sirve responde de nuevo aca y te digo la manera facil de editar un data report  :D  , pero de verdad te recomiendo que uses el metodo printer, es mucho mas versatil.

arbsoft

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Editar controles Data Report en tiempo de ejecucion
« Respuesta #2 en: Martes 3 de Agosto de 2010, 20:18 »
0
Gracias por la respuesta, ... creo q has tomado a mal la publicacion de mi consulta en los 3 foros, la verdad no veo la razon, solo q quiero resolver ese inconveniente.

79137913

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Editar controles Data Report en tiempo de ejecucion
« Respuesta #3 en: Miércoles 4 de Agosto de 2010, 13:37 »
0
No hay problema ;-)

79137913

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Editar controles Data Report en tiempo de ejecucion
« Respuesta #4 en: Miércoles 4 de Agosto de 2010, 14:34 »
0
Bueno, te paso a explicar, primero vas a necesitar hacer un form con fondo blanco donde se encuentren todos los componentes que tiene el data report y en su debido sitio, despues de eso, un modulo para guardar variables de respaldo, y por ultimo codigo en el data report.

Primero: EL FORM
Aca ubicamos:
                     Un textbox que simulara ser un label editable. (uno por cada label)
                     Un label que simulara ser un el area donde se escriben los datos de la Bd. (uno por cada columna)
                     Una linea que representa cada linea del reporte. (uno por cada linea)
                     Un shape que representa cada shape del reporte. (uno por cada shape)
                     Una imagen que representa cada imagen del reporte. (uno por cada imagen)

Terminado esto hace que se puedan arrastrar a gusto por el form.
Y por ultimo toma las propiedades de left y top de cada uno, eso guardalo en variables dentro del modulo

Segundo: EL MODULO
Aca ubicamos 2 variables (o un vector como mas te guste) por cada control que ubicamos en el form (cada una representa X e Y)

Tercero: EL DATAREPORT
Aca vas a ver el codigo y pones:

Código: Visual Basic
  1.  
  2. Private Sub DataReport_Activate()
  3. label1.left = VARIABLE DE LEFT DEL TEXTBOX
  4. label1.top = VARIABLE DE TOP DEL TEXTBOX
  5. line1.left = VARIABLE DE LEFT DE LA LINEA
  6. line1.top = VARIABLE DE TOP DE LA LINEA
  7. ' Y ASI CON TODOS LOS CONTROLES
  8. End Sub
  9.  
  10.  


ESPERO QUE TE HAYA SERVIDO IGUAL YO SOY DE COMPLICARME XD.

NO  :hitcomp: CONTINUA  :comp:

SUERTE!!!

BUENO, VOY A SEGUIR LABURANDO  :brickwall:  SINO EL JEFE ME PUEDE AGARRAR  XP

arbsoft

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Editar controles Data Report en tiempo de ejecucion
« Respuesta #5 en: Miércoles 4 de Agosto de 2010, 14:49 »
0
Te agradezco bastante, voy a programarlo de esa manera... saludos.