entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Error al recargar una datatable en un modal

Hola, a todos tengo un formulario de consulta el cual solo se oprime un botón y debe recargarse la tabla Formulario de consulta, he intentando generar esa recarga de datos la primera que hice fue que por ajax me generase las filas

("#btnMovimientos").click(function(){
                            var form_data = {
                                codigo:$('#cuenta').val(),
                                fechaI:$('#txtFechaInicial').val(),
                                fechaF:$('#txtFechaFinal').val()
                            };                        

                            $.ajax({
                                type: 'POST',
                                url: "consultasBasicas/movimientos_efectuados.php",
                                data: form_data,
                                success: function (data) {                                    
                                   $("#cuerpo").html(data);
                                   console.log(data);
                                }
                            });                            
                        });
                    }); 
<?php
session_start();
require_once '../Conexion/conexion.php';
$i=0;
$tabla = "";
$codigo = $_POST['codigo'];
$fechaInicial = $_POST['fechaI'];
$valorFechaI = explode("/", $fechaInicial);
$fechaI = $valorFechaI[2].'-'.$valorFechaI[1].'-'.$valorFechaI[0];
$fechaFinal = $_POST['fechaF'];
$valorFechaFinal = explode("/", $fechaFinal);
$fechaF=$valorFechaFinal[2].'-'.$valorFechaFinal[1].'-'.$valorFechaFinal[0];
$sql = "SELECT DISTINCT tpc.nombre,cnt.numero,cnt.fecha,ct.naturaleza,dtc.valor,dtc.descripcion,cnt.tercero,dtc.centrocosto,dtc.proyecto
FROM gf_cuenta ct
LEFT JOIN gf_detalle_comprobante dtc ON dtc.cuenta = ct.id_unico
LEFT JOIN gf_comprobante_cnt cnt ON dtc.comprobante = cnt.id_unico
LEFT JOIN gf_tipo_comprobante tpc ON cnt.tipocomprobante = tpc.id_unico
WHERE ct.codi_cuenta = '$codigo' AND  cnt.fecha BETWEEN ('$fechaI') AND ('$fechaF')";
$result = $mysqli->query($sql);
$filas =$result->num_rows;
if($filas!=0){
    while($row=$result->fetch_row()){
        $valorFecha=  explode("-", $row[2]);
        $fecha = $valorFecha[2].'/'.$valorFecha[1].'/'.$valorFecha[0];
        #Captura del valor debito por su naturaleza
        $debtido = "";
        if($row[3]==1){
            if($row[4]>=0){
                $debtido=  '<label class="valorLabel" style="font-weight:normal">'.number_format($row[4], 2, '.', ',').'</label>';
            }else{
                $debtido = '<label style="font-weight:normal">0.00</label>';
            }
        }else if($row[3]==2){
            if($row[4] <= 0){
                $x = (float) substr($row[4],'1');
                $debtido = '<label class="valorLabel" style="font-weight:normal">'.number_format($x, 2,'.', ',').'</label>';
            }else{
                $debtido = '<label class="valorLabel" style="font-weight:normal">0.00</label>';
            }
        }
        #captura del valor crédito
        $credito = "";
        if ($row[3] == 2) {
            if($row[4] >= 0){
                $credito = '<label class="valorLabel" style="font-weight:normal">'.number_format($row[4], 2, '.', ',').'</label>';
            }else{
                $credito = '<label class="valorLabel" style="font-weight:normal">0.00</label>';
            }
        }else if($row[3] == 1){
            if($row[4] <= 0){
                $y = (float) substr($row[4],'1');
                $credito = '<label class="valorLabel" style="font-weight:normal">'.number_format($y, 2, '.', ',').'</label>';
            }else{
                $credito = '<label class="valorLabel" style="font-weight:normal">0.00</label>';
            }
        }
        $tercero = $row[6];
        $sqlTercero = "SELECT  IF(CONCAT(ter.nombreuno,' ', ter.nombredos, ' ', ter.apellidouno, ' ', ter.apellidodos) IS NULL OR CONCAT(ter.nombreuno,' ', ter.nombredos, ' ', ter.apellidouno, ' ', ter.apellidodos)='',
                    (ter.razonsocial),CONCAT(ter.nombreuno,' ',ter.nombredos,' ',ter.apellidouno,' ',ter.apellidodos)) AS 'NOMBRE', 
                    ter.id_unico, CONCAT(ti.nombre,' - ',ter.numeroidentificacion) AS 'TipoD' FROM gf_tercero ter
                    LEFT JOIN gf_tipo_identificacion ti ON ti.id_unico = ter.tipoidentificacion
                    WHERE ter.id_unico=$tercero";
        $resultTercero = $mysqli->query($sqlTercero);
        $persona = mysqli_fetch_row($resultTercero);
        #centro de costo
        $sqlCentroCosto = "SELECT nombre FROM gf_centro_costo WHERE id_unico = $row[7]";
        $resultCentroCosto = $mysqli->query($sqlCentroCosto);
        $centroCosto = mysqli_fetch_row($resultCentroCosto);
        #proyecto
        $sqlProyecto = "SELECT nombre FROM gf_proyecto WHERE id_unico = $row[8]";
        $resultProyecto = $mysqli->query($sqlProyecto);
        $proyecto = mysqli_fetch_row($resultProyecto);

        try{
            echo '<tr role="row" class="class="odd"">'
        . '<td class="campos oculto dt-body-center sorting_1"><label class="valorLabel" style="font-weight:normal"></label></td>'
        . '<td class="campos oculto"><label class="valorLabel" style="font-weight:normal"></label></td>'
        . '<td class="campos text-left"><label class="valorLabel" style="font-weight:normal">'.ucwords(strtolower($row[0])).'</label></td>'
        . '<td class="campos text-right"><label class="valorLabel" style="font-weight:normal">'.ucwords(strtolower($row[1])).'</label></td>'
        . '<td class="campos text-right"><label class="valorLabel" style="font-weight:normal">'.$fecha.'</label></td>'
        . '<td class="campos text-right">'.$debtido.'</td>'
        . '<td class="campos text-right">'.$credito.'</td>'
        . '<td class="campos text-left"><label class="valorLabel" style="font-weight:normal">'.ucwords(strtolower($row[5])).'</label></td>'
        . '<td class="campos text-left"><label class="valorLabel" style="font-weight:normal" title="'.ucwords(strtolower($persona[2])).'">'.ucwords(strtolower($persona[0])).'</label></td>'
        . '<td class="campos text-left"><label class="valorLabel" style="font-weight:normal">'.ucwords(strtolower($centroCosto[0])).'</label></td>'
        . '<td class="campos text-left"><label class="valorLabel" style="font-weight:normal">'.ucwords(strtolower($proyecto[0])).'</label></td>'            
        . '</tr>';    
        }  catch (Exception $e){}
    }

}else{
    echo '<tr><td colspan="12" class="text-center">No Existen Registros...<td><tr>';
}

