none
Duda con IIS RRS feed

  • Pregunta

  • Buenos días.

    Necesito un poco de ayuda con un tema el cual no sé por donde meterle mano. Explico un poco.

    En la empresa donde trabajo, usamos como software de gestión Facturaplus. Hay ocasiones que necesitamos guardar ciertos datos que si se hiciera por medio del programa se tardaría bastante tiempo. Así que me decidí a hacer una aplicación con ASP NET MVC y alojarla en nuestro servidor local Windows Server 2008 R2.

    Pues bien, el tema está que cuando estamos registrando ciertos datos sobre las líneas de los pedidos de venta por alguna razón el server me da un error de "Error al procesar la solicitud" y no muestra el error, sin embargo cuando reinicio IIS todo funciona correctamente.

    He probado con los mismos datos en el equipo de desarrollo y todo funciona correctamente, por lo que no creo que sea problema de la aplicación en si...

    Espero que me deis un poco de luz al respecto que no se por donde van los tiros si por la aplicación o por el server. Tengo que decir que tengo otra app alojada en el IIS para otras funcionalidades internas...

    Gracias de antemano.
    Saludos.


    miércoles, 31 de julio de 2019 5:27

Todas las respuestas

  • Hola, lo primero de todo es revisar los logs que genera tu IIS para ver dónde puede estar el problema. Luego también te sugiero que en tu aplicación también generes logs y una buena gestión de errores. Así de primeras es difícil saber qué está ocurriendo. Si pudieras compartir algo de código en el que crees que puede estar el problema estaría bien

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    miércoles, 31 de julio de 2019 6:12
    Moderador
  • Gracias Sergio por la respuesta.

    Estoy leyendo el log que me generó ayer iis y la verdad no se como descifrarlo.... No le veo nada raro (es el log que hay en la carpeta por defecto inetpub/logs)

    El código es el siguiente, un controlador que maneja los datos a Facturaplus (este programa trabaja con ficheros DBF...) y en la parte de la vista con jQuery y AJAX.

    Voy a intentar poner el código, aunque será algo extenso....

    Controlador:

        Public Class PedidosPruebasController
            Inherits Controller
    
            ' GET: PedidosPruebas
            Function Index() As ActionResult
                Return View()
            End Function
    
            Function CambiarPackingPruebas(ByVal nnumped As Integer) As ActionResult
    
    
                ViewBag.searchString = nnumped
    
                Dim datos = New clsDatosFacturaplus("37")
    
                If Not String.IsNullOrEmpty(nnumped) Then
    
                    Dim Lineas = datos.GetLineasPedidoCliente(nnumped).ToList
    
                    If Lineas.Count > 0 Then
    
                        ViewBag.FechaPedido = IIf(Lineas.FirstOrDefault.DFECPED.ToShortDateString() Is Nothing, "", Lineas.FirstOrDefault.DFECPED)
                        ViewBag.NombreCliente = Lineas.FirstOrDefault.CCODCLI
    
                        'datos.EMPRESA = "37"
                        Return View("CambiarPacking_", Lineas)
                    Else
                        Return View("CambiarPacking_")
                    End If
    
                Else
                    Return View("CambiarPacking_")
                End If
    
    
            End Function
    
            Function CambiarPacking_() As ActionResult
    
                Return View()
            End Function
    
            Function AñadirContenedorLote(ByVal nnumped As String,
                                  ByVal nlinea As Integer,
                                  ByVal cref As String,
                                  ByVal clote As String,
                                  ByVal contenedor As String,
                                  ByVal parte As Integer) As Integer
    
                Dim nuevoLote As String = ""
    
                If parte = 1 Then
                    'añadimos el contenedor al principio del lote
                    If Left(clote, 1) = "A" Or Left(clote, 1) = "B" Then
                        Dim subcadena = clote.Substring(2)
    
                        nuevoLote = String.Concat(contenedor, ":", subcadena)
    
                    Else
                        nuevoLote = String.Concat(contenedor, ":", clote)
                    End If
    
    
                    'nuevoLote = partes(0) + "/" + String.Concat(contenedor, ":", partes(0).Substring(2))
    
                Else
    
                    'Buscamos el separador '/' y añadimos el contenedor
                    Dim partes = clote.Split("/")
    
                    If partes.Length > 1 Then
                        If Left(partes(1), 1) = "A" Or Left(partes(1), 1) = "B" Then
                            Dim subcadena = partes(1).Substring(2)
    
                            nuevoLote = String.Concat(contenedor, ":", subcadena)
    
                        Else
                            nuevoLote = String.Concat(contenedor, ":", partes(1))
                        End If
    
                    End If
                    'If partes.Length > 1 Then
    
                    '    If
    
    
                    'End If
                    If Left(partes(1), 1) = "A" Or Left(partes(1), 1) = "B" Then
                        nuevoLote = partes(0) + "/" + String.Concat(contenedor, ":", partes(1).Substring(2))
                    Else
                        nuevoLote = partes(0) + "/" + String.Concat(contenedor, ":", partes(1))
                    End If
    
    
                End If
    
                If String.IsNullOrEmpty(nuevoLote) Then
                    nuevoLote = clote
                End If
    
                Return ActualizarCLote(nnumped, nlinea, cref, nuevoLote)
    
            End Function
    
            Function ActualizarCLote(ByVal nnumped As String, ByVal nlinea As Integer, ByVal cref As String, ByVal clote As String) As Integer
    
                Dim reg As Integer
    
                Dim facturaplus = New clsDatosFacturaplus("37")
    
                reg = facturaplus.UpdateClotePedidos(nnumped, nlinea, cref, clote)
    
                Return reg
    
            End Function
    
            Function ObtenerDatosLinea(ByVal nnumped As String, ByVal nlinea As Integer) As JsonResult
    
    
                Dim facturaplus = New clsDatosFacturaplus("37")
    
                Dim registro = facturaplus.GetLineaaPedidoCliente(nnumped, nlinea)
    
                'Realizamos las comprobaciones de formato
    
                Dim partes = registro.CLOTE.Split("/")
    
                For i As Integer = 1 To partes.Length Step 1
    
                    Dim subpartes = partes(i - 1).Split("-")
    
                    For j As Integer = 1 To subpartes.Length Step 1
    
                        Dim lote = subpartes(j - 1)
    
                        If i = 1 Then
    
                            If j = 1 Then
    
                                If subpartes(j - 1).StartsWith("A") Or subpartes(j - 1).StartsWith("B") Then
    
                                    registro.Packing1Desde = subpartes(j - 1).Substring(2)
                                Else
                                    registro.Packing1Desde = subpartes(j - 1)
                                End If
    
    
    
                            Else
    
                                registro.Packing1Hasta = subpartes(j - 1)
    
                            End If
    
                        Else
    
                            If j = 1 Then
                                If subpartes(j - 1).StartsWith("A") Or subpartes(j - 1).StartsWith("B") Then
                                    registro.Packing2Desde = subpartes(j - 1).Substring(2)
                                Else
                                    registro.Packing2Desde = subpartes(j - 1)
                                End If
    
                            Else
                                registro.Packing2Hasta = subpartes(j - 1)
    
                            End If
    
                        End If
    
                    Next
    
    
                    If registro.Packing1Hasta = 0 Then
    
                        registro.Packing1Hasta = registro.Packing1Desde
    
                    End If
    
                    If registro.Packing2Hasta = 0 Or registro.Packing2Hasta = "" Then
    
                        registro.Packing2Hasta = IIf(registro.Packing2Desde = "", "0", registro.Packing2Desde)
    
                    End If
    
                    registro.CajasPacking = 0
                    registro.CajasPacking2 = 0
    
                    If String.IsNullOrEmpty(registro.Packing1Desde) Or String.IsNullOrEmpty(registro.Packing1Hasta) Then
    
                        registro.CajasPacking = 0
    
                    Else
    
                        If registro.Packing1Desde <> registro.Packing1Hasta Then
    
                            registro.CajasPacking = Math.Abs(registro.Packing1Desde - registro.Packing1Hasta - 1)
    
                        ElseIf registro.Packing1Desde = registro.Packing1Hasta Then
    
                            registro.CajasPacking = 1
    
                        End If
    
                    End If
    
                    If String.IsNullOrEmpty(registro.Packing2Desde) Or String.IsNullOrEmpty(registro.Packing2Hasta) Then
    
    
                    Else
                        If registro.Packing2Desde <> registro.Packing2Hasta Then
    
                            registro.CajasPacking2 = Math.Abs(registro.Packing2Desde - registro.Packing2Hasta - 1)
    
                        ElseIf registro.Packing2Desde <> 0 And registro.Packing2Hasta <> 0 Then
    
                            registro.CajasPacking2 = 1
    
                        End If
    
                    End If
    
    
                    registro.Cajas_Pedido = registro.NCANPED / IIf(registro.Unidades = 0, 1, registro.Unidades)
                Next
    
    
                If registro.Packing1Desde = "" Or registro.Packing1Desde Is Nothing Then
    
                    registro.Packing1Desde = "0"
    
                End If
    
                If registro.Packing1Hasta = "" Or registro.Packing1Hasta Is Nothing Then
    
                    registro.Packing1Hasta = "0"
    
                End If
    
                If registro.Packing2Desde = "" Or registro.Packing2Desde Is Nothing Then
    
                    registro.Packing2Desde = "0"
    
                End If
    
    
                If registro.Packing2Hasta = "" Or registro.Packing2Hasta Is Nothing Then
    
                    registro.Packing2Hasta = "0"
    
                End If
    
    
                Return Json(registro, JsonRequestBehavior.AllowGet)
    
    
            End Function
    
    
        End Class

    Vista

    @ModelType List(Of LineasPedidoFPModel)
    
    <div class="row">
        <div>
            Nº de Pedido <input name="nnumped" type="text" value="@ViewBag.searchString" tabindex="0" />
        </div>
    </div>
    <div class="d-flex flex-column">
        <div id="NombreCliente" class="p-2">Cliente: </div>
        <div id="FechaPedido" class="p-2">Fecha: </div>
    </div>
    
    <div class="row mt-2">
    
        <table id="lineas" class="table table-sm table-responsive table-bordered">
            <thead>
                <tr>
                    <th scope="col">Linea</th>
                    <th scope="col">Ref.</th>
                    <th scope="col">Descripción</th>
                    <th scope="col">Cantidad</th>
                    <th scope="col">Unidades Caja</th>
                    <th scope="col">Cajas Pedido</th>
                    <th scope="col">Packing</th>
                    <th scope="col">Packing1</th>
                    <th scope="col"></th>
                    <th scope="col">Contenedor</th>
                    <th scope="col">Cajas packing1</th>
                    <th scope="col">Packing2</th>
                    <th></th>
                    <th scope="col">Contenedor</th>
                    <th scope="col">Cajas Packing 2</th>
                    <th>Total Cajas Packing</th>
                </tr>
            </thead>
            <tbody></tbody>
        </table>
    </div>
    
    @section Scripts
    
        <script type="text/javascript">
         var pos = 0;    
    
    
         function enter2tab(e) {
             if (e.keyCode == 13) {
                 cb = parseInt($(this).attr('tabindex'));
    
                 alert(cb)
    
    
                 $(':input[tabindex=\'' + (cb + 1) + '\']').focus();
                 $(':input[tabindex=\'' + (cb + 1) + '\']').select();
    
                 e.preventDefault();
    
                 return false;
             }
        }
    
    
    
         $(document).ready(function () {
    
             var numeroPedido;
    
             tb = $(':input[id^='+numeroPedido+']');
    
             $(tb).keypress(enter2tab);
    
             $("input[name=nnumped]").on('keypress', function (e) {
    
                if (e.keyCode == 13) {
    
                    numeroPedido = $(this).val()
    
                    $.ajax({
                        url: "@Url.Action("BuscarLineasPedido", "Pedidos")",
                        data: { nnumped: numeroPedido },
                        success: function (result)
                        {
                            $("#lineas tbody").html('')
                            for (var i = 0; i < result.length; i++) {
                                CargarLineasPedido(numeroPedido, result[i], i + 1)
                            }
                        }
                    })
                }
            })
    
    
            })
    
            function AñadirContenedor(pedido,linea,referencia,lote,contenedor,packing) {
    
                //alert(pedido)
    
                $.ajax({
                    url: "@Url.Action("AñadirContenedorLote", "PedidosPruebas")",
                    data: { "nnumped": pedido, "nlinea": linea, "cref": referencia, "clote": lote, "contenedor": contenedor, "parte": packing },
                    success: function (e) {
    
                        ObtenerLineaPedido(pedido, linea)
                        console.log(e)
    
                    }
    
    
                })
    
    
    
            }
    
            function QuitarContendor(Pedido , linea , referencia , lote ,packing) {
    
    
    
            }
    
            function ActualizarLote(pedido, linea, referncia, lote)
            {
    
                //var e = KeyboardEvent.
                $.ajax(
                {
                    url: "@Url.Action("ActualizarCLote", "Pedidos")",
                    data: { "nnumped": pedido, "nlinea": linea, "cref": referncia, "clote":lote  },
                    success: function (e) {
                        if (e > 0) {
                            ObtenerLineaPedido(pedido, linea)
                            //Pasamos al siguiente campo
                            var lineaSiguiente = parseInt(linea) + 1
    
                            var id = pedido + lineaSiguiente                   
    
                            //$().keypress()
    
                            //$("input[id^='" + id + "']").focus()
                            //$("input[id^='" + id + "']").select()
                        }
                    }
    
                })
    
            }
    
             function ObtenerLineasPedido(numeroPedido)
             {
                    $.ajax({
                        url: "@Url.Action("BuscarLineasPedido", "Pedidos")",
                        data: { nnumped: numeroPedido },
                            success: function (result) {
    
                                $("#lineas tbody").html('')
                                
                                for (var i = 0; i < result.length; i++) {
                                    CargarLineasPedido(numeroPedido, result[i], i+1)
                                }
                            }
                    })
    
    
             }
    
         function CargarLineasPedido(numeroPedido,result,cont) {
    
             var lote;
    
             var NoCincide = result.NoCoincide;
    
             var fila;
    
             fila = "<tr id='" + numeroPedido + result.NLINEA + "' class=" + (NoCincide == 1 ? 'bg-success' : 'bg-danger') + ">";
    
             fila = fila + "<td>" + result.NLINEA + "</td>"
             fila = fila + "<td>" + result.CREF + "</td>"
             fila = fila + "<td>" + result.CDETALLE + "</td>"
             fila = fila + "<td>" + result.NCANPED + "</td>"
             fila = fila + "<td>" + result.Unidades + "</td>"
             fila = fila + "<td>" + result.Cajas_Pedido + "</td>"
             fila = fila + "<td><input id='" + numeroPedido + result.NLINEA + result.CREF + "' type='text' value='" + result.CLOTE + "' size='10' tabindex='" + cont + "' /></td>"
    
             var id = "#" + numeroPedido + result.NLINEA + result.CREF
    
             fila = fila + "<td id='rangoPacking1" + result.NLINEA + "' colspan=2>" + result.Packing1Desde + "/" + result.Packing1Hasta + "</td>"
             fila = fila + "<td><div class='d-flex'>"
    
             var AñadirContenedorA1 = "AñadirContenedor('" + numeroPedido + "','" + result.NLINEA + "','" + result.CREF + "','" + result.CLOTE + "','A','1')"
             var AñadirContenedorB1 = "AñadirContenedor('" + numeroPedido + "','" + result.NLINEA + "','" + result.CREF + "','" + result.CLOTE + "','B','1')"
             var QuitarContendor1 = "QuitarContenedor('" + numeroPedido + "','" + result.NLINEA + "','" + result.CREF + "','" + result.CLOTE + "','1')"
    
             fila = fila + '<div class="p-1"><button class="btn btn-info" tabindex="-1" onclick=' + AñadirContenedorA1 + '>A</button></div>'
             fila = fila + '<div class="p-1"><button class="btn btn-info" tabindex="-1" onclick=' + AñadirContenedorB1 + '>B</button></div>'
             //fila = fila + "<div class='p-1'><button class='btn btn-info' tabindex='-1' onclick='QuitarContenedor('" + numeroPedido + "','" + result.NLINEA + "','" + result.CREF + "','" + lote + "',1);'>A</button></div>"
             fila = fila + "<div class='p-1><i class='material-icons' tabindex='-1' onclick=" + QuitarContendor1 +">X</i></div>"
             fila = fila + "</div></td>"
             fila = fila + "<td id='CajasPacking" + result.NLINEA +"'>" + result.CajasPacking + "</td>"
             fila = fila + "<td id='rangoPacking2" + result.NLINEA + "' colspan=2>" + result.Packing2Desde + "/" + result.Packing2Hasta + "</td>"
             fila = fila + "<td><div class='d-flex'>"
    
             var AñadirContenedorA2 = "AñadirContenedor('" + numeroPedido + "','" + result.NLINEA + "','" + result.CREF + "','" + result.CLOTE + "','A','2')"
             var AñadirContenedorB2 = "AñadirContenedor('" + numeroPedido + "','" + result.NLINEA + "','" + result.CREF + "','" + result.CLOTE + "','B','2')"
             var QuitarContendor2 = "QuitarContenedor('" + numeroPedido + "','" + result.NLINEA + "','" + result.CREF + "','" + result.CLOTE + "','2')"
    
    
             fila = fila + "<div class='p-1'><button class='btn btn-info' tabindex='-1' onclick=" + AñadirContenedorA2 + ">A</button></div>"
             fila = fila + "<div class='p-1'><button class='btn btn-info' tabindex='-1' onclick=" + AñadirContenedorB2 + ">B</button></div>"
             fila = fila + "<div class='p-1><i class='material-icons' tabindex='-1' onclick="+ QuitarContendor2 +">X</i></div>"
             fila = fila + "</div></td>"
             fila = fila + "<td id='CajasPacking2" + result.NLINEA +"'>" + result.CajasPacking2 + "</td>"
    
             var suma = result.CajasPacking + result.CajasPacking2
    
             fila = fila + "<td id='sumacajas" + result.NLINEA + "'>" + suma + "</td>"
             fila = fila + "</tr>";
    
             $("#lineas tbody").append(fila)
    
             var linea = result.NLINEA;
             var referencia = result.CREF
    
             var lote = $(id).val();
    
             $(id).on('keypress', function (event) {
    
                 if (event.keyCode == '13') {
    
                     ActualizarLote(numeroPedido, linea, referencia, $(id).val())
    
                 }
    
             })
         }
    
         function ObtenerLineaPedido(pedido, linea) {
    
             $.ajax({
                 url: "@Url.Action("ObtenerDatosLinea", "PedidosPruebas")",
                 data: { "nnumped": pedido, "nlinea": linea },
                 success: function (e)
                 {
    
    
                     var idLote = pedido + linea + e.CREF
                     
    
                     console.log(idLote)
    
                     var plinea = $("#" + pedido + linea)
    
                     var packing1 = e.Packing1Desde + "/" + e.Packing1Hasta
                     var packing2 = e.Packing2Desde + "/" + e.Packing2Hasta
    
                     //console.log("p1", packing1)
                     //console.log("p2", packing2)
    
                     $("#" + idLote).val(e.CLOTE)
                     $("td[id=rangoPacking1" + linea + "]").html(packing1)
                     $(plinea).children("td[id=rangoPacking2" + linea + "]").html(packing2)
    
                     var suma = (e.CajasPacking + e.CajasPacking2)
    
                     $(plinea).children("td[id=sumacajas" + linea + "]").html(suma)
                     $(plinea).children("td[id=CajasPacking" + linea + "]").html(e.CajasPacking)
                     $(plinea).children("td[id=CajasPacking2" + linea + "]").html(e.CajasPacking2)
    
                     $(plinea).removeClass()
    
                     //console.log(suma)
    
                     if (suma == e.Cajas_Pedido)
                     {
                         $(plinea).addClass("bg-success")
                     }
                     else {
                         $(plinea).addClass("bg-danger")
                     }
    
                 }
             })
    
         }
    
    
        </script>
    End Section
    
    
    

    Gracias de nuevo!


    • Editado osmagarci miércoles, 31 de julio de 2019 6:35
    miércoles, 31 de julio de 2019 6:32
  • Hola, puedes mostrar el codigo de la clase de acceso a datos?

    clsDatosFacturaplus

    Puede ser que tengas probemas de bloqueos de las tablas. DBF 


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 31 de julio de 2019 6:59
    Moderador
  • En eso mismo había penasado… Que pudiese ser por ese tema.

    Imports System.Data.OleDb Public Class clsDatosFacturaplus Public Property EMPRESA As String Private ruta As String = "\\WIN2008\Datos\GrupoSP\GESTION_27_4_15\DBF" Private cadena As String Private conex As OleDbConnection Sub New(ByVal pEmpresa As String) EMPRESA = pEmpresa ruta = ruta + EMPRESA cadena = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ruta + ";Extended Properties=dBASE IV;User ID=Admin;Password=;" conex = New OleDbConnection(cadena) conex.Open() End Sub Private Sub Conectar() 'conex = New OleDbConnection(cadena) 'If conex.State = ConnectionState.Open Then ' conex.Close() 'End If End Sub Public Function GetDatos(ByVal pTabla As String, Optional ByVal pFiltro As String = "") As List(Of ComponentesModel) Conectar() Dim sql As String Dim ds As New DataSet sql = "SELECT CMATPRIM,CCODART,NUNIDADES FROM " + pTabla If pFiltro <> "" Then sql = sql + " WHERE " + pFiltro End If Dim lista As New List(Of ComponentesModel) Dim dt As New OleDbDataAdapter(sql, conex) dt.Fill(ds) For Each items As DataRow In ds.Tables(0).Rows Dim art As New ComponentesModel art.CMATPRIM = items("CMATPRIM").ToString 'art.CDETALLE = GetDataBy("Articulo", "CDETALLE", "cref = '" + art.CMATPRIM + "'") art.NUNIDADES = items("NUNIDADES") lista.Add(art) Next dt = Nothing Return lista End Function Public Function GetDataBy(ByVal pTabla As String, ByVal pCampo As String, ByVal pFiltro As String) As String Dim sql As String sql = "Select " + pCampo + " FROM " + pTabla + " WHERE " + pFiltro Dim dt As New OleDbDataAdapter(sql, conex) Dim ds As New DataSet dt.Fill(ds) If ds.Tables(0).Rows.Count = 0 Then Return "" Else Return ds.Tables(0).Rows(0).Item(pCampo).ToString dt = Nothing End If End Function Public Function GetComponentes(Optional ByVal pFiltro As String = "") As List(Of ComponentesModel) Conectar() Dim sql As String Dim ds As New DataSet sql = "SELECT Componen.CMATPRIM, Articulo.CDETALLE, Articulo.NSTOCKMIN ,Stocks.NSTOCK FROM (Componen INNER JOIN Stocks ON Componen.CMATPRIM = Stocks.CREF) INNER JOIN Articulo ON Componen.CMATPRIM = Articulo.CREF GROUP BY Componen.CMATPRIM, Articulo.CDETALLE, Articulo.NSTOCKMIN, Stocks.NSTOCK HAVING Componen.CMATPRIM<>'' WITH OWNERACCESS OPTION;" If pFiltro <> "" Then sql = sql + " WHERE " + pFiltro End If Dim dt As New OleDbDataAdapter(sql, conex) dt.Fill(ds, "Componentes") Dim lista As New List(Of ComponentesModel) For Each items In ds.Tables("Componentes").Rows Dim art As New ComponentesModel art.CMATPRIM = items(0).ToString art.CDETALLE = items(1).ToString art.NSTOCK = items(2) lista.Add(art) Next dt = Nothing Return lista End Function Public Function GetReferenciasFinales(ByVal pMateriaPrima As String) As List(Of ComponentesModel) Conectar() Dim sql As String Dim ds As New DataSet sql = "SELECT Componen.CMATPRIM, Componen.CCODART,Articulo.CDETALLE, COMPONEN.NCANTIDAD, Stocks.NSTOCK FROM (Componen INNER JOIN Stocks ON Componen.CCODART = Stocks.CREF) INNER JOIN Articulo ON Componen.CCODART = Articulo.CREF GROUP BY Componen.CMATPRIM,Componen.CCODART, Articulo.CDETALLE, COMPONEN.NCANTIDAD, Stocks.NSTOCK HAVING Componen.CMATPRIM = '" + pMateriaPrima + "' WITH OWNERACCESS OPTION;" Dim dt As New OleDbDataAdapter(sql, conex) dt.Fill(ds, "Componentes") Dim lista As New List(Of ComponentesModel) For Each items In ds.Tables("Componentes").Rows Dim art As New ComponentesModel art.CODART = items(1).ToString art.CDETALLE = items(2).ToString art.NSTOCK = items(4) art.CPROP1 = items(3) lista.Add(art) Next dt = Nothing Return lista End Function Public Function GetArticulosBajoMinimos() Dim sql As String Dim ds As New DataSet sql = "SELECT Articulo.CREF, Articulo.CDETALLE, Stocks.NSTOCK, Articulo.NSTOCKMIN FROM Articulo INNER JOIN Stocks ON Articulo.CREF = Stocks.CREF WHERE (((Stocks.NSTOCK)<[articulo].[nstockmin])) WITH OWNERACCESS OPTION;" Conectar() Dim dt As New OleDbDataAdapter(sql, conex) Dim Listado As New List(Of ArticuloModel) Dim data = dt.SelectCommand.ExecuteReader() While data.Read Dim articulo As New ArticuloModel If data.HasRows Then articulo.cref = data("CREF") articulo.cdetalle = data("cdetalle") articulo.nstock = data("nstock") End If End While End Function Public Function GetLineasPedidoCliente2(ByVal pedido As String) As List(Of LineasPedidoFPModel) Dim Sql = "SELECT PEDCLIL.NNUMPED,PEDCLIL.NLINEA, PEDCLIL.CREF, PEDCLIL.CDETALLE,pedclil.ncanped, Articulo.NUNIDADES, PEDCLIL.CLOTE, PedCliT.DFECPED, Clientes.CNOMCLI " _ & "FROM (PedCliT INNER JOIN (PEDCLIL Left JOIN Articulo On PEDCLIL.CREF = Articulo.CREF) On " _ & "PedCliT.NNUMPED = PEDCLIL.NNUMPED) Left JOIN Clientes On PedCliT.CCODCLI = Clientes.CCODCLI " _ & "WHERE Pedclil.NNUMPED = " & pedido & " ORDER BY PEDCLIL.NLINEA;" Conectar() Dim dt As New OleDbDataAdapter(Sql, conex) Dim Listado As New List(Of LineasPedidoFPModel) Dim data = dt.SelectCommand.ExecuteReader() While data.Read Dim linea As New LineasPedidoFPModel linea.NNUMPED = data("NNUMPED") linea.NLINEA = data("NLINEA") linea.DFECPED = data("DFECPED") linea.CCODCLI = data("CNOMCLI").ToString() linea.CREF = data("CREF").ToString() linea.CDETALLE = data("cdetalle") linea.NCANPED = data("ncanped") linea.CLOTE = IIf(data("CLOTE") Is DBNull.Value, "", Convert.ToString(data("CLOTE"))) linea.Unidades = IIf(data("nunidades") Is DBNull.Value, 0, data("nunidades")) Listado.Add(linea) End While Return Listado End Function Public Function GetLineaaPedidoCliente(ByVal pedido As String, ByVal nLinea As String) As LineasPedidoFPModel Dim Sql = "SELECT PEDCLIL.NNUMPED,PEDCLIL.NLINEA, PEDCLIL.CREF, PEDCLIL.CDETALLE,pedclil.ncanped, Articulo.NUNIDADES, PEDCLIL.CLOTE, PedCliT.DFECPED, Clientes.CNOMCLI " _ & "FROM (PedCliT INNER JOIN (PEDCLIL Left JOIN Articulo On PEDCLIL.CREF = Articulo.CREF) On " _ & "PedCliT.NNUMPED = PEDCLIL.NNUMPED) Left JOIN Clientes On PedCliT.CCODCLI = Clientes.CCODCLI " _ & "WHERE Pedclil.NNUMPED = " & pedido & " and Pedclil.nLinea = " & nLinea & " ORDER BY PEDCLIL.NLINEA;" Conectar() Dim dt As New OleDbDataAdapter(Sql, conex) Dim Linea As New LineasPedidoFPModel Dim data = dt.SelectCommand.ExecuteReader() 'If data.HasRows Then ' Linea.NNUMPED = data("NNUMPED") ' Linea.NLINEA = data("NLINEA") ' Linea.DFECPED = data("DFECPED") ' Linea.CCODCLI = data("CNOMCLI").ToString() ' Linea.CREF = data("CREF").ToString() ' Linea.CDETALLE = data("cdetalle") ' Linea.NCANPED = data("ncanped") ' Linea.CLOTE = IIf(data("CLOTE") Is DBNull.Value, "", Convert.ToString(data("CLOTE"))) ' Linea.Unidades = IIf(data("nunidades") Is DBNull.Value, 0, data("nunidades")) 'End If While data.Read Linea.NNUMPED = data("NNUMPED") Linea.NLINEA = data("NLINEA") Linea.DFECPED = data("DFECPED") Linea.CCODCLI = data("CNOMCLI").ToString() Linea.CREF = data("CREF").ToString() Linea.CDETALLE = data("cdetalle") Linea.NCANPED = data("ncanped") Linea.CLOTE = IIf(data("CLOTE") Is DBNull.Value, "", Convert.ToString(data("CLOTE"))) Linea.Unidades = IIf(data("nunidades") Is DBNull.Value, 0, data("nunidades")) End While Return Linea End Function Public Function GetLineasPedidoCliente(ByVal pNumeroPedido As Integer) As List(Of LineasPedidoFPModel) Dim packing1 As String() Dim packing2 As String() Dim Sql = "SELECT PEDCLIL.NNUMPED,PEDCLIL.NLINEA, PEDCLIL.CREF, PEDCLIL.CDETALLE,pedclil.ncanped, Articulo.NUNIDADES, PEDCLIL.CLOTE, PedCliT.DFECPED, Clientes.CNOMCLI " _ & "FROM (PedCliT INNER JOIN (PEDCLIL Left JOIN Articulo On PEDCLIL.CREF = Articulo.CREF) On " _ & "PedCliT.NNUMPED = PEDCLIL.NNUMPED) Left JOIN Clientes On PedCliT.CCODCLI = Clientes.CCODCLI " _ & "WHERE Pedclil.NNUMPED = " & pNumeroPedido & " ORDER BY PEDCLIL.NLINEA;" Conectar() Dim dt As New OleDbDataAdapter(Sql, conex) Dim Listado As New List(Of LineasPedidoFPModel) Dim data = dt.SelectCommand.ExecuteReader() While data.Read Dim linea As New LineasPedidoFPModel Dim partes As String() If data.HasRows Then Dim divisionUC As Double linea.NNUMPED = data("NNUMPED") linea.NLINEA = data("NLINEA") linea.DFECPED = data("DFECPED") linea.CCODCLI = data("CNOMCLI").ToString() linea.CREF = data("CREF").ToString() linea.CDETALLE = data("cdetalle") linea.NCANPED = data("ncanped") linea.CLOTE = IIf(data("CLOTE") Is DBNull.Value, "", Convert.ToString(data("CLOTE"))) linea.Unidades = IIf(data("nunidades") Is DBNull.Value, 0, data("nunidades")) divisionUC = linea.NCANPED / IIf(linea.Unidades = 0, 1, linea.Unidades) linea.Cajas_Pedido = divisionUC 'Separamos la cadena CLOTE para descomponerla en varios trozos 'primero comprobamos si el formato del packing tiene una '/' If linea.CLOTE.Contains("/") Then partes = linea.CLOTE.Split("/") packing1 = partes(0).Split("-") packing2 = partes(1).Split("-") If packing1.Length = 1 Then If Left(packing1(0), 1) = "A" Or Left(packing1(0), 1) = "B" Then linea.Packing1Desde = IIf(packing1(0) = "", 0, packing1(0).Substring(2)) linea.Packing1Hasta = linea.Packing1Desde linea.ContenedorPackin1 = Left(packing1(0), 1) Else linea.Packing1Desde = IIf(packing1(0) = "", 0, packing1(0)) linea.Packing1Hasta = linea.Packing1Desde 'IIf(packing1(1) = "", 0, packing1(1)) End If 'linea.Packing1Desde = IIf(packing1(0) = "", 0, packing1(0)) 'linea.Packing1Hasta = linea.Packing1Desde Else If Left(packing1(0), 1) = "A" Or Left(packing1(0), 1) = "B" Then linea.Packing1Desde = IIf(packing1(0) = "", 0, packing1(0).Substring(2)) linea.Packing1Hasta = IIf(packing1(1) = "", "", linea.Packing1Desde) linea.ContenedorPackin1 = packing1(0).Substring(0, 1) Else End If linea.Packing1Hasta = IIf(packing1(1) = "", 0, packing1(1)) End If If packing2.Length = 1 Then If Left(Trim(packing2(0)), 1) = "A" Or Left(Trim(packing2(0)), 1) = "B" Then linea.Packing2Desde = IIf(packing2(0) = "", 0, Trim(packing2(0)).Substring(2)) linea.Packing2Hasta = linea.Packing2Desde linea.ContenedorPackin2 = Left(packing2(0), 1) Else linea.Packing2Desde = IIf(packing2(0) = "", 0, packing2(0)) linea.Packing2Hasta = linea.Packing2Desde End If Else If packing2(0).StartsWith("A") Or packing2(0).StartsWith("B") Then linea.Packing2Desde = IIf(packing2(0) = "", 0, packing2(0).Substring(2)) linea.Packing2Hasta = IIf(packing2(1) = "", 0, packing2(1)) Else linea.Packing2Desde = IIf(packing2(0) = "", 0, packing2(0)) linea.Packing2Hasta = IIf(packing2(1) = "", 0, packing2(1)) End If End If 'linea.Packing1Desde = Convert.ToDouble(partes(0).Split("-")) Else If linea.CLOTE.Contains("-") Then partes = linea.CLOTE.Split("-") If partes.Length = 1 Then If Left(partes(0), 1) = "A" Or Left(partes(0), 1) = "B" Then linea.Packing1Desde = IIf(partes(0) = "", 0, partes(0).Substring(2)) linea.Packing1Hasta = linea.Packing1Desde linea.ContenedorPackin1 = Left(partes(0), 1) = "A" Else linea.Packing1Desde = IIf(partes(0) = "", 0, partes(0)) linea.Packing1Hasta = linea.Packing1Desde End If Else If Left(partes(0), 1) = "A" Or Left(partes(0), 1) = "B" Then linea.Packing1Desde = IIf(partes(0) = "", 0, partes(0).Substring(2)) linea.Packing1Hasta = IIf(partes(1) = "", linea.Packing1Desde, partes(1)) linea.ContenedorPackin1 = Left(partes(0), 1) = "A" Else linea.Packing1Desde = IIf(partes(0) = "", 0, partes(0)) linea.Packing1Hasta = IIf(partes(1) = "", 0, partes(1)) 'linea.Packing1Desde End If 'linea.Packing1Desde = IIf(partes(0) = "", 0, partes(0)) 'linea.Packing1Hasta = IIf(partes(1) = "", 0, partes(1)) End If Else If (linea.CLOTE.StartsWith("B") Or linea.CLOTE.StartsWith("A")) Then linea.Packing1Desde = IIf(linea.CLOTE = "", 0, Right(linea.CLOTE, linea.CLOTE.Length() - 2)) Else linea.Packing1Desde = IIf(linea.CLOTE = "", 0, linea.CLOTE) End If 'linea.Packing1Desde = IIf(linea.CLOTE = "", 0, linea.CLOTE) linea.Packing1Hasta = linea.Packing1Desde End If End If If (linea.Packing1Desde = 0 And linea.Packing1Hasta = 0) Then linea.CajasPacking = 0 Else linea.CajasPacking = Math.Abs(linea.Packing1Desde - linea.Packing1Hasta - 1) End If If linea.Packing2Desde = 0 And linea.Packing2Hasta = 0 Then linea.CajasPacking2 = 0 Else linea.CajasPacking2 = Math.Abs(linea.Packing2Desde - linea.Packing2Hasta - 1) End If Dim cajasPedidoRedondear As Double = Math.Ceiling(linea.Cajas_Pedido) If linea.Cajas_Pedido Mod 1 = 0 Then If (cajasPedidoRedondear = (linea.CajasPacking + linea.CajasPacking2)) Then linea.NoCoincide = 1 Else linea.NoCoincide = 2 End If Else linea.NoCoincide = 3 End If If String.IsNullOrEmpty(linea.Packing2Desde) Then linea.Packing2Desde = "0" End If If String.IsNullOrEmpty(linea.Packing2Hasta) Then linea.Packing2Hasta = "0" End If Listado.Add(linea) End If End While Return Listado End Function Public Function UpdateClotePedidos(ByVal nnumped As String, ByVal nlinea As Integer, ByVal cref As String, ByVal clote As String) As Integer Dim sql = "UPDATE PEDCLIL Set CLOTE = '" + clote + "' WHERE NNUMPED = " + nnumped + " and cref='" + cref + "' AND nlinea = " + nlinea.ToString Conectar() Dim command As New OleDbCommand(sql, conex) 'Dim dt As New OleDbDataAdapter(sql, conex) Return command.ExecuteNonQuery() End Function Public Function GetProveedores() As List(Of ProveedoresModel) Dim sql = "select ccodpro,cnompro from proveedo" Conectar() Dim proveedores As New List(Of ProveedoresModel) Dim dt As New OleDbDataAdapter(sql, conex) Dim data = dt.SelectCommand.ExecuteReader While data.Read Dim proveedor As New ProveedoresModel proveedor.ccodpro = data("ccodpro") proveedor.cnombre = data("cnompro") proveedores.Add(proveedor) End While conex.Close() Return proveedores End Function Public Function getLineasPendientesProveedor(ByVal codigoProveedor As String) As List(Of LineasPedidoProveedorFPModel) Dim sql = "SELECT Pedprot.NNUMPED, Pedprot.DFECPED, Pedprot.CCODPRO, " _ & "Pedprol.CREF, Pedprol.CDETALLE, Pedprol.NCANPED, " _ & "Pedprol.NCANENT FROM Pedprot INNER JOIN Pedprol ON " _ & "Pedprot.NNUMPED = Pedprol.NNUMPED " _ & "WHERE Pedprot.ccodpro = '" & codigoProveedor _ & "' WITH OWNERACCESS OPTION;" Conectar() Dim dt As New OleDbDataAdapter(sql, conex) Dim lineas As New List(Of LineasPedidoProveedorFPModel) Dim data = dt.SelectCommand.ExecuteReader While data.Read Dim linea As New LineasPedidoProveedorFPModel linea.cref = data("cref") linea.cdetalle = data("cdetalle") linea.ncanped = data("ncanped") linea.ncanent = data("ncanent") lineas.Add(linea) End While conex.Close() Return lineas End Function Public Function GetFacturaAbrisa(ByVal pFactura) As DataRowCollection Dim sql As String sql = "Select facclit.NNUMFAC, facclit.DFECFAC, facclit.CCODCLI, clientes.CNOMCLI, clientes.CNOMCOM, " _ & "clientes.CDNICIF, clientes.CDIRCLI, clientes.CTFO1CLI, clientes.CTFO2CLI, clientes.CPTLCLI, " _ & "clientes.CFAXCLI, provinc.CNOMPROV As Provincia,facclil.CREF, facclil.CDETALLE, " _ & "facclil.NCANENT, facclil.NPREUNIT As npreunit, facclil.NDTO As ndto, facclil.NTOTLINEA, FPago.cdespago AS FormaPago, " _ & "facclit.DFECENT, facclit.CSUPED, facclit.NNUMALB, transpor.CNOMTRAN AS Transportista, " _ & "facclit.NTOTBRUTO, facclit.NTOTNETO, facclit.NTOTFAC, facclit.NTOTALIVA, facclit.NBASEESP, " _ & "facclit.NDPP, facclit.NPORTES, facclit.NTOTALREC, clientes.CPOBCLI, clientes.CENTIDAD, " _ & "clientes.CAGENCIA, clientes.CCUENTA " _ & "FROM((((facclit LEFT JOIN facclil ON (facclit.NNUMFAC = facclil.NNUMFAC) And (facclit.CSERIE = facclil.CSERIE)) " _ & "LEFT JOIN FPago On facclit.CCODPAGO = FPago.CCODPAGO) LEFT JOIN transpor On facclit.CCODTRAN = transpor.CCODTRAN) " _ & "LEFT JOIN clientes On facclit.CCODCLI = clientes.CCODCLI) LEFT JOIN provinc On clientes.CCODPROV = provinc.CCODPROV " _ & "WHERE(((facclit.NNUMFAC) = " + pFactura + ")) ORDER BY FACCLIL.NNUMALB desc;" Conectar() Dim ds As New DataSet Dim dt As New OleDbDataAdapter(sql, conex) dt.Fill(ds, "FacturaAbrisa") conex.Close() Return ds.Tables(0).Rows End Function Public Function GetData(ByVal ptabla As String, Optional ByVal pFiltro As String = "") As DataRowCollection Dim sql As String sql = "select * from " & ptabla If pFiltro <> "" Then sql = sql + " WHERE " + pFiltro End If 'Conectar() Dim dt As New OleDbDataAdapter(sql, conex) Dim ds As New DataSet dt.Fill(ds, 0) conex.Close() Return ds.Tables(0).Rows End Function Public Function GetComentariosFactura(ByVal pFactura As Integer) As String Dim comentario As String = "" Dim sql As String = "select ccoment from facclic where nnumfac = " & pFactura Dim dt As New OleDbCommand(sql, conex) If conex.State = ConnectionState.Closed Then conex.Open() End If Dim dr = dt.ExecuteReader() While dr.Read() comentario = comentario + dr("ccoment") End While Return comentario End Function End Class

    Creo que van por ahí los tiros. Lo raro es que si lanzo la aplicación desde mi equipo de desarrollo no me tira ningún error de bloque ni nada....

    saludos.

    miércoles, 31 de julio de 2019 7:43
  • ¿En tu equipo de desarrollo has realizado las pruebas teniendo FacturaPlus en ejecución y con pantallas abiertas? Ocurre que esa aplicación bloquea los ficheros cuando está trabajando con ellos.

    Puedes probar a hacer una copia del fichero de datos que vas a abrir y trabajar sobre esa copia.


    Saludos, Javier J

    miércoles, 31 de julio de 2019 7:49
  • Hola Javier, cuando desarrollo, Facturaplus si que esta abierto (por lo menos en los otros equipos, ya que es el programa de facturación), lo único que me queda es hacer esa prueba... Abriré esa misma pantalla en mi equipo y pruebo....

    Saludos. 

    PD: Acabo de hacer una prueba en mi equipo de desarrollo y con facturaplus abierto y ese pedido y línea abierto para editar.... Me guarda la información correctamente y sin errores....



    • Editado osmagarci miércoles, 31 de julio de 2019 8:25
    miércoles, 31 de julio de 2019 8:08
  • Vuelvo al tema.... Acabo de realizar el insertado de unos registros en la misma pantalla y me ha pasado lo mismo. Me he dado cuenta de que en el log de iis me aparece esta línea: 

    "2019-07-31 11:33:16 192.168.10.60 GET /Murano2/PedidosPruebas/AñadirContenedorLote nnumped=33564&nlinea=96&cref=4010&clote=53&contenedor=A&parte=1 80 - 192.168.10.6 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/64.0.3282.140+Safari/537.36+Edge/18.17763 500 0 0 0"

    Por lo poco que entiendo, el servidor me esta lanzando un error http 500.0 y por lo que he leído por ahí esta relacionado con Filtros ISAPI?

    Gracias de antemano,

    Un saludo.

    miércoles, 31 de julio de 2019 11:42
  • Hola, pon un punto de parada en la función

    AñadirContenedorLote

    y depura dónde puede haber un error. Inclusive emplea bloque Try Catch para logear el posible error. 


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 31 de julio de 2019 12:02
    Moderador