Autor Tema: Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma  (Leído 6443 veces)

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

aedEric

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +20/-0
    • Ver Perfil
 :( hola a todos de nuevo aqui molestando  :(  con lo sugerido por waldo asta cierto punto solucione lo que requeria pero aun sigo atorado
http://leandroascierto.com/foro/index.php?topic=2731.0y no logro encontrar la solución para lo que requiero realizar


tratare de explicarme lo mas claro posible para ver si alguien me puede apoyar con alguna sugerencia o alguna idea

tengo un aplicativo que genera una boleta(reporte(datareport o reportmanager) en este punto no tengo problema ahora bien

bueno la problematica viene aqui la boleta (reporte) que genera el aplicativo cada cierto tiempo (3 o 6 mese) tiene que ser modificado

la boleta o reporte se compone de un texto que es concatena de un texto fijo y de variables por ejemplo


Código: [Seleccionar]
sParrafoUno= "La niñ" & sNiño & " nació en " & sCiudad & " y sus padres fueron " & sPapas
y puede modificarse a:
Código: [Seleccionar]
sParrafoUno= sPapas & " son padres del niñ" & sNiño & " que nacio en " & ciudad
lo más sencillo seria cambiar
el valor de la variable "sParrafoUno" volver a copilar y ahi acaba el problema, el problema reside en que el aplicativo es usado en donde no hay normalmente internet para actualizar el aplicativo, los lugares son sumamente retirados y hablo de un estado a otro y lugares remotos

por eso es que tengo la idea que el usuario pueda modificar su propio reporte

ojala alguna mente briallante de de ustedes amigos foristas me pueda iluminar con alguna idea o sugerencia

como  nota he tratado de utilizar callbyname y me funciona hasta cierto punto pero el detalle es este

asi funciona perfecto

Código: [Seleccionar]
CallByName Me, "sParrafoUno", VbLet, sPapas & " son padres del niñ" & sNiño & " que nacio en " & ciudad
pero si trato de cambiar el valor de la variable con el valor de otra variable que viene de una bd o de un archivo .ini asi no funciona

Código: [Seleccionar]
CallByName Me, "sParrafoUno", VbLet, sTexto
espero alguna otra persona me pueda apoyar con alguna otra idea o con alguna sugerencia para utilizar correctamente callbyname para obtener el resultado que deseo de antemano agracias
No he fracasado. He encontrado 10000 soluciones que no funcionan.

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #1 en: Septiembre 10, 2014, 06:46:06 pm »
Estimado aedEric
 
He tratado de reproducir tú problema sin éxito. Por ello para poder ayudar mejor, por favor, podrías adjuntar una copia simplificada del código del proyecto. Puntualmente la parte que te genera problemas.
 
 
Saludos desde algún lugar de Lima-Perú
Saludos, desde algún lugar de Lima-Perú

aedEric

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +20/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #2 en: Septiembre 11, 2014, 02:30:33 pm »
Hola Albertomi  :) muchisimas gracias por leer mi post y por tu apoyo https://www.dropbox.com/s/jaek5lm4sbf11h9/Eric.rar?dl=0

aqui subi el pequeño ejemplo de lo que no me genera el resultado deseado  y de como es el resultado que deseo obtener, espero me puedas apoyar con alguna sugerencia o opiniones, a lo mejor estoy planteando mal mi problema y ustedes me puedan brindar alguna idea para solucionarlo de otra manera  sin usar callbyname de antemano gracias

a todos muchas gracias por su apoyo saludos
No he fracasado. He encontrado 10000 soluciones que no funcionan.

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #3 en: Septiembre 11, 2014, 03:44:20 pm »
Hola Eric, nuevamente,
Es posible que el usuario pueda cargar o modificar todo el texto que iria cargado en ParrafoUno?

Si es asi, podes guardar la variable ParrafoUno y su contenido en un INI, BD, registry, el usuario edita el valor (del ini, bd, registry) y cuando inicia la aplicacion lee el valor de ParrafoUno desde el ini, y lo carga a la variable interna ParrafoUno de tu app.

Se entendio?

Te paso un codigo que tenia guardado por ahi, para leer y escribir archivos INI

En un BAS

Código: (VB) [Seleccionar]
'Example by Antti Häkkinen (antti@theredstar.f2s.com)
'Visit his website at http://www.theredstar.f2s.com/
'require variable declaration
Option Explicit

'declares for ini controlling
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long


'// INI CONTROLLING PROCEDURES

'reads ini string
Public Function ReadIni(Filename As String, Section As String, Key As String) As String
    Dim RetVal As String * 255, v As Long
    v = GetPrivateProfileString(Section, Key, "", RetVal, 255, Filename)
    If v > 0 Then
        ReadIni = Left(RetVal, v)
    Else
        ReadIni = ""
    End If
End Function

'reads ini section
Public Function ReadIniSection(Filename As String, Section As String) As String
    Dim RetVal As String * 255, v As Long
    v = GetPrivateProfileSection(Section, RetVal, 255, Filename)
    ReadIniSection = Left(RetVal, v - 1)
End Function

'writes ini
Public Sub WriteIni(Filename As String, Section As String, Key As String, Value As String)
    WritePrivateProfileString Section, Key, Value, Filename
End Sub

'writes ini section
Public Sub WriteIniSection(Filename As String, Section As String, Value As String)
    WritePrivateProfileSection Section, Value, Filename
End Sub


En un FORM

Código: (VB) [Seleccionar]
Private Sub Form_Load()
'if error occures resume still
On Error Resume Next

'local variables
Dim File As String, OFLen As Double, _
    Str As String

'set our varibles
File = "C:\temp.txt"
OFLen = FileLen(File)

'write few example sections:
WriteIniSection File, "Test1", ""
WriteIniSection File, "Test2", "Here shoud be found some text"

'write few ini strings
WriteIni File, "Test3", "Ini1", "This is ini 1"
WriteIni File, "Test1", "Ini2", "This is ini 2"

'inform we're written the data
MsgBox Format((FileLen(File) - OFLen) / 1024, "0.00") & " KB data written to " & Chr(34) & File & Chr(34)

'read the ini file
Str = Str & "Test2 section: " & vbTab & ReadIniSection(File, "Test2") & vbCrLf
Str = Str & "Test1 section: " & vbTab & ReadIniSection(File, "Test1") & vbCrLf
Str = Str & "Ini1 string: " & vbTab & ReadIni(File, "Test3", "Ini1") & vbCrLf
Str = Str & "Ini2 string: " & vbTab & ReadIni(File, "Test1", "Ini2") & vbCrLf

'show data
MsgBox Str



End Sub




aedEric

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +20/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #4 en: Septiembre 11, 2014, 05:02:43 pm »
Waldo muchas gracias por contestar te agradezco

Citar
Si es asi, podes guardar la variable ParrafoUno y su contenido en un INI, BD, registry, el usuario edita el valor (del ini, bd, registry) y cuando inicia la aplicacion lee el valor de ParrafoUno desde el ini, y lo carga a la variable interna ParrafoUno de tu app.

Se entendio?

en cuanto a esto muchas gracias por el aporte  en algunas ocasiones ocupo algo parecido en el cual guardo cierta informacion en un archivo .ini  y despues la leo desde la aplicacion en mi caso por ejemplo para cambiar la cadena de conexion de mi bd ahi todo perfecto

mi pregunto, mi duda  es en lo siguiente waldo que pasa si dentro  de esto que me comentas

Citar
cuando inicia la aplicacion lee el valor de ParrafoUno desde el ini, y lo carga a la variable interna ParrafoUno de tu app.

el valor de Parrafouno contiene el nombre de una variable


por ejemplo

el archivo ini contiene esto

"Yo soy de " & sPais
en mi aplicativo tengo como publica la variable sPais
Código: [Seleccionar]
public sPais as string
sPais = "México"
si yo lo muestro
en un msgbox
Código: [Seleccionar]
msgbox ParrafoUnoeste mostraria lo siguiente
 b]"Yo soy de " & sPais[/b]

por que & sPais me lo toma como string  :(

y lo que deseo realizar es que me muestre

"Yo soy de México"

que en este caso sPais me lo tome como nombre o referencia a dicha variable

talvez mi explicación es un poco rebuscada espero me haya dado a entender y ser un poco mas claro waldo te agradecere si me puedes dar tu opinion saludos









No he fracasado. He encontrado 10000 soluciones que no funcionan.

Luffy

  • Kilobyte
  • **
  • Mensajes: 90
  • Reputación: +4/-2
  • Desarrollar es el arte de crecer no de crear.
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #5 en: Septiembre 11, 2014, 05:32:05 pm »
utiliza la sentencia replace

Código: (vb) [Seleccionar]

Dim vString As String

Private Sub Form_Load()

vString = "Hola yo soy de Spais"

vString = Replace(vString, "Spais", "Mexico")

MsgBox (vString)

End Sub


aedEric

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +20/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #6 en: Septiembre 13, 2014, 11:57:47 am »
gracias Luffy
No he fracasado. He encontrado 10000 soluciones que no funcionan.

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #7 en: Septiembre 13, 2014, 02:13:57 pm »
Estimado aedEric
 
He realizado algunos cambios a tú código de ejemplo que has compartido, en el mismo código trato de brindar una breve explicación, del que y porque.
 
Para que el código funcione tienes que realizar una modificación a tú archivo de texto, esta modificación consiste en reemplazar el texto por el siguiente "los papas del niñ; Fuer; Jose y Maria", sin las comillas doble y asegurándote que todo el texto quede en una única línea; todo en una sola línea por el método de lectura que he usado para leer el archivo.
 
Te recomiendo leer está pagina para que te quede más claro todo lo referente a la manipulación de archivos, clic aquí

Bueno vamos al código:

Código: [Seleccionar]
Option Explicit '<-- Sigue las buenas practicas y acostumbrate de declarar las variables, no quietes Option Explicit

'Las variables las declaro aquí como privadas para que puedan ser accedidas desde cualquier parte del formualario
'y para optimizar el código ya que las variables privadas se almacenan en una pila de memoria distinta a la de las
'variables publicas.
Private sNiño As String
Private sPapa As String
Private strVariables() As String




Private Sub Command_Click()
  MsgBox strVariables(0) & sNiño & strVariables(1) & sPapa & strVariables(2)
End Sub

Private Sub Command2_Click()
  MsgBox strVariables(2) & sNiño & strVariables(1) & sPapa & " " & strVariables(0) & sNiño
End Sub

Private Sub Form_Load()
  Dim sVariable As String
 
  sNiño = "o"
  sPapa = "ron"
  sVariable = "Los Sres. Jose y Maria Fueron los papas del niño"
  MsgBox sVariable
 
  CargaDatos
End Sub

Private Sub CargaDatos()
  Dim lngFile As Long
  Dim strTempLine As String
 

  'Obtenemos un número de archivo libre
  lngFile = FreeFile
 
  'Abre, lee y cierra el archivo, para sacar los datos que luego seran nuestras variables.
  'Hay que tener presente que los datos en la linea leida estan separados por punto y coma (;)
  'por lo tanto el valor en la varieble strTempLine despues de leer la line quedaria así:
  'strTempLine = "los papas del niñ; Fuer; Jose y Maria"
  Open App.Path & "\prueba.txt" For Input As lngFile
  Line Input #lngFile, strTempLine
  Close #lngFile
   
 
  'La linea de datos leida la asignamos a un array del tipo string, haciendo uso de la
  'funcion Split, por lo tanto los valores del array strVariable quedaria así:
  'strVariable(0) <-- "los papas del niñ"
  'strVariable(1) <-- " Fuer"
  'strVariable(2) <-- " Jose y Maria"
  strVariables = Split(strTempLine, ";")
End Sub



Como abras podido notarlo al tener los datos en variables (seudo variables, ya que en realidad estas accediendo a posiciones de un array) puedes componer distintos mensajes.
 
Saludos, desde algún lugar en Lima-Perú
Saludos, desde algún lugar de Lima-Perú

aedEric

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +20/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #8 en: Septiembre 14, 2014, 05:17:08 pm »
Hola Albertomi muchas gracias por contestar  ;D gracias por tomarte la molestia de tomarte el tiempo de brindarme una solución  y tus recomendaciones me parece excelente tu idea
te comento algo

Citar
Como abras podido notarlo al tener los datos en variables (seudo variables, ya que en realidad estas accediendo a posiciones de un array) puedes componer distintos mensajes.
 

efectivamente
el detalle es que yo no conozco la posicion de las variables o el texto  :(  pero tu idea me da la pauta para terminar de acompletar otra que al igual que tu me apoyo el amigo YVan de antemano muchisimas grascias
muy agradecido

saludos desde México
No he fracasado. He encontrado 10000 soluciones que no funcionan.

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #9 en: Septiembre 14, 2014, 05:51:39 pm »
Estimado aedEric
 
En realidad si tienes forma de saber cual es la posición de cada una de las palabras (seudo variables), ya que en tú archivo de texto cada palabra esta separada por un punto y como ( ; ), de esta manera la primera palabra ocupa la posición (índice) cero del array y así sucesivamente hasta llegar a la última palabra.
 
Entonces el contenido de tú archivo de texto lo podrías imaginar algo como esto:
  los papas del niñ = (0); Fuer = (1); Jose y Maria = (2);
 
Saludos desde algún lugar de Lima-Perú
Saludos, desde algún lugar de Lima-Perú

aedEric

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +20/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #10 en: Septiembre 15, 2014, 05:38:15 pm »
hola Albertomi muchas gracias de antemano por darle seguimiento a mi tema te comento brevemente

yo no sabria
Código: [Seleccionar]
strVariables(2) & sNiño & strVariables(1) & sPapa & " " & strVariables(0) & sNiñoen que posiciones quedaria cada una de las palabras (seudo variables) por que la idea es que el usuario pueda manejar el texto a sus necesidades por tal motivo no conoceria ni la posición de (seudo variables) ni que variables (disponibles 32 variales que genera el aplicativo) ocuparia ya que en un texto solo puede ocupar desde una hasta las que el necesite

ahi es donde radica el inconveniente
No he fracasado. He encontrado 10000 soluciones que no funcionan.

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #11 en: Septiembre 15, 2014, 09:22:19 pm »

Estimado aedEric


Se me ocurren alguna alternativas, pero para dore aterrizarlas me gustaría me comentes de que manera el usuario realizaría o realiza la composición del texto (que variable va primero, cual va después, cual va al final, etc.)


Saludos desde algún lugar de Lima-Perú
Saludos, desde algún lugar de Lima-Perú

aedEric

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +20/-0
    • Ver Perfil
Re:Apoyo en ideas para modificar Reporte con Callbyname o alguna otra forma
« Respuesta #12 en: Septiembre 17, 2014, 01:39:15 pm »
hola Albertomi agradezco mucho tus opiniones comentario y ayuda te comento he dado solución tomando una parte de de sus comentarios sugerencias Yvan tomando otra parte de tus consejos y sugerencias agradezco infinitamente a ambos saludos a todos desde México en cuanto termine los detalles subire un ejemplo por si alguien en su momento lo llegara ocupar de antemano gracias nuevamente saludos
No he fracasado. He encontrado 10000 soluciones que no funcionan.