?>

La segunda opción que intente al oprimir el botón fue
Segundo Intento

y en el formulario volvi a armar mi json de la misma manera que mi segundo intento y
me sale el siguiente error Error

en el archivo movimientos_efectuados capturo las variables por get
archivo

y cuando reviso el json resultante me sale de la forma correcta
Resultado JSON

por favor alguién que me pueda ayudar a solucionar este error, gracias por su atención

2 Respuestas

1voto

Alex_Numpaque Puntos17150

Hola a todos ya lo solucione, gracias @jrgm0005 por tu concejo, aquí dejo mi solución.

<?php
session_start();
require_once '../Conexion/conexion.php';
$i=0;
$tabla = "";
$codigo = $_GET['codigo'];
$fechaInicial = $_GET['fechaI'];
$valorFechaI = explode("/", $fechaInicial);
$fechaI = $valorFechaI[2].'-'.$valorFechaI[1].'-'.$valorFechaI[0];
$fechaFinal = $_GET['fechaF'];
$valorFechaFinal = explode("/", $fechaFinal);
$fechaF=$valorFechaFinal[2].'-'.$valorFechaFinal[1].'-'.$valorFechaFinal[0];
$sql = "SELECT DISTINCT tpc.nombre,cnt.numero,cnt.fecha,ct.naturaleza,dtc.valor,dtc.descripcion,cnt.tercero,dtc.centrocosto,dtc.proyecto
FROM gf_cuenta ct
LEFT JOIN gf_detalle_comprobante dtc ON dtc.cuenta = ct.id_unico
LEFT JOIN gf_comprobante_cnt cnt ON dtc.comprobante = cnt.id_unico
LEFT JOIN gf_tipo_comprobante tpc ON cnt.tipocomprobante = tpc.id_unico
WHERE ct.codi_cuenta = '$codigo' AND  cnt.fecha BETWEEN ('$fechaI') AND ('$fechaF')";
$result = $mysqli->query($sql);
$filas =$result->num_rows;
if($filas!=0){
    while($row=$result->fetch_row()){
        $valorFecha=  explode("-", $row[2]);
        $fecha = $valorFecha[2].'/'.$valorFecha[1].'/'.$valorFecha[0];
        $debtido = "";
        if($row[3]==1){
            if($row[4]>=0){
                $debtido=  number_format($row[4], 2, '.', ',');
            }else{
                $debtido = '0.00';
            }
        }else if($row[3]==2){
            if($row[4] <= 0){
                $x = (float) substr($row[4],'1');
                $debtido = number_format($x, 2,'.', ',');
            }else{
                $debtido = '0.00';
            }
        }
        $credito = "";
        if ($row[3] == 2) {
            if($row[4] >= 0){
                $credito = number_format($row[4], 2, '.', ',');
            }else{
                $credito = '0.00';
            }
        }else if($row[3] == 1){
            if($row[4] <= 0){
                $y = (float) substr($row[4],'1');
                $credito = number_format($y, 2, '.', ',');
            }else{
                $credito = '0.00';
            }
        }
        $tercero = $row[6];
        $sqlTercero = "SELECT DISTINCT IF(CONCAT(ter.nombreuno,' ', ter.nombredos, ' ', ter.apellidouno, ' ', ter.apellidodos) IS NULL OR CONCAT(ter.nombreuno,' ', ter.nombredos, ' ', ter.apellidouno, ' ', ter.apellidodos)='',
                    (ter.razonsocial),CONCAT(ter.nombreuno,' ',ter.nombredos,' ',ter.apellidouno,' ',ter.apellidodos)) AS 'NOMBRE', 
                    ter.id_unico, CONCAT(ti.nombre,' - ',ter.numeroidentificacion) AS 'TipoD' FROM gf_tercero ter
                    LEFT JOIN gf_tipo_identificacion ti ON ti.id_unico = ter.tipoidentificacion
                    WHERE ter.id_unico=$tercero";
        $resultTercero = $mysqli->query($sqlTercero);
        $persona = mysqli_fetch_row($resultTercero);
        $sqlCentroCosto = "SELECT nombre FROM gf_centro_costo WHERE id_unico = $row[7]";
        $resultCentroCosto = $mysqli->query($sqlCentroCosto);
        $centroCosto = mysqli_fetch_row($resultCentroCosto);
        $sqlProyecto = "SELECT nombre FROM gf_proyecto WHERE id_unico = $row[8]";
        $resultProyecto = $mysqli->query($sqlProyecto);
        $proyecto = mysqli_fetch_row($resultProyecto);

        $tabla.='{"Tipo":"'.ucwords(strtolower($row[0])).'","Número":"'.ucwords(strtolower($row[1])).'","Fecha":"'.$fecha.'","Valor Débito":"'.$debtido.'","Valor Crédito":"'.$credito.'","Descripción":"'.ucwords(strtolower($row[5])).'","Tercero":"'.ucwords(strtolower($persona[2])).'","Centro Costo":"'.ucwords(strtolower($centroCosto[0])).'","Proyecto":"'.ucwords(strtolower($proyecto[0])).'"},';
        $i++;        
    }
    $tabla = substr($tabla,0, strlen($tabla) - 1);
    echo '{"data":['.$tabla.']}';
}else{
    echo '<tr><td class="text-center" colspan="12" class="text-center"><p>No Existen Registros...</p><td><tr>';
}
?>

