Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
fmatus93
Contributor II
Contributor II

Flujo de Caja

Estimados,

Buenas tardes, necesito de su ayuda para poder resolver un problema. Hace un tiempo integre una fórmula para obtener el flujo de caja "ideal", osea que el pago cayera justo en el mes que tienen los clientes para hacerlo(días de término de pago). Lo que ocurre es que estaba trabajando solamente con los comienzos de mes, osea con el primero y hay caso que los pago me caen en un mes antes porque tiene una condición de pago de 20 días.
Como ejemplo, el cliente X tiene una condición de pago de 20 días y la fecha de facturación de su pedido fue el 15/11/2019, lo que correspondería sería que el pago cayera en el mes de Diciembre (15/11/2019 + 20 días = Diciembre), pero como expliqué me está tomando el primer día del mes y caería en Noviembre porque estoy trabajando directamente con los meses. Lo que necesito  es poder trabajar directamente con la fecha de facturación, que a eso se le vaya sumando la condición de pago.

Esta es la fórmula que estoy usando:

=date((If(Payment_terms>=0 and Payment_terms<30,[Date.autoCalendar.YearMonth],
if((Payment_terms>=30 and Payment_terms<60),(AddMonths([Date.autoCalendar.YearMonth],1)),
if((Payment_terms>=60 and Payment_terms<90),(AddMonths([Date.autoCalendar.YearMonth],2)),
if((Payment_terms>=90 and Payment_terms<120),(AddMonths([Date.autoCalendar.YearMonth],3)) ,
(AddMonths([Date.autoCalendar.YearMonth],4))))))),'MM/YYYY')

Cuando el término de pago está entre 0 y 30 es porque se supone que debería caer en el mismo mes, pero me dí cuenta que se debe trabajar con DD/MM/YYYY para que a la fecha se le sume los días que tienen como condición de pago cada cliente. 

Espero me haya explicado bien y puedan ayudarme.

Agradecido desde ya,

Saludos.

2 Replies
rubenmarin

Hola, para la cartera sería mejor usar fechas y nº de días concretos, ir añadiendo meses puede crear desviaciones importantes.

Para esto, si no tienes directamente la fecha de vencimiento, necesitas la fecha de facturación y el número de días de condición de pago de cada factura, con esto podrías calcular la fecha de vencimiento simplemente sumando ambos valores: Date(FechaFactura+DiasCondicion) as FechaVencimiento.

Normalmente la factura y/o el cliente/proveedor tiene un método de pago asociado, y de este método se podría obtener los días de condición de pago.

Con el campo payment_terms podría ser: Date(Invoice_date+Payment_terms) as Due_date

Saludos.

jmmayoral3
Creator
Creator

Hola.

Yo haría lo siguiente:

1.- calcular una nuevo campo en el script con la fecha de vencimiento de cada registro, sumando Date + Payment Terms

.... Date+Payment_terms AS "Fecha Pago"....

Con esto tendrías la fecha de pago exacta. Ten en cuenta que lo que tu haces es calcular la fecha a partir del AñoMes y sumando 1, 2, 3 ó 4 meses. cuando luego la conviertes a fecha de nuevo es cuando te toma el primer día del mes. Haz este cálculo en el momento de leer los datos del origen de datos, osea en el LOAD .... FROM....

2.- Añade esta nueva fecha en el autocalendar para que calcule el año, mes, día.... etc.

DERIVE FIELDS FROM FIELDS Date, [Fecha Pago]...

3.- Si usas el formato MM/YYYY te recomiendo que lo uses así: YYYYMM. el primer formato es un texto y lo ordena como tal, o sea, 01/2018, 01/2019, 02/2018, 02/2019.... mientras que el segundo es un nº y lo ordena correctamente:  201801,201802,201901,201902. No obstante si quieres visualizar el texto y ordenarlo numéricamente, modifica el script que genera el autocalendar y sustituye:

Dual(Year($1)&'-'&Month($1), monthstart($1)) AS [YearMonth]

por  Dual(Month($1)&'/'&Year($1), monthstart($1)) AS [YearMonth]

Luego usa este campo en los gráficos y ordenalo numéricamente.

4.- Veo que tienes un campo llamado "Date"  para la fecha. Te recomiendo que lo renombres a cualquier otra cosa. A mi en determinadas condiciones me ha dado problemas porque confunde el nombre del campo con el nombre de la función. Intenta no usar palabras reservadas en lo nombres de campos.

 

Espero que te solucione el problema.