Esta consulta es de hace 8 años. No tome esta información como actualizada. Si tiene problemas con FacturaScripts, consulte la sección ayuda o la sección contacto
360st

Hola,

360st   República Dominicana   18-12-2016 07:44:16   05-02-2017 06:57:51   347   [NeoRazorX]
Hola,

Retomando el comentario que hice hace 3 meses: https://www.facturascripts.com/comm3/index.php?page=community_item&id=3242

Al hacer click en INFORMES -> CLIENTES -> DEUDORES, se muestran correctamente el listado de clientes deudores, pero el monto adeudado esta incorrecto.

He descubierto que el problema esta en el SQL ejecutado al momento de listar los deudores, actualmente se esta ejecutando la sentencia:
select codcliente,sum(importeeuros) as total from reciboscli where estado != 'Pagado' group by codcliente order by total DESC LIMIT 100 OFFSET 0;


Se puede apreciar que la columna que esta sumando es "importeeuros", entonces trae el valor en euros y lo convierte a la moneda local configurada en FS utilizando la columna "CODDIVISA" que en mi caso es DOP(Pesos Dominicanos), esto es un problema obvio ya que si emites una factura a un cliente en DOP$100.00 (Pesos dominicanos) y en ese momento se guardo también el valor de importeeuros utilizando la tasa configurada en ese momento hasta ahí va bien. El problema es que la tasa cambia en el tiempo, y cuando ejecutas la consulta de DEUDORES un mes mas tarde el valor del recibo sera diferente.

En mi caso particular y de todo el que factura en una sola moneda, se podria solucionarlo solo cambiando la columna a sumar en la sentencia SQL, quedaría de esta forma:
select codcliente,sum(importe) as total from reciboscli where estado != 'Pagado' group by codcliente order by total DESC LIMIT 100 OFFSET 0;


Pero esto no solucionaría el problema del que factura en varias monedas, por lo que rapidamente se me ocurre que una solución seria:
1- Agregar la columna "tasaconv" en la tabla "reciboscli", y calcular el "sum(importeeuros)" en base a este valor, de esta manera el calculo siempre dará el valor correcto original.

Que piensan ustedes ?

Saludos.

Plugins relacionados

Plugin tesoreria
Como aclaración adicional, he cambiado las siguientes dos lineas en el controlador "informes_clientes" de Facturación Premium:
imagen
Para solucionar esto, lo más sencillo es consultar la tasa de conversión en la tabla divisas al momento de calcular.
Carlos, acabo de verificar y FS actualmente guarda el CODDIVISA y TASACONV en las tablas 'reciboscli' y "facturascli" y tambien veo que al método 'euro_convert' se le puede pasar ambos valores :
public function euro_convert($precio, $coddivisa = NULL, $tasaconv = NULL)


Por lo que creo que debería quedar de la siguiente forma:

private function clientes_deudores()
{
$tclist = array();

if( class_exists('recibo_cliente') )
{
$sql = "select codcliente, coddivisa, tasaconv, sum(importeeuros) as total from reciboscli"
. " where estado != 'Pagado' group by codcliente order by total DESC";

//$sql = "select codcliente,sum(importeeuros) as total from reciboscli"
// . " where estado != 'Pagado' group by codcliente order by total DESC";
}
else
{
$sql = "select codcliente,coddivisa, tasaconv,sum(totaleuros) as total from facturascli"
. " where pagada = false group by codcliente order by total DESC";

// $sql = "select codcliente,sum(totaleuros) as total from facturascli"
// . " where pagada = false group by codcliente order by total DESC";
}

$data = $this->db->select_limit($sql, 100, 0);
if($data)
{
foreach($data as $d)
{
$cliente = $this->cliente->get($d['codcliente']);
if($cliente)
{
if(!$cliente->debaja)
{
$deudas = $this->euro_convert( floatval($d['total']),$d['coddivisa'],$d['tasaconv'] );
//$deudas = $this->euro_convert( floatval($d['total']) );
$tclist[] = array($cliente, $deudas);
}
}
}
}

return $tclist;
}


Que piensas Carlos, esta correcta esta implementación ?
Carlos, he modificado nuevamente el controlador y la vista, esta vez para que muestre el total de los deudores correctamente cuando se utiliza multiples divisas. ( Cierra el otro hilo, para continuar en este https://www.facturascripts.com/comm3/index.php?page=community_item&id=3770

Agregar variable al controlador:

class informe_clientes extends fs_controller
{
public $cliente;
public $opcion;
public $resultados;
public $clientes_deuda_total;

public function __construct()




private function clientes_deudores()
{
$tclist = array();
$this->clientes_deuda_total=0;

if( class_exists('recibo_cliente') )
{
$sql = "select codcliente, coddivisa, tasaconv, sum(importeeuros) as total from reciboscli"
. " where estado != 'Pagado' group by codcliente order by total DESC";

//$sql = "select codcliente,sum(importeeuros) as total from reciboscli"
// . " where estado != 'Pagado' group by codcliente order by total DESC";
}
else
{
$sql = "select codcliente,coddivisa, tasaconv,sum(totaleuros) as total from facturascli"
. " where pagada = false group by codcliente order by total DESC";

// $sql = "select codcliente,sum(totaleuros) as total from facturascli"
// . " where pagada = false group by codcliente order by total DESC";
}

$data = $this->db->select($sql);
if($data)
{
foreach($data as $d)
{
$cliente = $this->cliente->get($d['codcliente']);
if($cliente)
{
if(!$cliente->debaja)
{
$deudas = $this->euro_convert( floatval($d['total']),$d['coddivisa'],$d['tasaconv'] );
$this->clientes_deuda_total += $deudas;
//$deudas = $this->euro_convert( floatval($d['total']) );
$tclist[] = array($cliente, $deudas);
}
}
}
}

return $tclist;
}



En la vista solo hay que modificar despues de la linea 111:

<tr class="warning">
<td colspan="6">Sin resultados.</td>
</tr>
{/loop}
<tr class="warning">
<td colspan="6" class="text-right">Total: {$fsc->show_precio($fsc->clientes_deuda_total)}</td>
</tr>


La solución correcta es la del resto de informes, primero consultar la divisa de la empresa y luego las demás y convertirlas a la de la empresa usando el importe en euros.
Estará en la siguiente actualización.
Saludos.
Perfecto, gracias por la corrección Carlos.
¿Problemas con FacturaScripts?
Si tiene problemas con FacturaScripts consulte la sección ayuda o la sección contacto



Cookies
Usamos cookies en nuestro sitio web para brindarte la experiencia más relevante recordando tus preferencias y visitas repetidas. Al hacer clic en "Aceptar", aceptas el uso de TODAS las cookies necesarias.
Copyright (c) 2013-2024 FacturaScripts
0.16119s

Soporte