Migracion

De GrialWIKI

(Diferencias entre revisiones)
(Gosub/Return)
Línea 173: Línea 173:
     End Class
     End Class
-
<code>
+
</code>

Revisión de 03:53 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
Herramientas personales