Migracion

De GrialWIKI

(Diferencias entre revisiones)
(Página creada con '=Notas para la Conversión de VB6 a VB.NET= ==Gosub/Return== No esta soportado en VB.NET Para convertir un Sub XX que utilice internamente rutinas con "Gosub" hacer lo siguie...')
(Gosub/Return)
Línea 3: Línea 3:
==Gosub/Return==
==Gosub/Return==
-
No esta soportado en VB.NET
+
"Gosub" no esta soportado en VB.NET
-
Para convertir un Sub XX que utilice internamente rutinas con "Gosub" hacer lo siguiente:
+
Para convertir, por ejemplo un "Sub CorteControl" que utilice internamente rutinas con "Gosub" hacer lo siguiente:
-
# Crear una Private Class XX (interna, dentro de la clase actual)
+
# Crear una Private Class CorteControl_Class (interna, dentro de la clase actual)
-
# Colocar las variables generales del Sub XX como variables privadas de la clase XX
+
# Colocar las variables generales del "Sub CorteControl" como variables privadas de la "Private Class CorteControl_Class"
-
# Crear un Sub Main dentro de la clase y colocar el codigo del Sub XX
+
# Agregar una propiedad "Dim Host As MainForm" al principio de la nueva clase
-
# Crear un Sub por cada rutina de gosub que existia en el Sub XX original
+
# Crear un "Sub Proc()" dentro de la clase y colocar el codigo del "Sub CorteControl"
 +
# Crear un Sub por cada rutina de gosub que existia en el "Sub CorteControl" original
## Por Ejemplo si decia "Gosub Rutina1", crear un "Sub Rutina1" dentro de la clase
## Por Ejemplo si decia "Gosub Rutina1", crear un "Sub Rutina1" dentro de la clase
# Reemplazar los Gosub, por llamadas a los sub (eliminar la palabra gosub directamente)
# Reemplazar los Gosub, por llamadas a los sub (eliminar la palabra gosub directamente)
-
# El Sub XX original debe quedar:
+
# El "Sub CorteControl" original que se reemplaza debe quedar:
-
## Sub XX()
+
## Sub CorteControl()
-
## Dim a as New XX()
+
## Dim a as New CorteControl_Class()
-
## a.Main()
+
## a.Host = Me
 +
## a.Proc()
## End Sub
## End Sub
 +
 +
Debido a que "CorteControl_Class" pasará a ser una "clase", no tiene acceso directo
 +
a las variables del formulario principal (MainForm). Es por eso que se crea la variable
 +
"Host as MainForm" y se asigna (a.Host = Me) antes de llamar al método "Proc"
 +
 +
Dentro de los subs de la clase, se debe colocar "Host." para acceder
 +
a las variables generales del Form.
 +
Para identificar dónde agrear "Host." revisar el codigo de los subs dentro de la clase buscando
 +
el siguiente error informado por el IDE de .NET:
 +
"Error 10: La referencia a un miembro no compartido requiere una referencia de objeto."
 +
Este error se soluciona agregando "Host." delante de la variable.
 +
 +
Por ejemplo, el siguiente codigo en VB6:
 +
<code>
 +
 +
    Private Sub GrialPrintOREC_gpr_PrintDocument()
 +
 +
        On Error GoTo ErrH
 +
 +
        Dim text_Renamed As String
 +
        Dim CantidadEntregas As Short
 +
        Dim CantidadDestinos As Short
 +
        Dim ArticuloCorte As String
 +
        Dim DetalleArticulo As String
 +
 +
        With GrialPrintOREC_gpr
 +
 +
            Preejec18Grq.Rst.Sort = "NumRenglon"
 +
            Preejec18Grq.MovePreStart()
 +
            While Preejec18Grq.NextRecord
 +
 +
                    'ubico a ver si ese renglon de la gestion esta en este compromiso
 +
                    If GrialPrintOREC_gpr.UserCancel Then Exit Sub
 +
                    If GrillaPe21Grq.Find("RELA_PREEJEC18=" & Preejec18Grq.Rst!ID_PREEJEC18) Then
 +
 +
                        If ProveedorCorte <> GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD Then
 +
                            Gosub CierraProveedor()
 +
                            Gosub AbreProveedor()
 +
                        End If
 +
                        ArticuloCorte = GrillaPe21Grq.Rst!PREFORM15_CODIGO & " - " & GrillaPe21Grq.Rst.Fields("PREEJEC21_DESCRI").Value
 +
            End While
 +
 +
            Gosub CierraProveedor()
 +
 +
            .Printer_Advance(2)
 +
            .Wt(.PrintPos_LeftMargin, encabe, 10000, Print.Align.Left_WordWrap)
 +
            .Printer_Advance()
 +
 +
        End With
 +
 +
        Exit Sub
 +
 +
AbreProveedor:
 +
        ProveedorCorte = GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD
 +
        Return
 +
 +