$("#btnMovimientos").click(function(){                                                                                                                                                              
                        $("#tablaMovimientos").dataTable().fnDestroy();                            
                        $('#tablaMovimientos').DataTable( {
                            "autoFill": true,
                            "scrollX": true,
                            "pageLength": 5,
                              "language": {
                                "lengthMenu": "Mostrar _MENU_ registros",
                                "zeroRecords": "No Existen Registros...",
                                "info": "Página _PAGE_ de _PAGES_ ",
                                "infoEmpty": "No existen datos",
                                "infoFiltered": "(Filtrado de _MAX_ registros)",
                                "sInfo":"Mostrando _START_ - _END_ de _TOTAL_ registros","sInfoEmpty":"Mostrando 0 - 0 de 0 registros"
                              },
                              'columnDefs': [{
                               'targets': 0,
                               'searchable':false,
                               'orderable':false
                            }],
                            ajax: {
                                url: 'consultasBasicas/movimientos_efectuados.php?codigo='+$('#cuenta').val()+"&fechaI="+$('#txtFechaInicial').val()+"&fechaF="+$('#txtFechaFinal').val(),
                                dataSrc: 'data'
                            },
                            columns: [
                                {data:'Tipo'},
                                {data:'Número'},
                                {data:'Fecha'},
                                {data:'Valor Débito'},
                                {data:'Valor Crédito'},
                                {data:'Descripción'},
                                {data:'Tercero'},
                                {data:'Centro Costo'},
                                {data:'Proyecto'}
                            ]
                        } );  
                    });

Funcionado

1voto

Peter comentado

Gracias por compartir la solución!

2votos

jrgm0005 comentado

Me alegro que te haya servido, es algo que se debería de hacer siempre, ir probando todo poco a poco para ir haciendo el código lo más modular y simple posible.

2votos

jrgm0005 Puntos2990

Hola, mi consejo es que hagas micro pruebas paso a paso, si ya tienes los datos, muestralos con print_r y trabaja con ellos de alguna manera.

Una vez que los tienes y estás seguro de que son esos datos válidos, revisa la declaración de tu datatable, los campos y el tipo que va a mostrar en cada uno de ellos, son fallos tontos que ocurren a menudo te lo puedo asegurar.

Finalmente, observando el error, lo que indica es que table_id debe ser númerico y ahí se ve como una cadena, revisa todo.

Espero tus noticias.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta