Fixed day payment terms – The magic behind due date determination!!!
Payment terms define the parameters to derive the due date for the payment of an invoice, cash discount terms and periods, installment terms, default payment block/method that can be set etc. Usually baseline date is defined and derived from payment terms which is in turn used as the base for calculation of due date for payment.
Fixed date payment terms are used when the due date for the payment is a fixed date.
E.G: Payment is due on 20th October of every year.
Usually this kind of payment terms are used in case of seasonal sales/purchases.
Many people might have a doubt, if the due date is a fixed day, why do we need payment terms at all?. Instead, can’t we enter the due date directly in invoice? Fixed day payment terms are used for better management of invoices/payments. We maintain the payment terms in master data of customer/vendor which is defaulted to invoice automatically. So, we don’t have to go through the pain of remembering each fixed date for every customer/vendor.
Definition of fixed day payment term is done with out any baseline date as shown below. Then, how does SAP derives due date?
There is no standard SAP logic which determines the due date for fixed day payment terms. It is left to customers to write their own logic through
BTE (Business transaction event) 1120.
Implicit enhancement can be done in the BTE function module OPEN_FI_PERFORM_00001120_P to write custom ABAP logic and update the field ZFBDT (Baseline date) of internal table t_bsegsub.
One of the flexible way is to maintain a TVARVC variable with the list of fixed day payment terms in the format YYYYMMDD where MMDD is already known.
Year can be replaced with current year/year from posting date through program logic.
In below screenshot, 15th January of every year is the fixed due date for the payment term 070. This TVARVC variable can be queried with the payment term as low value to identify the due date from high value. YYYY should be replaced with year from posting date/any other logic based on business requirement.
Above BTE is called for every FI document creation where due date determination is required (From sales, purchase etc). So, logic has to be restricted based on business requirement.
Your valuable comments/any other better approach if you know would be most welcome 🙂
Useful document. Thanks for sharing.
Thanks Srinivas 🙂
Thanks Naresh 🙂
Nice one. Keep sharing knowledge 🙂
BR, Srinivas Salpala
Thanks Srinivas 🙂
Your Blog is usful and Good.. Thanks ...
Thanks Ramesh 🙂
Very Nice document Vinod. Appreciate the add-on Knowledge 🙂
Thanks Sowmya 🙂
It is really a nice blog. Thanks to know a new topic from your end and at the same time we are expecting more articles in future also 🙂
Doubt - If we want to give any discount how can we proceed further on that.
Can we fix this fixed pyt terms issue through validation/substitution also?
Thanks & Regards,
Thanks Lakshmi 🙂
The requirement you are asking is for our client only 😛 . We explored multiple options with no luck. So, posted question in forum (By Rudra) to seek experts advice.
Thanks for sharing this insightful information......nice to have this document handy!
Thanks Amir 🙂
Nice document...Thanks for sharing.
Thanks Kalim 🙂
Well written with clear flow of information...
Thanks for sharing..
Thanks a lot Rahul 🙂
Good Document, thanks for sharing...
Thanks narin 🙂
Wonderful Document. This is infact an Innovation!
Thanks a lot Naseem 🙂
Thanks for sharing
Thanks for sharing the knowledge..A question asked often, and you addressed it .
Thanks Prasad, Kavita 🙂
I am wondering cant this be achieved using the fields "Fixed date" and "additional months"??
If you want invoice will be due always in the next month, on 15th, you can have "Fixed date = 15" and "Additional months = 1"..
For the example you have considered, try with Additional months = 12
Pardon me, if I am wrong, but my memory says I did it once... It was way 3 yrs back.. Can you please check this aspect?
Br, Ajay M
I tested this in my system and it worked.
Can you please revise the document accordingly. Please let me know incase I have misunderstood the whole issue
Br. Ajay M
Thanks Ajay for your valuable inputs.
However, requirement here is little different. It is not always fixed day + fixed additional months. Payment term can be used any time during the year. Due date year should be adjusted to current year/next year comparing with posting date.
If my Fixed due date is 15.02.YYYY, If I use my payment terms in Jan 14, then due date would be 15.02.2014. If I use the same payment term from Feb on wards till Jan 2015(This is business requirement), then due date should be 15.02.2015. Can this dynamic date determination possible through standard SAP setup? Awaiting your expert advice 🙂
Not this dynamism, but some dynamism is possible
Example - If Invoice date is between 1-15, then 15th of next month.. For 16-31, 30th of next month... Such dynamic determination is possible
For the case you have suggested, it wont support.. However, you can have 2 payment terms and write a plain substitution to substitute payment term based on posting date... I dont prefer to go for ABAP if Std solution is possible
No doubts the BTE is a good solution in the case you have suggested.
Br, Ajay M
Very good document.
Thanks Diwa 🙂
Thank you Vinod . for your addition of knowledge. appreciated
Thanks Sreehari 🙂
Thanks Vinod, its very informative document.
Thanks Ramesh 🙂
Thanks for your document. I don't whether it works in my case or not.
We have a requirement to take fixed Day as baseline Date. For Ex: 5th of every Month. After 5th any invoice (Until next 5th) should pick next month 5th as Baseline date. But in standard system it is picking Current month fixed date even after the date.
As we can code our own logic in BTE, this works fine. Get help from your ABAPer on how to code this logic.
Thanks for sharing, appreciate the hardwork.
Arvind Leo Pereira
Thanks Arvind 🙂
Just a question : In BSEG_SUBST there is no Baseline Date (ZFBDT) field ...
Have you an idea/workaround ?
I append structure with my field ZFBDT to BSEG_SUBST 😉
Thanks for this document.
Thanks for posting solution 🙂 . Didn't find time to check this 😐
Thanks for the valuable content.