diff --git a/General/SaldosIniciales.aspx.vb b/General/SaldosIniciales.aspx.vb
index 8997c6309..791688bc0 100644
--- a/General/SaldosIniciales.aspx.vb
+++ b/General/SaldosIniciales.aspx.vb
@@ -5,6 +5,8 @@ Imports System.Data
Imports Extensiones
Imports System.Xml
Imports Microsoft.Reporting.WebForms
+Imports GemBox.Spreadsheet
+
Partial Class General_SaldosIniciales
Inherits ClsPaginas
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 ErrorArchivo = 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")
- Dim objDbAdapter As Common.DbDataAdapter = objDbFactory.CreateDataAdapter()
- Dim objDbConnection As Common.DbConnection = objDbFactory.CreateConnection()
- objDbConnection.ConnectionString = strConnString
- objDbConnection.Open()
- Dim objSheetNames As DataTable = objDbConnection.GetSchema("Tables")
- Dim HojaExcel As String = objSheetNames.FiltroPrimeroValor("TABLE_NAME")
- Try
- Select Case Tipo
- Case "CSV"
- Conexion = New Odbc.OdbcConnection("Driver={Microsoft Access Text Driver (*.txt, *.csv)};Dbq=" + Ruta + ";Extensions=asc,csv,tab,txt;")
- Conexion.Open()
- Dim cmd = Conexion.CreateCommand()
- cmd.CommandType = CommandType.Text
- cmd.CommandText = $"SELECT * FROM [{FileName}]"
- Dim DataAdapter = New Odbc.OdbcDataAdapter(cmd)
- DataAdapter.Fill(dt)
- Case "EXCEL"
- Conexion = New Odbc.OdbcConnection("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + Ruta + FileName + ";")
- Conexion.Open()
- Dim cmd = Conexion.CreateCommand()
- cmd.CommandType = CommandType.Text
- cmd.CommandText = $"SELECT * FROM [{HojaExcel}]"
- Dim DataAdapter = New Odbc.OdbcDataAdapter(cmd)
- DataAdapter.Fill(dt)
- Case Else
- Alert("El archivo no tiene el formato correcto", TipoMensaje.MsgError)
- Exit Sub
- End Select
- Catch ex As Exception
- ErrorArchivo = True
- OnError("Ocurrio un error al leer el archivo
" & ex.Message, ex)
- End Try
- Conexion.Close()
+
+ dt = ReadExcelFile(Ruta + FileName, True)
+
+ '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")
+ 'Dim objDbAdapter As Common.DbDataAdapter = objDbFactory.CreateDataAdapter()
+ 'Dim objDbConnection As Common.DbConnection = objDbFactory.CreateConnection()
+ 'objDbConnection.ConnectionString = strConnString
+ 'objDbConnection.Open()
+ 'Dim objSheetNames As DataTable = objDbConnection.GetSchema("Tables")
+ 'Dim HojaExcel As String = objSheetNames.FiltroPrimeroValor("TABLE_NAME")
+ 'Try
+ ' Select Case Tipo
+ ' Case "CSV"
+ ' Conexion = New Odbc.OdbcConnection("Driver={Microsoft Access Text Driver (*.txt, *.csv)};Dbq=" + Ruta + ";Extensions=asc,csv,tab,txt;")
+ ' Conexion.Open()
+ ' Dim cmd = Conexion.CreateCommand()
+ ' cmd.CommandType = CommandType.Text
+ ' cmd.CommandText = $"SELECT * FROM [{FileName}]"
+ ' Dim DataAdapter = New Odbc.OdbcDataAdapter(cmd)
+ ' DataAdapter.Fill(dt)
+ ' Case "EXCEL"
+ ' Conexion = New Odbc.OdbcConnection("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + Ruta + FileName + ";")
+ ' Conexion.Open()
+ ' Dim cmd = Conexion.CreateCommand()
+ ' cmd.CommandType = CommandType.Text
+ ' cmd.CommandText = $"SELECT * FROM [{HojaExcel}]"
+ ' Dim DataAdapter = New Odbc.OdbcDataAdapter(cmd)
+ ' DataAdapter.Fill(dt)
+ ' Case Else
+ ' Alert("El archivo no tiene el formato correcto", TipoMensaje.MsgError)
+ ' Exit Sub
+ ' End Select
+ 'Catch ex As Exception
+ ' ErrorArchivo = True
+ ' OnError("Ocurrio un error al leer el archivo
" & ex.Message, ex)
+ 'End Try
+ 'Conexion.Close()
If Not ErrorArchivo Then
If RblFormato.SelectedValue = "1" Or RblFormato.SelectedValue = "2" Then
If Not dt.Columns(0).ColumnName = "Codigo" Then
@@ -1523,57 +1528,69 @@ Partial Class General_SaldosIniciales
ElseIf RblFormato.SelectedValue = "12" Then
Dim ObjMovimientos As New ClsInventarios
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 listadoMovimientos As String = ""
+ Dim mensajeError As String = ""
Try
For Each almacenSinRepetir As DataRow In dt.FiltraParametros("", DistinctColumns:={"Almacen"}).Rows
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)
listadoMovimientos += $"movimiento con folio {ObjMovimientos.Folio}
"
If CveAlmacen > 0 Then
contadorMovimientos += 1
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 CveUM As Integer = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveUnidadMedida", $"Codigo = '{nuevaEntrada("CodigoPS")}'").ToEntero
+ Dim RowPS As DataRow = ProductosServiciosRef.FiltroPrimero($"Codigo = '{nuevaEntrada("CodigoPS")}' AND CveEmpresa = {UsuarioActual.CveEmpresa}")
+
+ Dim CvePS As Integer = RowPS("CvePS").ToString().ToEntero
+ Dim CveUM As Integer = RowPS("CveUnidadMedida").ToString().ToEntero
If CvePS > 0 Then
If CveUM > 0 Then
Dim Cantidad As Decimal = nuevaEntrada("Existencia").ToString.ToDecimal
Dim Valor As Decimal = nuevaEntrada("Valor").ToString.ToDecimal
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
Else
- OcurrioError = True
+ mensajeError = $"La unidad de medida no se reconoce para el producto servicio:{nuevaEntrada("CodigoPS")}"
+ Throw New Exception()
End If
Else
- OcurrioError = True
-
+ mensajeError = $"No se encontró el producto o servicio con código ""{nuevaEntrada("CodigoPS")}"""
+ Throw New Exception()
End If
Next
Else
- OcurrioError = True
- 'alert amacén no existe
+ mensajeError = $"No se encontró el almacén con nombre ""{almacenActual}"""
+ Throw New Exception()
Exit For
End If
Next
Catch ex As Exception
- OcurrioError = True
+ If mensajeError = "" Then
+ mensajeError = "Error técnico, informar a soporte"
+ End If
ObjMovimientos.RollBack()
End Try
- If Not OcurrioError Then
+ If mensajeError = "" Then
ObjMovimientos.Commit()
Alert($"Se cargaron correctamente {contadorMovimientos} movimientos
{listadoMovimientos}")
Else
- Alert("Ocurrió un error al cargar las existencias", TipoMensaje.MsgError)
+ Alert(mensajeError, TipoMensaje.MsgError)
ObjMovimientos.RollBack()
End If
ObjMovimientos.Dispose()
+ ProductosServiciosRef.Dispose()
+ AlmacenRef.Dispose()
End If
End If
@@ -1618,5 +1635,51 @@ Partial Class General_SaldosIniciales
End If
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