CierraProveedor:
 +
 +
        If ProveedorCorte <> "" Then
 +
            'Imprimo footer del Proveedor
 +
            With GrialPrintOREC_gpr
 +
                .WtCol("Cantidad", "Total: ")
 +
                .WtCol("Total", VB6.Format(TotalAdjudicado, "Currency"))
 +
            End With
 +
 +
        End If
 +
 +
        TotalAdjudicado = 0
 +
 +
        Return
 +
 +
 +
ErrH:
 +
        MsgError(GrialCont)
 +
        eventArgs.Cancel = True
 +
 +
    End Sub
 +
</code>
 +
 +
Debe quedar convertido para VB.NET en:
 +
 +
<code>
 +
 +
    Private Sub GrialPrintOREC_gpr_PrintDocument()
 +
      On Error GoTo ErrH
 +
      Dim a as New GrialPrintOREC_gpr_PrintDocument_Class
 +
      a.Host = Me
 +
      a.Proc()
 +
      Exit Sub
 +
    ErrH:
 +
      MsgError(GrialCont)
 +
    End Sub
 +
 +
    Private Class GrialPrintOREC_gpr_PrintDocument_Class
 +
 +
        Dim Host as MainForm
 +
 +
        Dim text_Renamed As String
 +
        Dim CantidadEntregas As Short
 +
        Dim CantidadDestinos As Short
 +
        Dim ArticuloCorte As String
 +
        Dim DetalleArticulo As String
 +
 +
    Sub Proc()
 +
 +
        With Host.GrialPrintOREC_gpr
 +
 +
            Host.Preejec18Grq.Rst.Sort = "NumRenglon"
 +
            Host.Preejec18Grq.MovePreStart()
 +
            While Host.Preejec18Grq.NextRecord
 +
 +
                    'ubico a ver si ese renglon de la gestion esta en este compromiso
 +
                    If Host.GrialPrintOREC_gpr.UserCancel Then Exit Sub
 +
                    If Host.GrillaPe21Grq.Find("RELA_PREEJEC18=" & Preejec18Grq.Rst!ID_PREEJEC18) Then
 +
 +
                        If ProveedorCorte <> GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD Then
 +
                            CierraProveedor()
 +
                            AbreProveedor()
 +
                        End If
 +
                        ArticuloCorte = GrillaPe21Grq.Rst!PREFORM15_CODIGO & " - " & GrillaPe21Grq.Rst.Fields("PREEJEC21_DESCRI").Value
 +
            End While
 +
 +
            CierraProveedor()
 +
 +
            .Printer_Advance(2)
 +
            .Wt(.PrintPos_LeftMargin, encabe, 10000, Print.Align.Left_WordWrap)
 +
            .Printer_Advance()
 +
 +
        End With
 +
 +
    End Sub
 +
 +
    Sub AbreProveedor()
 +
        ProveedorCorte = GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD
 +
    End Sub 'Return
 +
 +
    Sub CierraProveedor()
 +
 +
        If ProveedorCorte <> "" Then
 +
            'Imprimo footer del Proveedor
 +
            With Host.GrialPrintOREC_gpr
 +
                .WtCol("Cantidad", "Total: ")
 +
                .WtCol("Total", VB6.Format(TotalAdjudicado, "Currency"))
 +
                .Printer_Advance()
 +
            End With
 +
 +
        End If
 +
 +
        Host.TotalAdjudicado = 0
 +
 +
        End Sub 'Return
 +
 +
    End Class
 +
<code>

Revisión de 03:52 7 sep 2010

Notas para la Conversión de VB6 a VB.NET

Gosub/Return

"Gosub" no esta soportado en VB.NET

Para convertir, por ejemplo un "Sub CorteControl" que utilice internamente rutinas con "Gosub" hacer lo siguiente:

  1. Crear una Private Class CorteControl_Class (interna, dentro de la clase actual)
  2. Colocar las variables generales del "Sub CorteControl" como variables privadas de la "Private Class CorteControl_Class"
  3. Agregar una propiedad "Dim Host As MainForm" al principio de la nueva clase
  4. Crear un "Sub Proc()" dentro de la clase y colocar el codigo del "Sub CorteControl"
  5. Crear un Sub por cada rutina de gosub que existia en el "Sub CorteControl" original
    1. Por Ejemplo si decia "Gosub Rutina1", crear un "Sub Rutina1" dentro de la clase
  6. Reemplazar los Gosub, por llamadas a los sub (eliminar la palabra gosub directamente)
  7. El "Sub CorteControl" original que se reemplaza debe quedar:
    1. Sub CorteControl()
    2. Dim a as New CorteControl_Class()
    3. a.Host = Me
    4. a.Proc()
    5. End Sub

Debido a que "CorteControl_Class" pasará a ser una "clase", no tiene acceso directo a las variables del formulario principal (MainForm). Es por eso que se crea la variable "Host as MainForm" y se asigna (a.Host = Me) antes de llamar al método "Proc"

