alternativa para leer excel implementada en SaldosIniciales

This commit is contained in:
Antonio Gonzalez
2019-08-26 13:24:43 -05:00
parent c3a3c602ef
commit 3eacb20a7e

View File

@@ -5,6 +5,8 @@ Imports System.Data
Imports Extensiones Imports Extensiones
Imports System.Xml Imports System.Xml
Imports Microsoft.Reporting.WebForms Imports Microsoft.Reporting.WebForms
Imports GemBox.Spreadsheet
Partial Class General_SaldosIniciales Partial Class General_SaldosIniciales
Inherits ClsPaginas Inherits ClsPaginas
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
@@ -28,41 +30,44 @@ Partial Class General_SaldosIniciales
Dim Conexion As Odbc.OdbcConnection = Nothing Dim Conexion As Odbc.OdbcConnection = Nothing
Dim ErrorArchivo = False Dim ErrorArchivo = False
Dim ErrorExcel = False Dim ErrorExcel = False
Dim strConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + Ruta + FileName + ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;"""
Dim objDbFactory As Common.DbProviderFactory = Common.DbProviderFactories.GetFactory("System.Data.OleDb") dt = ReadExcelFile(Ruta + FileName, True)
Dim objDbAdapter As Common.DbDataAdapter = objDbFactory.CreateDataAdapter()
Dim objDbConnection As Common.DbConnection = objDbFactory.CreateConnection() 'Dim strConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + Ruta + FileName + ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1;"""
objDbConnection.ConnectionString = strConnString 'Dim objDbFactory As Common.DbProviderFactory = Common.DbProviderFactories.GetFactory("System.Data.OleDb")
objDbConnection.Open() 'Dim objDbAdapter As Common.DbDataAdapter = objDbFactory.CreateDataAdapter()
Dim objSheetNames As DataTable = objDbConnection.GetSchema("Tables") 'Dim objDbConnection As Common.DbConnection = objDbFactory.CreateConnection()
Dim HojaExcel As String = objSheetNames.FiltroPrimeroValor("TABLE_NAME") 'objDbConnection.ConnectionString = strConnString
Try 'objDbConnection.Open()
Select Case Tipo 'Dim objSheetNames As DataTable = objDbConnection.GetSchema("Tables")
Case "CSV" 'Dim HojaExcel As String = objSheetNames.FiltroPrimeroValor("TABLE_NAME")
Conexion = New Odbc.OdbcConnection("Driver={Microsoft Access Text Driver (*.txt, *.csv)};Dbq=" + Ruta + ";Extensions=asc,csv,tab,txt;") 'Try
Conexion.Open() ' Select Case Tipo
Dim cmd = Conexion.CreateCommand() ' Case "CSV"
cmd.CommandType = CommandType.Text ' Conexion = New Odbc.OdbcConnection("Driver={Microsoft Access Text Driver (*.txt, *.csv)};Dbq=" + Ruta + ";Extensions=asc,csv,tab,txt;")
cmd.CommandText = $"SELECT * FROM [{FileName}]" ' Conexion.Open()
Dim DataAdapter = New Odbc.OdbcDataAdapter(cmd) ' Dim cmd = Conexion.CreateCommand()
DataAdapter.Fill(dt) ' cmd.CommandType = CommandType.Text
Case "EXCEL" ' cmd.CommandText = $"SELECT * FROM [{FileName}]"
Conexion = New Odbc.OdbcConnection("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + Ruta + FileName + ";") ' Dim DataAdapter = New Odbc.OdbcDataAdapter(cmd)
Conexion.Open() ' DataAdapter.Fill(dt)
Dim cmd = Conexion.CreateCommand() ' Case "EXCEL"
cmd.CommandType = CommandType.Text ' Conexion = New Odbc.OdbcConnection("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + Ruta + FileName + ";")
cmd.CommandText = $"SELECT * FROM [{HojaExcel}]" ' Conexion.Open()
Dim DataAdapter = New Odbc.OdbcDataAdapter(cmd) ' Dim cmd = Conexion.CreateCommand()
DataAdapter.Fill(dt) ' cmd.CommandType = CommandType.Text
Case Else ' cmd.CommandText = $"SELECT * FROM [{HojaExcel}]"
Alert("El archivo no tiene el formato correcto", TipoMensaje.MsgError) ' Dim DataAdapter = New Odbc.OdbcDataAdapter(cmd)
Exit Sub ' DataAdapter.Fill(dt)
End Select ' Case Else
Catch ex As Exception ' Alert("El archivo no tiene el formato correcto", TipoMensaje.MsgError)
ErrorArchivo = True ' Exit Sub
OnError("Ocurrio un error al leer el archivo <br/>" & ex.Message, ex) ' End Select
End Try 'Catch ex As Exception
Conexion.Close() ' ErrorArchivo = True
' OnError("Ocurrio un error al leer el archivo <br/>" & ex.Message, ex)
'End Try
'Conexion.Close()
If Not ErrorArchivo Then If Not ErrorArchivo Then
If RblFormato.SelectedValue = "1" Or RblFormato.SelectedValue = "2" Then If RblFormato.SelectedValue = "1" Or RblFormato.SelectedValue = "2" Then
If Not dt.Columns(0).ColumnName = "Codigo" Then If Not dt.Columns(0).ColumnName = "Codigo" Then
@@ -1523,57 +1528,69 @@ Partial Class General_SaldosIniciales
ElseIf RblFormato.SelectedValue = "12" Then ElseIf RblFormato.SelectedValue = "12" Then
Dim ObjMovimientos As New ClsInventarios Dim ObjMovimientos As New ClsInventarios
ObjMovimientos.IniciaTransacSQL() ObjMovimientos.IniciaTransacSQL()
Dim OcurrioError As Boolean = False
Dim ProductosServiciosRef As DataTable = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa)
Dim AlmacenRef As DataTable = GlobalDTAlmacen(UsuarioActual.CveEmpresa)
Dim contadorMovimientos As Integer = 0 Dim contadorMovimientos As Integer = 0
Dim listadoMovimientos As String = "" Dim listadoMovimientos As String = ""
Dim mensajeError As String = ""
Try Try
For Each almacenSinRepetir As DataRow In dt.FiltraParametros("", DistinctColumns:={"Almacen"}).Rows For Each almacenSinRepetir As DataRow In dt.FiltraParametros("", DistinctColumns:={"Almacen"}).Rows
Dim almacenActual As String = almacenSinRepetir("Almacen").ToString Dim almacenActual As String = almacenSinRepetir("Almacen").ToString
Dim CveAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"Almacen = '{almacenActual}'").ToEntero 'Dim CveAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"Almacen = '{almacenActual}'").ToEntero
Dim CveAlmacen As Integer = AlmacenRef.FiltroPrimeroValor("CveAlmacen", $"Almacen = '{almacenActual}'").ToEntero
Dim movimientoCabecera As Integer = ObjMovimientos.AddMovimiento(CveAlmacen, 1, 1, Date.Now, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1) Dim movimientoCabecera As Integer = ObjMovimientos.AddMovimiento(CveAlmacen, 1, 1, Date.Now, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1)
listadoMovimientos += $"movimiento con folio <a href='/Inventarios/EntradasSalidas.aspx?CveMovimiento={movimientoCabecera}' target='_blank' style='color:blue'>{ObjMovimientos.Folio}</a><br/>" listadoMovimientos += $"movimiento con folio <a href='/Inventarios/EntradasSalidas.aspx?CveMovimiento={movimientoCabecera}' target='_blank' style='color:blue'>{ObjMovimientos.Folio}</a><br/>"
If CveAlmacen > 0 Then If CveAlmacen > 0 Then
contadorMovimientos += 1 contadorMovimientos += 1
For Each nuevaEntrada As DataRow In dt.FiltraParametros($"Almacen = '{almacenActual}'").Rows For Each nuevaEntrada As DataRow In dt.FiltraParametros($"Almacen = '{almacenActual}'").Rows
Dim CvePS As Integer = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CvePS", $"Codigo = '{nuevaEntrada("CodigoPS")}'").ToEntero Dim RowPS As DataRow = ProductosServiciosRef.FiltroPrimero($"Codigo = '{nuevaEntrada("CodigoPS")}' AND CveEmpresa = {UsuarioActual.CveEmpresa}")
Dim CveUM As Integer = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveUnidadMedida", $"Codigo = '{nuevaEntrada("CodigoPS")}'").ToEntero
Dim CvePS As Integer = RowPS("CvePS").ToString().ToEntero
Dim CveUM As Integer = RowPS("CveUnidadMedida").ToString().ToEntero
If CvePS > 0 Then If CvePS > 0 Then
If CveUM > 0 Then If CveUM > 0 Then
Dim Cantidad As Decimal = nuevaEntrada("Existencia").ToString.ToDecimal Dim Cantidad As Decimal = nuevaEntrada("Existencia").ToString.ToDecimal
Dim Valor As Decimal = nuevaEntrada("Valor").ToString.ToDecimal Dim Valor As Decimal = nuevaEntrada("Valor").ToString.ToDecimal
If Not ObjMovimientos.AddMovimientoDetalle(movimientoCabecera, Cantidad, CveUM, CvePS, (Valor / Cantidad), -1, -1) Then If Not ObjMovimientos.AddMovimientoDetalle(movimientoCabecera, Cantidad, CveUM, CvePS, (Valor / Cantidad), -1, -1) Then
OcurrioError = True mensajeError = "No se logró generar el detalle del movimiento"
Throw New Exception()
End If End If
Else Else
OcurrioError = True mensajeError = $"La unidad de medida no se reconoce para el producto servicio:{nuevaEntrada("CodigoPS")}"
Throw New Exception()
End If End If
Else Else
OcurrioError = True mensajeError = $"No se encontró el producto o servicio con código ""{nuevaEntrada("CodigoPS")}"""
Throw New Exception()
End If End If
Next Next
Else Else
OcurrioError = True mensajeError = $"No se encontró el almacén con nombre ""{almacenActual}"""
'alert amacén no existe Throw New Exception()
Exit For Exit For
End If End If
Next Next
Catch ex As Exception Catch ex As Exception
OcurrioError = True If mensajeError = "" Then
mensajeError = "Error técnico, informar a soporte"
End If
ObjMovimientos.RollBack() ObjMovimientos.RollBack()
End Try End Try
If Not OcurrioError Then If mensajeError = "" Then
ObjMovimientos.Commit() ObjMovimientos.Commit()
Alert($"Se cargaron correctamente {contadorMovimientos} movimientos<br/><br/>{listadoMovimientos}") Alert($"Se cargaron correctamente {contadorMovimientos} movimientos<br/><br/>{listadoMovimientos}")
Else Else
Alert("Ocurrió un error al cargar las existencias", TipoMensaje.MsgError) Alert(mensajeError, TipoMensaje.MsgError)
ObjMovimientos.RollBack() ObjMovimientos.RollBack()
End If End If
ObjMovimientos.Dispose() ObjMovimientos.Dispose()
ProductosServiciosRef.Dispose()
AlmacenRef.Dispose()
End If End If
End If End If
@@ -1618,5 +1635,51 @@ Partial Class General_SaldosIniciales
End If End If
End Sub End Sub
Private Function ReadExcelFile(ByVal flatFilePath As String, ByVal firstRowHasHeaders As Boolean) As DataTable
SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet)
Dim excelFile As ExcelFile = ExcelFile.Load(flatFilePath)
Dim unnamed As Integer = 0
Dim cols As Integer
Dim columns As String()
Dim curRow As Integer = 0
Dim curCol As Integer = 0
Dim dataTable As DataTable = New DataTable()
Dim worksheet As ExcelWorksheet = excelFile.Worksheets(0)
For cols = 0 To worksheet.Rows(0).AllocatedCells.Count - 1
If firstRowHasHeaders Then
If worksheet.Rows(0).Cells(cols).Value IsNot Nothing Then
dataTable.Columns.Add(worksheet.Rows(0).Cells(cols).Value.ToString())
Else
dataTable.Columns.Add("Unnamed Column " & (System.Threading.Interlocked.Increment(unnamed)))
End If
curRow = 1
Else
dataTable.Columns.Add("Column " & (cols + 1))
End If
Next
While curRow < worksheet.Rows.Count
columns = New String(cols - 1) {}
For curCol = 0 To cols - 1
If worksheet.Rows(curRow).Cells(curCol).Value Is Nothing Then
columns(curCol) = ""
Else
columns(curCol) = worksheet.Rows(curRow).Cells(curCol).Value.ToString()
End If
Next
dataTable.Rows.Add(columns)
curRow += 1
End While
Return dataTable
End Function
End Class End Class