Dentro de los subs de la clase, se debe colocar "Host." para acceder a las variables generales del Form. Para identificar dónde agrear "Host." revisar el codigo de los subs dentro de la clase buscando el siguiente error informado por el IDE de .NET: "Error 10: La referencia a un miembro no compartido requiere una referencia de objeto." Este error se soluciona agregando "Host." delante de la variable.

Por ejemplo, el siguiente codigo en VB6:

    Private Sub GrialPrintOREC_gpr_PrintDocument()
 
        On Error GoTo ErrH
 
        Dim text_Renamed As String
        Dim CantidadEntregas As Short
        Dim CantidadDestinos As Short
        Dim ArticuloCorte As String
        Dim DetalleArticulo As String
 
        With GrialPrintOREC_gpr
 
            Preejec18Grq.Rst.Sort = "NumRenglon"
            Preejec18Grq.MovePreStart()
            While Preejec18Grq.NextRecord
 
                    'ubico a ver si ese renglon de la gestion esta en este compromiso
                    If GrialPrintOREC_gpr.UserCancel Then Exit Sub
                    If GrillaPe21Grq.Find("RELA_PREEJEC18=" & Preejec18Grq.Rst!ID_PREEJEC18) Then
 
                        If ProveedorCorte <> GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD Then
                            Gosub CierraProveedor()
                            Gosub AbreProveedor()
                        End If
                        ArticuloCorte = GrillaPe21Grq.Rst!PREFORM15_CODIGO & " - " & GrillaPe21Grq.Rst.Fields("PREEJEC21_DESCRI").Value
             End While
 
            Gosub CierraProveedor()
 
            .Printer_Advance(2)
            .Wt(.PrintPos_LeftMargin, encabe, 10000, Print.Align.Left_WordWrap)
            .Printer_Advance()
 
        End With
 
        Exit Sub
 
AbreProveedor:
        ProveedorCorte = GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD
        Return
 
CierraProveedor:
 
        If ProveedorCorte <> "" Then
            'Imprimo footer del Proveedor
            With GrialPrintOREC_gpr
                .WtCol("Cantidad", "Total: ")
                .WtCol("Total", VB6.Format(TotalAdjudicado, "Currency"))
            End With
 
        End If
 
        TotalAdjudicado = 0
 
        Return
 
 
ErrH:
        MsgError(GrialCont)
        eventArgs.Cancel = True
 
    End Sub

Debe quedar convertido para VB.NET en:

    Private Sub GrialPrintOREC_gpr_PrintDocument()
      On Error GoTo ErrH
      Dim a as New GrialPrintOREC_gpr_PrintDocument_Class
      a.Host = Me
      a.Proc()
      Exit Sub
    ErrH:
      MsgError(GrialCont)
    End Sub
 
    Private Class GrialPrintOREC_gpr_PrintDocument_Class
 
        Dim Host as MainForm
 
        Dim text_Renamed As String
        Dim CantidadEntregas As Short
        Dim CantidadDestinos As Short
        Dim ArticuloCorte As String
        Dim DetalleArticulo As String
 
     Sub Proc()
 
        With Host.GrialPrintOREC_gpr
 
            Host.Preejec18Grq.Rst.Sort = "NumRenglon"
            Host.Preejec18Grq.MovePreStart()
            While Host.Preejec18Grq.NextRecord
 
                    'ubico a ver si ese renglon de la gestion esta en este compromiso
                    If Host.GrialPrintOREC_gpr.UserCancel Then Exit Sub
                    If Host.GrillaPe21Grq.Find("RELA_PREEJEC18=" & Preejec18Grq.Rst!ID_PREEJEC18) Then
 
                        If ProveedorCorte <> GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD Then
                            CierraProveedor()
                            AbreProveedor()
                        End If
                        ArticuloCorte = GrillaPe21Grq.Rst!PREFORM15_CODIGO & " - " & GrillaPe21Grq.Rst.Fields("PREEJEC21_DESCRI").Value
             End While
 
             CierraProveedor()
 
            .Printer_Advance(2)
            .Wt(.PrintPos_LeftMargin, encabe, 10000, Print.Align.Left_WordWrap)
            .Printer_Advance()
 
        End With
 
     End Sub
 
     Sub AbreProveedor()
        ProveedorCorte = GrillaPe21Grq.Rst!SOCUSUA15_ENTIDAD
     End Sub 'Return
 
     Sub CierraProveedor()
 
        If ProveedorCorte <> "" Then
            'Imprimo footer del Proveedor
            With Host.GrialPrintOREC_gpr
                .WtCol("Cantidad", "Total: ")
                .WtCol("Total", VB6.Format(TotalAdjudicado, "Currency"))
                .Printer_Advance()
            End With
 
        End If
 
        Host.TotalAdjudicado = 0
 
        End Sub 'Return
 
    End Class
<code>
Herramientas personales