Customer and Vendor ageing report by ItemGroup@%@#$%@#$??
Hi All
How do we get Customer and Vendor ageing report by "ItemGroup"?
I know there is a standard report in Business One which gives you the ageing report by Business Partner Group. But I dont know whether it is possible to get by "ItemGroup". Please help me and excuse me for weird requirement..
Thanks
Hi Gordon,
that query is actually designed for getting the purchase reports with all the excise and other tax related information per line item in the marketing document. my requirement is something different than this where the client wants to see the ageing report by Itemgroup.
Since ageing is based on the invoice due date it looks difficult to bifurcate the each individual line item, its group, its line total and their due date. means we should add all the open invoices' line items to be grouped with its total based on the due date. any other way to solve this?
thanks
Similar Messages
-
Customer (or Vendor) Ageing Report Problem
Dear Experts,
Firstly, Glad to be before you.
Here, we have developed tht ageing report for Customers and Vendors.In which the Partial payment line item (let us say A) against an Invoice (lets say X) is not being shown under the same age of Invoice Line Item.
For example:
Scenario 1)
Let me say that the Payment Terms 'Z001' under which the line Items fall due only after 30 days.
I have posted an invoice on 01.09.2011 with Rs. 20000
If we run the Ageing as on 16.12.2011, the output is projected as follows:
============================================Days in Arrears
0-20--20-4040-60--
60-80
Line Item X (Invoice)----
20000
Total Balance agewise:--000--
20000
Here for Invoice NO PROBLEM is being raised, as the Invoice Posting Date is taken as the Baseline Date from which the Ageing will be calculated based on Payment terms assigned to Customer in the master data.
But the Proble is when we do partial payment:
Scenario 2)
Let me Take the same example:
Let me say that the Payment Terms 'Z001' under which the line Items fall due only after 30 days.
I have posted an invoice on 01.09.2011 with Rs. 20000 (Due by 77 days as on 16.12.2011)
We have received payment of 8000 against the invoice, on 22.09.2011 (due by 55 days as on 16.12.2011)
now the Ageing report is ran on same 16.12.2011, for which the output is as follows:
============================================Days in Arrears
0-20--20-4040-60--
60-80
Line Item X (Invoice) -
20000
Line Item Y (Partial Pyment)----
(8000)
Total Balance agewise:--00(8000)--
20000
As per Technical logic whats happenning is correct. Because the Base Line date of the partial payment line Item is being picked from the posting date of the same. BUT NOW, THE REQUIREMENT IS AS FOLLOW:
The wants to see the related Partial payment items also in the same AGE in the report. i.e., we should make the system pick the Baseline date of the partial payment line item(Y) from the posting date(01.09.2011) of the other line item(X) i.e., from the Invoice(X) which is being partial cleared. Can you please suggest me a logic?
Ramana.GottipatiChange the base line date of partial payment document to 01.09.2011 after receiving payment.
Standard SAP will not automatically change the base line date of partial payment document to a back date and you develop with above logic
Or you need to change manually
Srinivas -
Profit Center wise & customer and vendor ageing balance
HI,
If anyone has developed the profit center ageing report for customer & vendor open items, then plz provide me the logic used. I need the same to implement for my customer.
Standard reports ( FBL1N/FBL5N or new GL reports) are not solving my purpose
Thanks:
GauravPCA wise Customer Aging: - Development
I also developed the same report with following logic and It is working till now.
1. Copy the Standard customer aging report S_ALR_87012176 and pass the same documents into FAGLFLEXTA and get the Profit Center.
PCA wise Open Items: - Standard
1. GO to FAGLL03 Report
2. Give all customer reconciliation accounts in GL Account Field in selection (including Spl GL Recon Accounts)
3. and Execute report, call Customer Code, and Profit Center Field in Layout (in standard layout, Customer Code available, name is not viable).
4. Short PCA and Customer wise, we will get PCA wise Open Items.
use the same logic for Vendor also.
Please check and revert if you need more clarity.
Regards,
Ganesh Lokam -
Customer / Vendor Aging Report
Hi,
It´s important to consider the next filter or selection criteria for the reports:
-. Customer and Vendor Aging Reports
Filters:
-. by Sales Employee (Customer Aging)
-. by Buyer (Vendor Aging)
regardsHello Humberto,
New selection criteria of Sales Employee/Buyer is part of enhancements of Aging Reports in SAP Business One 8.8 release.
When you generate the aging report in v8.8:
u2022 You can group the report by customer or sales employee in the customer receivables aging report, and by vendor or buyer in the vendor liabilities aging report.
u2022 You can specify more flexible time interval. For the time interval Days, 4 new fields are added for you to specify the duration.
u2022 You can hide the Future Remit column on the report by choosing Ignore Future Remit.
u2022 When the aging report has been generated, you can view multicustomer/multivendor detailed information in the aging report window. There is no need to double-click each customer/vendor row to view the details.
Peter Dominik
B1 Solution Management -
Customized Vendor Aging Report
Dear Experts,
We had developed a customized Vendor Aging Crystal Report as on Date for one of our customer which is similar to SAP's Vendor Liabilities Aging, just a minor change we have been done in our report for calculating the due date of AP Invoice only for the document type as Item, from AP Invoice document date to GRPO's posting date.
So to build this report we had consider following transactions AP Invoice, AP Credit Memo, AP Down Payment Invoice, Outgoing Payment, Incoming Payment & Journal Entry and also we had concluded following scenario's:-
AP Invoice based on GRPO
Standalone AP Invoice's Item / Service.
AP Invoice adjusted against AP Credit Memo.
AP Invoice knocked off against Reconciliation.
AP Credit Memo based on AP Invoice
AP Credit Memo standalone Item /Service
AP Credit Memo adjusted against Outgoing Payment
AP Credit Memo knocked off against Reconciliation
AP Down Payment Invoice - Open.
Outgoing Payment - On Account
Outgoing Payment - Against Transaction.
Outgoing Payment - Direct Knocked off in Reconciliation.
Incoming Payment - On Account
Incoming Payment - Direct Knocked off in Reconciliation.
Journal Entry - Adjusted and Unadjusted
After considering all the possible scenario which do have impact with Vendor has been covered but still our report gets failed to tally with SAP Vendor Liabilities Aging Report on back dated date specially with reco happened transaction which get failed on comparison with Input parameter date against transaction date and reconciled date.
Please refer the attachment contains Store Procedure of this report. We would highly appreciate and thankful if some one could help us in optimizing our store procedure which could get tallied with SAP Vendor Liabilities Aging Report.
Many Thanks in Advance......
Regards
Krishna KumarHi,
Not able to open attached file. Please check these threads:
Vendor Aging Report SAP B1
Customer Receivables Aging - Query
Thanks & Regards,
Nagarajan -
Vendor aging report ,customer aging report
hi to all
can u pls what is vendor aging report . what is the purpose of it . can u pls some theoritical description
i will definitely reward points pls its urgent pls tell if there r any standard reports exists for theese . pls give some custom reports on theese with coding.
and for customer aging also
pls.................Hi,
Check the Vendor against report code:
REPORT zvender_os NO STANDARD PAGE HEADING
LINE-SIZE 132
LINE-COUNT 65.
Tables
TABLES: bsik, "open items (A/C: Secondary Index for Customers)
lfa1, "customer master
lfb1,
rf140, "temp stru (Work Fields for Corrence(SAPF140*))
bsak, "cleared items (A/c Secnd Index for Cust(Clrms))
skat.
constants and variables
TYPE-POOLS: slis.
DATA: fieldcat TYPE slis_t_fieldcat_alv,
fieldcat1 TYPE slis_t_fieldcat_alv,
fieldcat_ln TYPE slis_fieldcat_alv,
layout_in TYPE slis_layout_alv,
layout_in1 TYPE slis_layout_alv,
sortcat TYPE slis_t_sortinfo_alv,
sortcat1 TYPE slis_t_sortinfo_alv,
sortcat_ln LIKE LINE OF sortcat,
eventcat1 TYPE slis_t_event,
eventcat TYPE slis_t_event,
eventcat_ln LIKE LINE OF eventcat,
col_pos TYPE i.
DATA: targ_month(2) TYPE n, "0001
targ_year(4) TYPE n, "0001
targ_mth_abs TYPE p, "0001
doc_month(2) TYPE n, "0001
doc_year(4) TYPE n, "0001
doc_mth_abs TYPE p, "0001
mth_result TYPE p, "0001
doc_days TYPE p,
targ_days TYPE p,
addl_days TYPE p,
ext_days TYPE p,
v_days(3) TYPE c,
v_kkber LIKE knkk-kkber.
DATA:
BEGIN OF inrec OCCURS 1000, "0001
lifnr LIKE bsik-lifnr,
belnr LIKE bsik-belnr,
gjahr LIKE bsik-gjahr,
bldat LIKE bsik-bldat,
xblnr LIKE bsik-xblnr,
blart LIKE bsik-blart,
sgtxt LIKE bsik-sgtxt,
shkzg LIKE bsik-shkzg,
dmbtr LIKE bsik-dmbtr,
zfbdt LIKE bsik-zfbdt,
zbd1t LIKE bsik-zbd1t,
zbd2t LIKE bsik-zbd2t,
zbd3t LIKE bsik-zbd3t,
zuonr LIKE bsik-zuonr,
END OF inrec.
DATA:
BEGIN OF inrect OCCURS 1000, "0001
lifnr LIKE bsik-lifnr,
belnr LIKE bsik-belnr,
gjahr LIKE bsik-gjahr,
bldat LIKE bsik-bldat,
xblnr LIKE bsik-xblnr,
blart LIKE bsik-blart,
sgtxt LIKE bsik-sgtxt,
shkzg LIKE bsik-shkzg,
dmbtr LIKE bsik-dmbtr,
zfbdt LIKE bsik-zfbdt,
zbd1t LIKE bsik-zbd1t,
zbd2t LIKE bsik-zbd2t,
zbd3t LIKE bsik-zbd3t,
zuonr LIKE bsik-zuonr,
END OF inrect,
BEGIN OF t_item OCCURS 1000, " 0001
lifnr LIKE bsik-lifnr,
belnr LIKE bsik-belnr,
gjahr LIKE bsik-gjahr,
bldat LIKE bsik-bldat,
xblnr LIKE bsik-xblnr,
blart LIKE bsik-blart,
sgtxt LIKE bsik-sgtxt,
zfbdt LIKE bsik-zfbdt,
dmbtr LIKE bsik-dmbtr,
days(3) TYPE c,
zuonr LIKE bsik-zuonr,
END OF t_item,
t_line LIKE t_item OCCURS 1000 WITH HEADER LINE, " 0001
BEGIN OF itab OCCURS 1000,
lifnr LIKE lfa1-lifnr,
total LIKE bsik-dmbtr,
zfuture LIKE bsik-dmbtr,
zcurrent LIKE bsik-dmbtr,
crbal LIKE bsik-dmbtr,
30days LIKE bsik-dmbtr,
60days LIKE bsik-dmbtr,
90days LIKE bsik-dmbtr,
99days LIKE bsik-dmbtr,
120days LIKE bsik-dmbtr,
180days LIKE bsik-dmbtr,
365days LIKE bsik-dmbtr,
bzirk LIKE knvv-bzirk,
vkbur LIKE knvv-vkbur,
vwerk LIKE knvv-vwerk,
vkgrp LIKE knvv-vkgrp,
klimk LIKE knkk-klimk,
cashd LIKE knkk-cashd,
grupp LIKE knkk-grupp,
erdat LIKE lfa1-erdat,
name1 LIKE lfa1-name1,
name2 LIKE lfa1-name2,
stras LIKE lfa1-stras,
ort01 LIKE lfa1-ort01,
telf1 LIKE lfa1-telf1,
psort(10),
sperr LIKE lfa1-sperr,
totsal LIKE bsik-dmbtr,
txt50 LIKE skat-txt50,
gsber LIKE bsik-gsber,
END OF itab.
DATA: sel_tab TYPE TABLE OF rsparams WITH HEADER LINE,
p_debit(1) TYPE c,
p_credit(1) TYPE c.
DATA: t_variant LIKE disvariant OCCURS 0 WITH HEADER LINE.
parameters and select-options
SELECTION-SCREEN BEGIN OF BLOCK blck0 WITH FRAME TITLE text-002.
PARAMETERS: stida LIKE sy-datum DEFAULT sy-datum OBLIGATORY,
p_bukrs LIKE t001-bukrs DEFAULT 'PIIL' MEMORY ID buk
OBLIGATORY.
P_BUKRS LIKE T001-BUKRS DEFAULT 'CC01' OBLIGATORY. "0003
SELECT-OPTIONS: s_lifnr FOR bsik-lifnr ,
s_vkbur FOR knvv-vkbur,
s_vkgrp FOR knvv-vkgrp,
s_bzirk FOR knvv-bzirk,
s_konda FOR knvv-konda,
s_kdgrp FOR knvv-kdgrp NO-DISPLAY ,
s_kvgr2 FOR knvv-kvgr2 NO-DISPLAY ,
s_kkber FOR knkk-kkber NO-DISPLAY ,
s_grupp FOR knkk-grupp NO-DISPLAY ,
s_ctlpc FOR knkk-ctlpc,
s_akont FOR lfb1-akont,
s_gsber FOR bsik-gsber.
PARAMETERS: p_future AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK blck0.
SELECTION-SCREEN BEGIN OF BLOCK blck1 WITH FRAME TITLE text-002.
PARAMETERS: p_abs RADIOBUTTON GROUP zrad,
p_due RADIOBUTTON GROUP zrad DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK blck1.
*SELECTION-SCREEN BEGIN OF BLOCK blck2 WITH FRAME TITLE text-003.
*PARAMETERS: c_run RADIOBUTTON GROUP zrac DEFAULT 'X',
c_blk RADIOBUTTON GROUP zrac,
c_all RADIOBUTTON GROUP zrac.
*SELECTION-SCREEN END OF BLOCK blck2.
*SELECTION-SCREEN BEGIN OF BLOCK blck3 WITH FRAME TITLE text-004.
*PARAMETERS: p_debit AS CHECKBOX DEFAULT 'X' ,
p_credit AS CHECKBOX DEFAULT 'X' NO-DISPLAY,
*selection-screen end of block blck3.
start-of-selection.
START-OF-SELECTION.
PERFORM BUILD_EVENTCAT.
p_debit = 'X'.
p_credit = 'X'.
PERFORM get_customer_invoices.
filter records based on selection criteria
PERFORM filter_records.
END-OF-SELECTION.
PERFORM add_sort_field.
PERFORM modify_field.
PERFORM write_report.
*& Form FILTER_RECORDS
To collect all the required data from DB and store them in
internal table.
--> p1 text
<-- p2 text
FORM filter_records.
delete records based on selection criteria
LOOP AT itab.
SELECT vkbur vkgrp vwerk erdat konda kdgrp bzirk kvgr2
INTO (itab-vkbur, itab-vkgrp, itab-vwerk, knvv-erdat,
knvv-konda, knvv-kdgrp,itab-bzirk,knvv-kvgr2)
FROM knvv WHERE lifnr = itab-lifnr
ORDER BY erdat DESCENDING.
AKS :- Not Required for PI
CASE itab-vkbur.
WHEN 'SA1'.
itab-vkbur = 'SF25'.
WHEN 'QLD1'.
itab-vkbur = 'SF23'.
WHEN 'WA1'.
itab-vkbur = 'SF26'.
ENDCASE.
AKS.
EXIT.
ENDSELECT.
IF itab-vkbur IN s_vkbur AND
itab-vkgrp IN s_vkgrp AND
knvv-konda IN s_konda AND
knvv-kdgrp IN s_kdgrp AND
itab-bzirk IN s_bzirk AND
knvv-kvgr2 IN s_kvgr2.
ELSE.
DELETE itab.
CONTINUE.
ENDIF.
SELECT SINGLE klimk grupp cashd
INTO (itab-klimk, itab-grupp, itab-cashd)
FROM knkk WHERE lifnr = itab-lifnr
AND kkber IN s_kkber
AND ctlpc IN s_ctlpc
AND grupp IN s_grupp.
IF SY-SUBRC NE 0.
DELETE ITAB.
CONTINUE.
ENDIF.
SELECT SINGLE skat~txt50
INTO (itab-txt50)
FROM lfb1 INNER JOIN skat
ON lfb1akont EQ skatsaknr
WHERE lfb1~lifnr = itab-lifnr
AND lfb1~akont IN s_akont
AND skat~spras EQ 'EN'.
IF sy-subrc NE 0.
DELETE itab.
CONTINUE.
ENDIF.
SELECT SINGLE name1 name2 telf1 erdat stras ort01 sperr
INTO (itab-name1, itab-name2, itab-telf1,
itab-erdat, itab-stras, itab-ort01, itab-sperr )
FROM lfa1
WHERE lifnr = itab-lifnr
IF sy-subrc NE 0 .
DELETE itab.
CONTINUE.
ENDIF.
AKS For Filteration of Customer base on Block Area.
IF c_all NE 'X'.
IF c_run EQ 'X' AND itab-sperr EQ 'X'.
DELETE itab.
CONTINUE.
ELSE.
IF c_blk EQ 'X' AND itab-sperr NE 'X'.
DELETE itab.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
MODIFY itab.
ENDLOOP.
ENDFORM. " FILTER_RECORDS
*& Form GET_CUSTOMER_INVOICES
text
--> p1 text
<-- p2 text
FORM get_customer_invoices.
DATA:ztotcre LIKE bsik-dmbtr.
DATA:ztotsal LIKE bsik-dmbtr.
DATA: fsdate LIKE sy-datum.
DATA: l_perio(4) TYPE c.
MOVE stida TO rf140-stida.
MOVE rf140-stida+4(2) TO targ_month.
MOVE rf140-stida+0(4) TO targ_year.
MOVE rf140-stida+6(2) TO targ_days.
targ_mth_abs = ( targ_year * 12 ) + targ_month.
CALL FUNCTION 'ZGET_PERIOD_FROM_DATE'
EXPORTING
i_date = stida
IMPORTING
e_perio = l_perio.
CONCATENATE l_perio '0401' INTO fsdate.
select open items.
IF p_due EQ 'X'.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt " 0001
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsik INTO TABLE inrect
WHERE bukrs = p_bukrs
AND budat LE stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
AND umskz NE 'T'
AND umskz NE 'F'
AND umskz NE 'R'
AND umskz NE 'P'
AND umskz NE 'J'
AND umskz NE 'L'.
LOOP AT INREC.
IF INREC-SHKZG = 'H'.
INREC-DMBTR = INREC-DMBTR * -1.
ENDIF.
MOVE-CORRESPONDING INREC TO T_ITEM. " 0001
PERFORM COLLECT_INVOICE USING INREC-lifnr INREC-DMBTR
INREC-ZFBDT INREC-ZBD1T
INREC-ZBD2T INREC-ZBD3T.
APPEND T_ITEM.
CLEAR T_ITEM.
ENDLOOP.
LOOP AT inrect.
inrec-lifnr = inrect-lifnr.
inrec-belnr = inrect-belnr.
inrec-gjahr = inrect-gjahr.
inrec-bldat = inrect-bldat.
inrec-xblnr = inrect-xblnr.
inrec-blart = inrect-blart.
inrec-sgtxt = inrect-sgtxt.
inrec-shkzg = inrect-shkzg.
inrec-dmbtr = inrect-dmbtr.
CALL FUNCTION 'NJ_CAL_DATE_IN_INTERVAL'
EXPORTING
date = inrect-zfbdt
days = inrect-zbd1t
months = 00
signum = '+'
years = 00
IMPORTING
calc_date = inrec-zfbdt.
inrec-zbd1t = inrect-zbd1t.
inrec-zbd2t = inrect-zbd2t.
inrec-zbd3t = inrect-zbd3t.
inrec-zuonr = inrect-zuonr.
APPEND inrec.
CLEAR inrec.
ENDLOOP.
ELSE.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt " 0001
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsik INTO TABLE inrec
WHERE bukrs = p_bukrs
AND budat LE stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
AND umskz NE 'T'
AND umskz NE 'F'
AND umskz NE 'R'
AND umskz NE 'P'
AND umskz NE 'J'
AND umskz NE 'L'.
ENDIF.
SORT inrec BY lifnr shkzg zfbdt .
LOOP AT inrec.
AT NEW lifnr.
For Customers Credit Balance Transaction to be display in Report
End of Credit Balance
ztotcre = 0.
ztotsal = 0.
ENDAT.
IF inrec-shkzg = 'H'.
inrec-dmbtr = inrec-dmbtr * -1.
ztotcre = ztotcre + inrec-dmbtr.
ELSE.
IF inrec-blart = 'RV'.
IF inrec-bldat GE fsdate.
ztotsal = ztotsal + inrec-dmbtr.
ENDIF.
ENDIF.
ztotcre = ztotcre + inrec-dmbtr.
endif.
IF p_debit EQ 'X'.
IF ztotcre > 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
ENDIF.
ENDIF.
ENDIF.
IF p_credit EQ 'X'.
AT END OF lifnr.
IF ztotcre < 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
APPEND t_item.
CLEAR t_item.
ENDIF.
ENDAT.
ENDIF.
ENDLOOP.
select cleared items
IF p_due EQ 'X'.
REFRESH inrect. CLEAR inrect.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsak INTO TABLE inrect
WHERE bukrs = p_bukrs
AND budat LE stida
AND augdt > stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
REFRESH inrec. CLEAR inrec.
LOOP AT inrect.
inrec-lifnr = inrect-lifnr.
inrec-belnr = inrect-belnr.
inrec-gjahr = inrect-gjahr.
inrec-bldat = inrect-bldat.
inrec-xblnr = inrect-xblnr.
inrec-blart = inrect-blart.
inrec-sgtxt = inrect-sgtxt.
inrec-shkzg = inrect-shkzg.
inrec-dmbtr = inrect-dmbtr.
CALL FUNCTION 'NJ_CAL_DATE_IN_INTERVAL'
EXPORTING
date = inrect-zfbdt
days = inrect-zbd1t
months = 00
signum = '+'
years = 00
IMPORTING
calc_date = inrec-zfbdt.
inrec-zbd1t = inrect-zbd1t.
inrec-zbd2t = inrect-zbd2t.
inrec-zbd3t = inrect-zbd3t.
inrec-zuonr = inrect-zuonr.
APPEND inrec.
CLEAR inrec.
ENDLOOP.
ELSE.
REFRESH inrec. CLEAR inrec.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsak INTO TABLE inrec
WHERE bukrs = p_bukrs
AND budat LE stida
AND augdt > stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
ENDIF.
SORT inrec BY lifnr shkzg zfbdt .
LOOP AT inrec.
AT NEW lifnr.
ztotcre = 0.
ztotsal = 0.
ENDAT.
IF inrec-shkzg = 'H'.
inrec-dmbtr = inrec-dmbtr * -1.
ztotcre = ztotcre + inrec-dmbtr.
ELSE.
IF inrec-blart = 'RV'.
IF inrec-bldat GE fsdate.
ztotsal = ztotsal + inrec-dmbtr.
ENDIF.
ENDIF.
ztotcre = ztotcre + inrec-dmbtr.
endif.
IF p_debit EQ 'X'.
IF ztotcre > 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
ENDIF.
ENDIF.
ENDIF.
IF p_credit EQ 'X'.
AT END OF lifnr.
IF ztotcre < 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
APPEND t_item.
CLEAR t_item.
ENDIF.
ENDAT. " 0001
ENDIF.
ENDLOOP.
ENDFORM. " GET_CUSTOMER_INVOICES
*& Form COLLECT_INVOICE
text
-->P_bsik_lifnr text
-->P_bsik_DMBTR text
-->P_bsik_ZFBDT text
-->P_bsik_ZFBDT1 text
-->P_bsik_ZFBDT2 text
-->P_bsik_ZFBDT3 text
FORM collect_invoice USING pp_lifnr
pp_dmbtr
pp_zfbdt
pp_zbd1t
pp_zbd2t
pp_zbd3t
pp_ztotsal.
doc_month = pp_zfbdt+4(2).
doc_year = pp_zfbdt+0(4).
doc_mth_abs = ( doc_year * 12 ) + doc_month.
mth_result = ( targ_mth_abs - doc_mth_abs ).
logic given by Mr. Ashok Singhvi
doc_days = pp_zfbdt+6(2).
addl_days = ( doc_days - targ_days ).
IF addl_days <= 0.
ADD 1 TO mth_result.
ENDIF.
IF NOT pp_zbd3t IS INITIAL.
MOVE pp_zbd3t TO ext_days.
ELSEIF NOT pp_zbd2t IS INITIAL.
MOVE pp_zbd2t TO ext_days.
ELSEIF NOT pp_zbd1t IS INITIAL.
MOVE pp_zbd1t TO ext_days.
ELSE.
CLEAR ext_days.
ENDIF.
CHECK with Andrew whether this is working or not
if extended payment terms exist, subtract no of mths from mth_result
IF NOT ext_days IS INITIAL.
CASE ext_days.
WHEN 30.
SUBTRACT 1 FROM mth_result.
WHEN 60.
SUBTRACT 2 FROM mth_result.
WHEN 90.
SUBTRACT 3 FROM mth_result.
WHEN 120.
SUBTRACT 4 FROM mth_result.
ENDCASE.
ENDIF.
change to key date
IF pp_dmbtr > 0.
IF p_future = 'X'. " 0001
IF mth_result <= 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ELSE.
IF mth_result < 0.
itab-zfuture = pp_dmbtr.
t_item-days = 'FUT'.
ELSEIF mth_result = 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ENDIF. " 0001
itab-crbal = 0.
itab-total = pp_dmbtr.
ELSE.
IF p_future = 'X'. " 0001
IF mth_result <= 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ELSE.
IF mth_result < 0.
itab-zfuture = pp_dmbtr.
t_item-days = 'FUT'.
ELSEIF mth_result = 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ENDIF. " 0001
itab-total = pp_dmbtr.
itab-crbal = 0.
ENDIF.
itab-lifnr = pp_lifnr.
itab-totsal = pp_ztotsal.
COLLECT itab.
CLEAR itab.
ENDFORM. " COLLECT_INVOICE
*& Form ADD_SORT_FIELD
text
--> p1 text
<-- p2 text
FORM add_sort_field.
DATA: l_amount(9) TYPE n.
IF p_future = 'X'.
LOOP AT itab.
l_amount = 999999999.
IF itab-365days > 0.
l_amount = l_amount - itab-365days.
CONCATENATE 'A' l_amount INTO itab-psort.
ELSEIF itab-180days > 0.
l_amount = l_amount - itab-180days.
CONCATENATE 'B' l_amount INTO itab-psort.
ELSEIF itab-120days > 0.
l_amount = l_amount - itab-120days.
CONCATENATE 'C' l_amount INTO itab-psort.
ELSEIF itab-99days > 0.
l_amount = l_amount - itab-99days.
CONCATENATE 'D' l_amount INTO itab-psort.
ELSEIF itab-90days > 0.
l_amount = l_amount - itab-90days.
CONCATENATE 'E' l_amount INTO itab-psort.
ELSEIF itab-60days > 0.
l_amount = l_amount - itab-60days.
CONCATENATE 'F' l_amount INTO itab-psort.
ELSEIF itab-30days > 0.
l_amount = l_amount - itab-30days.
CONCATENATE 'G' l_amount INTO itab-psort.
ELSEIF itab-zcurrent > 0.
l_amount = l_amount - itab-zcurrent.
CONCATENATE 'H' l_amount INTO itab-psort.
ELSEif itab-zfuture > 0.
L_AMOUNT = L_AMOUNT - ITAB-zfuture.
CONCATENATE 'F' L_AMOUNT INTO ITAB-PSORT.
ELSE.
l_amount = ABS( itab-total ).
CONCATENATE 'I' l_amount INTO itab-psort.
ENDIF.
MODIFY itab.
ENDLOOP.
ELSE.
LOOP AT itab.
l_amount = 999999999.
IF itab-365days > 0.
l_amount = l_amount - itab-365days.
CONCATENATE 'A' l_amount INTO itab-psort.
ELSEIF itab-180days > 0.
l_amount = l_amount - itab-180days.
CONCATENATE 'B' l_amount INTO itab-psort.
ELSEIF itab-120days > 0.
l_amount = l_amount - itab-120days.
CONCATENATE 'C' l_amount INTO itab-psort.
ELSEIF itab-99days > 0.
l_amount = l_amount - itab-99days.
CONCATENATE 'D' l_amount INTO itab-psort.
ELSEIF itab-90days > 0.
l_amount = l_amount - itab-90days.
CONCATENATE 'E' l_amount INTO itab-psort.
ELSEIF itab-60days > 0.
l_amount = l_amount - itab-60days.
CONCATENATE 'F' l_amount INTO itab-psort.
ELSEIF itab-30days > 0.
l_amount = l_amount - itab-30days.
CONCATENATE 'G' l_amount INTO itab-psort.
ELSEIF itab-zcurrent > 0.
l_amount = l_amount - itab-zcurrent.
CONCATENATE 'H' l_amount INTO itab-psort.
ELSEIF itab-zfuture > 0.
l_amount = l_amount - itab-zfuture.
CONCATENATE 'I' l_amount INTO itab-psort.
ELSE.
l_amount = ABS( itab-total ).
CONCATENATE 'J' l_amount INTO itab-psort.
ENDIF.
MODIFY itab.
ENDLOOP.
ENDIF.
ENDFORM. " ADD_SORT_FIELD
*& Form WRITE_REPORT
text
--> p1 text
<-- p2 text
FORM write_report.
PERFORM build_fieldcat.
PERFORM build_sortcat.
PERFORM build_eventcat.
PERFORM build_layout.
PERFORM start_list_viewer.
ENDFORM. " WRITE_REPORT
*& Form BUILD_FIELDCAT
text
--> p1 text
<-- p2 text
FORM build_fieldcat.
lifnr
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'lfa1'.
fieldcat_ln-fieldname = 'LIFNR'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
APPEND fieldcat_ln TO fieldcat.
Name1
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'lfa1'.
fieldcat_ln-fieldname = 'NAME1'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-seltext_l = 'Name'.
APPEND fieldcat_ln TO fieldcat.
City Details
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'lfa1'.
fieldcat_ln-fieldname = 'ORT01'.
fieldcat_ln-seltext_l = 'City'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
Credit Limit
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNKK'.
fieldcat_ln-fieldname = 'KLIMK'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-emphasize = 'C41'.
APPEND fieldcat_ln TO fieldcat.
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'CRBAL'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-seltext_l = 'Cr. Bal.'.
fieldcat_ln-seltext_m = 'Cr. Bal.'.
fieldcat_ln-seltext_s = 'Cr. Bal.'.
APPEND fieldcat_ln TO fieldcat.
Total Amount
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-fieldname = 'TOTAL'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-seltext_l = 'Out.St.Amt.'.
fieldcat_ln-seltext_m = 'Out.St.Amt.'.
fieldcat_ln-seltext_s = 'Out.St.Amt.'.
fieldcat_ln-ref_tabname = 'zbsik'.
fieldcat_ln-ref_fieldname = 'ZDMBTR'.
APPEND fieldcat_ln TO fieldcat.
IF p_future NE 'X'.
Future
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'ZFUTURE'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = 'Future Due'.
fieldcat_ln-seltext_m = 'Future Due'.
fieldcat_ln-seltext_s = 'Future Due'.
APPEND fieldcat_ln TO fieldcat.
ENDIF.
Current
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'ZCURRENT'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = 'Normal Due'.
fieldcat_ln-seltext_m = 'Normal Due'.
fieldcat_ln-seltext_s = 'Normal Due'.
APPEND fieldcat_ln TO fieldcat.
30 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '30DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '0-30 Days'.
fieldcat_ln-seltext_m = '0-30 Days'.
fieldcat_ln-seltext_s = '0-30 Days'.
APPEND fieldcat_ln TO fieldcat.
60 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '60DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '31-60 Days'.
fieldcat_ln-seltext_m = '31-60 Days'.
fieldcat_ln-seltext_s = '31-60 Days'.
APPEND fieldcat_ln TO fieldcat.
90 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '90DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '61-90 Days'.
fieldcat_ln-seltext_m = '61-90 Days'.
fieldcat_ln-seltext_s = '61-90 Days'.
APPEND fieldcat_ln TO fieldcat.
99 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '99DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '91-120 Days'.
fieldcat_ln-seltext_m = '91-120 Days'.
fieldcat_ln-seltext_s = '91-120 Days'.
APPEND fieldcat_ln TO fieldcat.
*120Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '120DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '121-180 Days'.
fieldcat_ln-seltext_m = '121-180 Days'.
fieldcat_ln-seltext_s = '121-180 Days'.
APPEND fieldcat_ln TO fieldcat.
*180 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '180DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '181-365 Days'.
fieldcat_ln-seltext_m = '181-365 Days'.
fieldcat_ln-seltext_s = '181-365 Days'.
APPEND fieldcat_ln TO fieldcat.
*365 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '365DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '>365 Days'.
fieldcat_ln-seltext_m = '>365 Days'.
fieldcat_ln-seltext_s = '>365 Days'.
APPEND fieldcat_ln TO fieldcat.
Last Payment Date
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNKK'.
fieldcat_ln-fieldname = 'CASHD'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
Street Name
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'lfa1'.
FIELDCAT_LN-FIELDNAME = 'STRAS'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
Telephone
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'lfa1'.
FIELDCAT_LN-FIELDNAME = 'TELF1'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
Credit Group
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'KNKK'.
FIELDCAT_LN-FIELDNAME = 'GRUPP'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
*Sales District
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNVV'.
fieldcat_ln-fieldname = 'BZIRK'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-seltext_l = 'S_Distt'.
fieldcat_ln-seltext_m = 'S_Distt'.
fieldcat_ln-seltext_s = 'S_Distt'.
APPEND fieldcat_ln TO fieldcat.
Sales Office
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNVV'.
fieldcat_ln-fieldname = 'VKBUR'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-seltext_l = 'S_Off'.
fieldcat_ln-seltext_m = 'S_Off'.
fieldcat_ln-seltext_s = 'S_Off'.
APPEND fieldcat_ln TO fieldcat.
Cust Creat Date
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'lfa1'.
FIELDCAT_LN-FIELDNAME = 'ERDAT'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
Del Plant
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNVV'.
fieldcat_ln-fieldname = 'VWERK'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
Sales Group
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNVV'.
fieldcat_ln-fieldname = 'VKGRP'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
Sort Criteria
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'lifnr'.
fieldcat_ln-fieldname = 'PSORT'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-seltext_l = 'Sort Field'.
fieldcat_ln-seltext_m = 'Sort Field'.
fieldcat_ln-seltext_s = 'Sort Field'.
APPEND fieldcat_ln TO fieldcat.
Sales of Customer
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'TOTSAL'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = 'Total Sales'.
fieldcat_ln-seltext_m = 'Total Sales'.
fieldcat_ln-seltext_s = 'Total Sales'.
APPEND fieldcat_ln TO fieldcat.
ENDFORM. " BUILD_FIELDCAT
*& Form BUILD_SORTCAT
text
--> p1 text
<-- p2 text
FORM build_sortcat.
SORTCAT_LN-SPOS = '1'.
sortcat_ln-spos = '2'. " 0001
sortcat_ln-fieldname = 'PSORT'.
sortcat_ln-up = 'X'. " 0001
sortcat_ln-subtot = 'X'.
APPEND sortcat_ln TO sortcat.
CLEAR sortcat_ln.
SORTCAT_LN-SPOS = '2'.
SORTCAT_LN-FIELDNAME = 'lifnr'.
sortcat_ln-spos = '1'. " 0001
sortcat_ln-fieldname = 'NAME1'. " 0001
sortcat_ln-up = 'X'.
APPEND sortcat_ln TO sortcat.
ENDFORM. " BUILD_SORTCAT
*& Form BUILD_EVENTCAT
text
--> p1 text
<-- p2 text
FORM build_eventcat.
eventcat_ln-name = 'TOP_OF_PAGE'.
eventcat_ln-form = 'PAGE_HEADER'.
APPEND eventcat_ln TO eventcat.
ENDFORM. " BUILD_EVENTCAT
*& Form BUILD_LAYOUT
text
--> p1 text
<-- p2 text
FORM build_layout.
layout_in-colwidth_optimize = 'X'.
layout_in-no_hotspot = 'X'.
layout_in-zebra = 'X'.
layout_in-get_selinfos = 'X'.
ENDFORM. " BUILD_LAYOUT
*& Form START_LIST_VIEWER
text
--> p1 text
<-- p2 text
FORM start_list_viewer.
DATA: pgm LIKE sy-repid.
pgm = sy-repid.
if t_variant[] is initial.
t_variant-report = pgm.
t_variant-variant = '/ATB'.
t_variant-TEXT = '/ATB'.
t_variant-DEPENDVARS = 'S'.
append t_variant.
clear t_variant.
endif.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = pgm
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = fieldcat
it_sort = sortcat
is_layout = layout_in
i_save = 'A'
IS_VARIANT = t_variant
it_events = eventcat
TABLES
t_outtab = itab
EXCEPTIONS
OTHERS = 2.
ENDFORM. " START_LIST_VIEWER
FORM user_command USING ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
DATA l_lifnr(10) TYPE n.
READ TABLE itab INDEX selfield-tabindex.
CHECK sy-subrc = 0.
CASE ucomm.
WHEN '&IC1'.
CASE selfield-sel_tab_field.
WHEN 'ITAB-LIFNR'.
SET PARAMETER ID 'LIF' FIELD itab-lifnr.
SET PARAMETER ID 'BUK' FIELD p_bukrs.
IF itab-lifnr CO '0123456789 '.
l_lifnr = itab-lifnr.
itab-lifnr = l_lifnr.
ENDIF.
SELECT SINGLE kkber INTO knkk-kkber
FROM knkk WHERE lifnr = itab-lifnr.
IF sy-subrc EQ 0.
v_kkber = knkk-kkber.
ELSE.
CLEAR v_kkber.
ENDIF.
REFRESH sel_tab[].
MOVE: 'lifnr' TO sel_tab-selname,
'P' TO sel_tab-kind, " PARAMETER
itab-lifnr TO sel_tab-low.
APPEND sel_tab.
CLEAR sel_tab.
MOVE: 'KKBER' TO sel_tab-selname,
'P' TO sel_tab-kind, " PARAMETER
v_kkber TO sel_tab-low.
APPEND sel_tab.
CLEAR sel_tab.
SUBMIT rfdkli41
USING SELECTION-SET 'VAR1'
WITH SELECTION-TABLE sel_tab
AND RETURN.
CALL TRANSACTION 'XK03' AND SKIP FIRST SCREEN.
WHEN 'ITAB-ZCURRENT'. " 0001
v_days = 'CUR'.
PERFORM display_line_item_level.
WHEN 'ITAB-ZFUTURE'.
v_days = 'FUT'.
PERFORM display_line_item_level.
WHEN 'ITAB-30DAYS'.
v_days = '30D'.
PERFORM display_line_item_level.
WHEN 'ITAB-60DAYS'.
v_days = '60D'.
PERFORM display_line_item_level.
WHEN 'ITAB-90DAYS'.
v_days = '90D'.
PERFORM display_line_item_level.
WHEN 'ITAB-99DAYS'.
v_days = '99D'.
PERFORM display_line_item_level.
WHEN 'ITAB-120DAYS'.
v_days = '120D'.
PERFORM display_line_item_level.
WHEN 'ITAB-180DAYS'.
v_days = '180D'.
PERFORM display_line_item_level.
WHEN 'ITAB-365DAYS'.
v_days = '365D'.
PERFORM display_line_item_level.
WHEN 'ITAB-TOTAL'.
v_days = ' '.
PERFORM display_line_item_level. " 0001
ENDCASE.
ENDCASE.
ENDFORM. "USER_COMMAND
PAGE_HEADER
FORM page_header.
WRITE:/115 'Time:', sy-timlo.
WRITE: /115 'Date:', sy-datum.
WRITE: /52 'Customer Outstanding Agewise ', "0002
115 'Page:', sy-pagno.
SKIP.
IF p_abs EQ 'X'.
WRITE: /52 'Vendor Outstanding Agewise (Absolute Aging)',
115 'Page:', sy-pagno.
ELSE.
WRITE: /52 'Vendor Outstanding Agewise (Due Date Aging)',
115 'Page:', sy-pagno.
ENDIF.
SKIP.
ULINE /(132).
WRITE: /02 'Open Items as of:', stida.
IF NOT s_vkgrp[] IS INITIAL.
IF s_vkgrp-high IS INITIAL.
WRITE: 52 'Sales Group :',s_vkgrp-low.
ELSE.
WRITE: 52 'Sales Group :',s_vkgrp-low,'to',s_vkgrp-high.
ENDIF.
ELSE.
WRITE: 52 'Sales Group : All'.
ENDIF.
IF NOT s_grupp[] IS INITIAL.
IF s_grupp-high IS INITIAL.
WRITE: 107 'Credit group :',s_grupp-low.
ELSE.
WRITE: 107 'Credit group :',s_grupp-low,' to',s_grupp-high.
ENDIF.
ELSE.
WRITE: 107 'Credit Group : All'.
ENDIF.
WRITE: /02 'Comapany Code :', p_bukrs.
IF NOT s_konda[] IS INITIAL.
IF s_konda-high IS INITIAL.
WRITE: 52 'Price group :',s_konda-low.
ELSE.
WRITE: 52 'Price group :',s_konda-low,' to',s_konda-high.
ENDIF.
ELSE.
WRITE: 52 'Price Group : All'.
ENDIF.
IF NOT s_ctlpc[] IS INITIAL.
IF s_ctlpc-high IS INITIAL.
WRITE: 107 'Risk category:',s_ctlpc-low.
ELSE.
WRITE: 107 'Risk category:',s_ctlpc-low,' to',s_ctlpc-high.
ENDIF.
ELSE.
WRITE: 107 'Risk category: All'.
ENDIF.
IF NOT s_vkbur[] IS INITIAL.
IF s_vkbur-high IS INITIAL.
WRITE:/02 'Sales Office :',s_vkbur-low.
ELSE.
WRITE:/02 'Sales Office :',s_vkbur-low,' to',s_vkbur-high.
ENDIF.
ELSE.
WRITE:/02 'Sales Office : All'.
ENDIF.
IF NOT s_kdgrp[] IS INITIAL.
IF s_kdgrp-high IS INITIAL.
WRITE: 52 'Customer group :',s_kdgrp-low.
ELSE.
WRITE: 52 'Customer group :',s_kdgrp-low,' to',s_kdgrp-high.
ENDIF.
ELSE.
WRITE: 52 'Customer group : All'.
ENDIF.
IF NOT s_ktokd[] IS INITIAL.
IF s_ktokd-high IS INITIAL.
WRITE: 107 'Account Group:',s_ktokd-low.
ELSE.
WRITE: 107 'Account Group:',s_ktokd-low,' to',s_ktokd-high.
ENDIF.
ELSE.
WRITE: 107 'Account Group: All'.
ENDIF.
IF NOT s_lifnr[] IS INITIAL.
IF s_lifnr-high IS INITIAL.
WRITE: /02 'Vendor No :',s_lifnr-low.
ELSE.
WRITE: /02 'Vendor No :',s_lifnr-low,' to',s_lifnr-high.
ENDIF.
ELSE.
WRITE: /02 'Vendor No : All'.
ENDIF.
IF NOT s_kkber[] IS INITIAL.
IF s_kkber-high IS INITIAL.
WRITE: 52 'Credit Control Area:',s_kkber-low.
ELSE.
WRITE: 52 'Credit Control Area:',s_kkber-low,' to',s_kkber-high. -
Customer & Vendor Ageing Reports
Hi
Can you please tell how can i get vendor and customer ageing report, Ex.Open items from 10-20,21-30,31-40 so on...
where i can get the report?
Mammu.Hi,
Customer aging report -
S_ALR_87012168
S_ALR_87012176
S_ALR_87012197
S_ALR_87012178 (open item aging analysis)
vendor aging report -
S_ALR_87012085 - Vendor Payment History with OI Sorted List
S_ALR_87012078 - Due Date Analysis for Open Items
S_ALR_87012084 - Open Items - Vendor Due Date Forecast
hope this helps
regards,
radhika -
Enhancement request for VAT Report of Customer and Vendor.
Hello SAP Gurus,
Have enhancement request for adding new fields in existing VAT report of Customer and Vendor like user id, GL account etc.
As I am fresher, can you please help me that how I need to approach. Thanks for your support.
Regards,
SaleemHello Saleem,
Almost all fields required for VAT reporting are available in standard tax report
S_ALR_87012357 .
You have to configure the layout from the selection screen as below
regards
pb -
Report for Clearing between Customer and Vendor
Hello -
My client needs a report that will allow her to see customer and vendor items on one report, BUT grouped together.
I know that FBL1N and FBL5N allow for you to click vendor items, customer items but they don't group them together. What I mean by this is if you run FBL5N for a range of customers and click the vendors at the bottom on the selection screen, the report puts ALL of the customer items for the whole range first then ALL of the vendor items.
Is there anyway to sort these fields so that you see the customer and vendor that are related to eachother together even if you run this for a range of customers?
Thanks!
EmmasHiya,
Can you check if SAP Note 934329 applies in your case?
Cheers. -
Wht r the standard tables for vendor customer and sales order report/
Hi wht r the standard tables for vendor and customer reports and is how in normal we cannot use them for vendor reporting and etc ?
Hi
Customer is related to Sales Module
So for a customer we fetch the reports of Sales orders , Deliveries and Billing doc's
CUstomer and Vendor related tables with important fields:
KNA1: Customer Master-General(KUNNR,NAME1,LAND1)
KNB1: Customer Master(Company Code)(KUNNR,BUKRS,PERNR)
KNC1: Customer Master Data (Transaction Figures)(KUNNR,BUKRS,GJAHR)
KNVK: Customer Master Contact Partner(PARNR,KUNNR,NAME1)
KNVV: Customer Master sales data(KUNNR,VKORG,VTWEG,KDGRP)
KNBK: Customer Bank Details(KUNNR,BANKS,BANKL,BANKN)
KNVH: Customer Hierarchy (HITYP,KUNNR,VKORG,VTWEG,SPART)
KNVP: Customer Master Partner Functions(KUNNR,PARVW,KUNN2)
KNVS: Customer Shipment data(KUNNR,VSTEL,TRANS)
KNVI: Customer Tax data(KUNNR,ALAND,TATYP)
LFA1: Vendor Master-General (LIFNR,NAME1,ORT01)
LFB1: Vendor Master(Company Code)(LIFNR,BUKRS,PERNR)
LFC1: Vendor Master (Transaction Figures)(LIFNR,BUKRS,GJAHR)
Sales related Tables for a customer
VBAK: Sales Document(Header Data) (VBELN, KUNNR)
VBAP: Sales Document(Item Data) (VBELN,POSNR,MATNR,ARKTX,CHARG)
Enquiry, Quotation, Sales Order are differentiated based on Doc.
Type(VBTYP field) in VBAK,VBAP Tables( for Enquiry VBTYP = A,
for Quotation 'B' & for Order it is 'C'.)
LIKP: Delivery Table (Header Data)(VBELN,LFART,KUNNR,WADAT,INCO1)
LIPS: Delivery Table (Item Data)(VBELN,POSNR,WERKS,LGORT,MATNR,VGBEL)
(LIPS-VGBEL = VBAK-VBELN, LIPS-VGPOS = VBAP-POSNR)
VTTK: Shipment Table (Header Data)(TKNUM)
VTTP: Shipment Table (Item Data)( TKNUM,TPNUM,VBELN)
(VTTP-VBELN = LIKP-VBELN)
VTFA: Shipping Document Flow(TKNUM,VBELV,VBELN)
VTPA: Shipping Partners data(VBELN,PARVW,KUNNR,PERNR)
VTTS: Stages in Shipment(TKNUM,TSNUM,TSTYP)
VTSP: Transport Stage/Shipment Item Allocation(TKNUM,TSNUM,TPNUM)
VEKP: Handling Unit: Header(Packing)(VENUM,VSTEL)
VEPO: Handling Unit: Item (Packing)(VENUM,VEPOS,VBELN)
VBRK: Billing Table(Header Data)(VBELN,FKART,BELNR)
VBRP: Billing Table(Item Data)(VBELN,POSNR,FKIMG,NETWR,VGBEL,VGPOS)
(VBRP-AUBEL = VBAK-VBELN, VBRP-VGBEL = LIKP-VBELN)
Apart from these tables there are lot of other tables which starts with
V, but we use the following tables frequently.
VBUK: All Sales Documents status & Admn. Data(Header)(VBELN,VBTYP)
VBTYP= C(Sales Order) VBTYP=J(Delivery) VBTYP=M(Invoice)
VBUP: Sales Documents status & Admn. Data(Item)(VBELN,POSNR)
VBEP: Sales Doc. Schedule Lines Data(VBELN,POSNR,EDATU,WMENG)
VBKD: To get sales related Business data like Payment terms etc.(VBELN,ZTERM)
VBFA: sales document flow data(VBELV,VBELN,POSNV,VBTYP)
VBPA: Partner functions Data(VBELN,PARVW,KUNNR,LIFNR)
VEDA: Contract Data(VBELN,VPOSN)
VEDAPO: Contract Data(VBELN,VPOSN)
Vendor related MM tables
EBAN-- Pur.Reqn. Data (BANFN,BNFPO,BADAT,MATNR)
EBKN-- Purchase Requisition Account Assignment(BANFN,BNFPO,VBELN)
EINA- Purchase Info.Record (General Data)(INFNR,MATNR,LIFNR)
EINE-- Purchase Info.Record (Pur.Orgn Data )(INFNR,EKORG)
ELBK-- Vendor Evaluation Header Data(LIFNR,EKORG,KLASS)
EKKO-- Purchase Order Data (Header)(EBELN,BSTYP,BSART)
EKPO-- Purchase Order Data (Item)(EBELN,EBELP,MATNR)
RFQ and PO are differentiated by Doc Type(BSTYP)in EKKO table.
For RFQ it is A and for PO it is F.
MKPF-- GRN Data (Header) (EBELN,BLDAT,BUDAT,XBLNR,BKTXT)
MSEG-- GRN Data (Item)(MBLNR,BWART,LIFNR,MATNR,EBELN)
Apart from this there are lot of tables which begin with 'M'& 'E', but we
use the following very often.
EKBE--PO History Data (EBELN,EBELP,BELNR,BLDAT,MATNR,VGABE)
EKBZ--PO History with delivery Costs(EBELN,BELNR,LIFNR,XBLNR)
EKET--Schedule lines data of a PO (EBELN,EINDT,SLFDT)
EKES--Vendor Confirmations Data(EBELN,EBTYP,EINDT,XBLNR)
Reward points if useful
Regards
Anji -
Customer and vendor line item report FBL5N/FBL1N
Dear all,
Could you please let me know, whether there is any way that we can get cost center ans wbs element in customer and vendor line item report FBL1N/FBL5N.
REgards,
Suresh Patipati.Hi Suresh
Through BTE1650 you can fetch it . for this you have to do some development.
You can add additonal field to FBL*N reports with using BTE exit.
Regards
SAP student -
Hi All
i am trying to get a legitimate vendor Aging report from within SAP
The 2 reports that I am currently looking at are:
S_ALR_87012085 - Vendor Payment History with OI Sorted List
S_ALR_87012084 - Open Items - Vendor Due Date Forecast
But both these do not bring out the output the way i want it - and i tried changing the output control and it still doesnt bring out the report as i want it - I want a report like the S_ALR_87012178 for customers, with output control 1, 6 and a 0 - which gives me a logical list of the aged customers.
Is there one like this for vendors too? Any suggestions?
Thank you
RukshanaHi Ruksaana,
You can customize the vendor report to show the items overdue per vendor by using the following steps
1. Create a form using T Code - FKI4
In this form ( two-axis structure) provide the details for each column as per your Client requirement - Due from 0 - 30 days
etc. You can create a column (using formula method) at the end by adding the previous columns, this will give you total
amount of overdue items for each vendor
2. Create a report using T Code - FKI1
Based on the Form created in the above step. Make additional selections based on client requirements like document type,
company code, account type, currency etc. Execute the report.
The following link will give provides detail steps for the creation of the aforementioned form and report.
Re: AR aging report (summary by customer)
Hope this helps.
- Sadha. -
I need a code for VENDOR AGEING REPORT
plz help me i am in urgent need of source code of
VENDOR AGEING REPORT.
if any body help me regarding this above report i will be
great ful to him/her.
bcoz deadline is today.
i need ur urgent help, i treid very much but i failed,
so hope help from anybody there.REPORT zvender_os NO STANDARD PAGE HEADING
LINE-SIZE 132
LINE-COUNT 65.
Tables
TABLES: bsik, "open items (A/C: Secondary Index for Customers)
lfa1, "customer master
lfb1,
rf140, "temp stru (Work Fields for Corrence(SAPF140*))
bsak, "cleared items (A/c Secnd Index for Cust(Clrms))
skat.
constants and variables
TYPE-POOLS: slis.
DATA: fieldcat TYPE slis_t_fieldcat_alv,
fieldcat1 TYPE slis_t_fieldcat_alv,
fieldcat_ln TYPE slis_fieldcat_alv,
layout_in TYPE slis_layout_alv,
layout_in1 TYPE slis_layout_alv,
sortcat TYPE slis_t_sortinfo_alv,
sortcat1 TYPE slis_t_sortinfo_alv,
sortcat_ln LIKE LINE OF sortcat,
eventcat1 TYPE slis_t_event,
eventcat TYPE slis_t_event,
eventcat_ln LIKE LINE OF eventcat,
col_pos TYPE i.
DATA: targ_month(2) TYPE n, "0001
targ_year(4) TYPE n, "0001
targ_mth_abs TYPE p, "0001
doc_month(2) TYPE n, "0001
doc_year(4) TYPE n, "0001
doc_mth_abs TYPE p, "0001
mth_result TYPE p, "0001
doc_days TYPE p,
targ_days TYPE p,
addl_days TYPE p,
ext_days TYPE p,
v_days(3) TYPE c,
v_kkber LIKE knkk-kkber.
DATA:
BEGIN OF inrec OCCURS 1000, "0001
lifnr LIKE bsik-lifnr,
belnr LIKE bsik-belnr,
gjahr LIKE bsik-gjahr,
bldat LIKE bsik-bldat,
xblnr LIKE bsik-xblnr,
blart LIKE bsik-blart,
sgtxt LIKE bsik-sgtxt,
shkzg LIKE bsik-shkzg,
dmbtr LIKE bsik-dmbtr,
zfbdt LIKE bsik-zfbdt,
zbd1t LIKE bsik-zbd1t,
zbd2t LIKE bsik-zbd2t,
zbd3t LIKE bsik-zbd3t,
zuonr LIKE bsik-zuonr,
END OF inrec.
DATA:
BEGIN OF inrect OCCURS 1000, "0001
lifnr LIKE bsik-lifnr,
belnr LIKE bsik-belnr,
gjahr LIKE bsik-gjahr,
bldat LIKE bsik-bldat,
xblnr LIKE bsik-xblnr,
blart LIKE bsik-blart,
sgtxt LIKE bsik-sgtxt,
shkzg LIKE bsik-shkzg,
dmbtr LIKE bsik-dmbtr,
zfbdt LIKE bsik-zfbdt,
zbd1t LIKE bsik-zbd1t,
zbd2t LIKE bsik-zbd2t,
zbd3t LIKE bsik-zbd3t,
zuonr LIKE bsik-zuonr,
END OF inrect,
BEGIN OF t_item OCCURS 1000, " 0001
lifnr LIKE bsik-lifnr,
belnr LIKE bsik-belnr,
gjahr LIKE bsik-gjahr,
bldat LIKE bsik-bldat,
xblnr LIKE bsik-xblnr,
blart LIKE bsik-blart,
sgtxt LIKE bsik-sgtxt,
zfbdt LIKE bsik-zfbdt,
dmbtr LIKE bsik-dmbtr,
days(3) TYPE c,
zuonr LIKE bsik-zuonr,
END OF t_item,
t_line LIKE t_item OCCURS 1000 WITH HEADER LINE, " 0001
BEGIN OF itab OCCURS 1000,
lifnr LIKE lfa1-lifnr,
total LIKE bsik-dmbtr,
zfuture LIKE bsik-dmbtr,
zcurrent LIKE bsik-dmbtr,
crbal LIKE bsik-dmbtr,
30days LIKE bsik-dmbtr,
60days LIKE bsik-dmbtr,
90days LIKE bsik-dmbtr,
99days LIKE bsik-dmbtr,
120days LIKE bsik-dmbtr,
180days LIKE bsik-dmbtr,
365days LIKE bsik-dmbtr,
bzirk LIKE knvv-bzirk,
vkbur LIKE knvv-vkbur,
vwerk LIKE knvv-vwerk,
vkgrp LIKE knvv-vkgrp,
klimk LIKE knkk-klimk,
cashd LIKE knkk-cashd,
grupp LIKE knkk-grupp,
erdat LIKE lfa1-erdat,
name1 LIKE lfa1-name1,
name2 LIKE lfa1-name2,
stras LIKE lfa1-stras,
ort01 LIKE lfa1-ort01,
telf1 LIKE lfa1-telf1,
psort(10),
sperr LIKE lfa1-sperr,
totsal LIKE bsik-dmbtr,
txt50 LIKE skat-txt50,
gsber LIKE bsik-gsber,
END OF itab.
DATA: sel_tab TYPE TABLE OF rsparams WITH HEADER LINE,
p_debit(1) TYPE c,
p_credit(1) TYPE c.
DATA: t_variant LIKE disvariant OCCURS 0 WITH HEADER LINE.
parameters and select-options
SELECTION-SCREEN BEGIN OF BLOCK blck0 WITH FRAME TITLE text-002.
PARAMETERS: stida LIKE sy-datum DEFAULT sy-datum OBLIGATORY,
p_bukrs LIKE t001-bukrs DEFAULT 'PIIL' MEMORY ID buk
OBLIGATORY.
P_BUKRS LIKE T001-BUKRS DEFAULT 'CC01' OBLIGATORY. "0003
SELECT-OPTIONS: s_lifnr FOR bsik-lifnr ,
s_vkbur FOR knvv-vkbur,
s_vkgrp FOR knvv-vkgrp,
s_bzirk FOR knvv-bzirk,
s_konda FOR knvv-konda,
s_kdgrp FOR knvv-kdgrp NO-DISPLAY ,
s_kvgr2 FOR knvv-kvgr2 NO-DISPLAY ,
s_kkber FOR knkk-kkber NO-DISPLAY ,
s_grupp FOR knkk-grupp NO-DISPLAY ,
s_ctlpc FOR knkk-ctlpc,
s_akont FOR lfb1-akont,
s_gsber FOR bsik-gsber.
PARAMETERS: p_future AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK blck0.
SELECTION-SCREEN BEGIN OF BLOCK blck1 WITH FRAME TITLE text-002.
PARAMETERS: p_abs RADIOBUTTON GROUP zrad,
p_due RADIOBUTTON GROUP zrad DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK blck1.
*SELECTION-SCREEN BEGIN OF BLOCK blck2 WITH FRAME TITLE text-003.
*PARAMETERS: c_run RADIOBUTTON GROUP zrac DEFAULT 'X',
c_blk RADIOBUTTON GROUP zrac,
c_all RADIOBUTTON GROUP zrac.
*SELECTION-SCREEN END OF BLOCK blck2.
*SELECTION-SCREEN BEGIN OF BLOCK blck3 WITH FRAME TITLE text-004.
*PARAMETERS: p_debit AS CHECKBOX DEFAULT 'X' ,
p_credit AS CHECKBOX DEFAULT 'X' NO-DISPLAY,
*selection-screen end of block blck3.
start-of-selection.
START-OF-SELECTION.
PERFORM BUILD_EVENTCAT.
p_debit = 'X'.
p_credit = 'X'.
PERFORM get_customer_invoices.
filter records based on selection criteria
PERFORM filter_records.
END-OF-SELECTION.
PERFORM add_sort_field.
PERFORM modify_field.
PERFORM write_report.
*& Form FILTER_RECORDS
To collect all the required data from DB and store them in
internal table.
--> p1 text
<-- p2 text
FORM filter_records.
delete records based on selection criteria
LOOP AT itab.
SELECT vkbur vkgrp vwerk erdat konda kdgrp bzirk kvgr2
INTO (itab-vkbur, itab-vkgrp, itab-vwerk, knvv-erdat,
knvv-konda, knvv-kdgrp,itab-bzirk,knvv-kvgr2)
FROM knvv WHERE lifnr = itab-lifnr
ORDER BY erdat DESCENDING.
AKS :- Not Required for PI
CASE itab-vkbur.
WHEN 'SA1'.
itab-vkbur = 'SF25'.
WHEN 'QLD1'.
itab-vkbur = 'SF23'.
WHEN 'WA1'.
itab-vkbur = 'SF26'.
ENDCASE.
AKS.
EXIT.
ENDSELECT.
IF itab-vkbur IN s_vkbur AND
itab-vkgrp IN s_vkgrp AND
knvv-konda IN s_konda AND
knvv-kdgrp IN s_kdgrp AND
itab-bzirk IN s_bzirk AND
knvv-kvgr2 IN s_kvgr2.
ELSE.
DELETE itab.
CONTINUE.
ENDIF.
SELECT SINGLE klimk grupp cashd
INTO (itab-klimk, itab-grupp, itab-cashd)
FROM knkk WHERE lifnr = itab-lifnr
AND kkber IN s_kkber
AND ctlpc IN s_ctlpc
AND grupp IN s_grupp.
IF SY-SUBRC NE 0.
DELETE ITAB.
CONTINUE.
ENDIF.
SELECT SINGLE skat~txt50
INTO (itab-txt50)
FROM lfb1 INNER JOIN skat
ON lfb1akont EQ skatsaknr
WHERE lfb1~lifnr = itab-lifnr
AND lfb1~akont IN s_akont
AND skat~spras EQ 'EN'.
IF sy-subrc NE 0.
DELETE itab.
CONTINUE.
ENDIF.
SELECT SINGLE name1 name2 telf1 erdat stras ort01 sperr
INTO (itab-name1, itab-name2, itab-telf1,
itab-erdat, itab-stras, itab-ort01, itab-sperr )
FROM lfa1
WHERE lifnr = itab-lifnr
IF sy-subrc NE 0 .
DELETE itab.
CONTINUE.
ENDIF.
AKS For Filteration of Customer base on Block Area.
IF c_all NE 'X'.
IF c_run EQ 'X' AND itab-sperr EQ 'X'.
DELETE itab.
CONTINUE.
ELSE.
IF c_blk EQ 'X' AND itab-sperr NE 'X'.
DELETE itab.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
MODIFY itab.
ENDLOOP.
ENDFORM. " FILTER_RECORDS
*& Form GET_CUSTOMER_INVOICES
text
--> p1 text
<-- p2 text
FORM get_customer_invoices.
DATA:ztotcre LIKE bsik-dmbtr.
DATA:ztotsal LIKE bsik-dmbtr.
DATA: fsdate LIKE sy-datum.
DATA: l_perio(4) TYPE c.
MOVE stida TO rf140-stida.
MOVE rf140-stida+4(2) TO targ_month.
MOVE rf140-stida+0(4) TO targ_year.
MOVE rf140-stida+6(2) TO targ_days.
targ_mth_abs = ( targ_year * 12 ) + targ_month.
CALL FUNCTION 'ZGET_PERIOD_FROM_DATE'
EXPORTING
i_date = stida
IMPORTING
e_perio = l_perio.
CONCATENATE l_perio '0401' INTO fsdate.
select open items.
IF p_due EQ 'X'.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt " 0001
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsik INTO TABLE inrect
WHERE bukrs = p_bukrs
AND budat LE stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
AND umskz NE 'T'
AND umskz NE 'F'
AND umskz NE 'R'
AND umskz NE 'P'
AND umskz NE 'J'
AND umskz NE 'L'.
LOOP AT INREC.
IF INREC-SHKZG = 'H'.
INREC-DMBTR = INREC-DMBTR * -1.
ENDIF.
MOVE-CORRESPONDING INREC TO T_ITEM. " 0001
PERFORM COLLECT_INVOICE USING INREC-lifnr INREC-DMBTR
INREC-ZFBDT INREC-ZBD1T
INREC-ZBD2T INREC-ZBD3T.
APPEND T_ITEM.
CLEAR T_ITEM.
ENDLOOP.
LOOP AT inrect.
inrec-lifnr = inrect-lifnr.
inrec-belnr = inrect-belnr.
inrec-gjahr = inrect-gjahr.
inrec-bldat = inrect-bldat.
inrec-xblnr = inrect-xblnr.
inrec-blart = inrect-blart.
inrec-sgtxt = inrect-sgtxt.
inrec-shkzg = inrect-shkzg.
inrec-dmbtr = inrect-dmbtr.
CALL FUNCTION 'NJ_CAL_DATE_IN_INTERVAL'
EXPORTING
date = inrect-zfbdt
days = inrect-zbd1t
months = 00
signum = '+'
years = 00
IMPORTING
calc_date = inrec-zfbdt.
inrec-zbd1t = inrect-zbd1t.
inrec-zbd2t = inrect-zbd2t.
inrec-zbd3t = inrect-zbd3t.
inrec-zuonr = inrect-zuonr.
APPEND inrec.
CLEAR inrec.
ENDLOOP.
ELSE.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt " 0001
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsik INTO TABLE inrec
WHERE bukrs = p_bukrs
AND budat LE stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
AND umskz NE 'T'
AND umskz NE 'F'
AND umskz NE 'R'
AND umskz NE 'P'
AND umskz NE 'J'
AND umskz NE 'L'.
ENDIF.
SORT inrec BY lifnr shkzg zfbdt .
LOOP AT inrec.
AT NEW lifnr.
For Customers Credit Balance Transaction to be display in Report
End of Credit Balance
ztotcre = 0.
ztotsal = 0.
ENDAT.
IF inrec-shkzg = 'H'.
inrec-dmbtr = inrec-dmbtr * -1.
ztotcre = ztotcre + inrec-dmbtr.
ELSE.
IF inrec-blart = 'RV'.
IF inrec-bldat GE fsdate.
ztotsal = ztotsal + inrec-dmbtr.
ENDIF.
ENDIF.
ztotcre = ztotcre + inrec-dmbtr.
endif.
IF p_debit EQ 'X'.
IF ztotcre > 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
ENDIF.
ENDIF.
ENDIF.
IF p_credit EQ 'X'.
AT END OF lifnr.
IF ztotcre < 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
APPEND t_item.
CLEAR t_item.
ENDIF.
ENDAT.
ENDIF.
ENDLOOP.
select cleared items
IF p_due EQ 'X'.
REFRESH inrect. CLEAR inrect.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsak INTO TABLE inrect
WHERE bukrs = p_bukrs
AND budat LE stida
AND augdt > stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
REFRESH inrec. CLEAR inrec.
LOOP AT inrect.
inrec-lifnr = inrect-lifnr.
inrec-belnr = inrect-belnr.
inrec-gjahr = inrect-gjahr.
inrec-bldat = inrect-bldat.
inrec-xblnr = inrect-xblnr.
inrec-blart = inrect-blart.
inrec-sgtxt = inrect-sgtxt.
inrec-shkzg = inrect-shkzg.
inrec-dmbtr = inrect-dmbtr.
CALL FUNCTION 'NJ_CAL_DATE_IN_INTERVAL'
EXPORTING
date = inrect-zfbdt
days = inrect-zbd1t
months = 00
signum = '+'
years = 00
IMPORTING
calc_date = inrec-zfbdt.
inrec-zbd1t = inrect-zbd1t.
inrec-zbd2t = inrect-zbd2t.
inrec-zbd3t = inrect-zbd3t.
inrec-zuonr = inrect-zuonr.
APPEND inrec.
CLEAR inrec.
ENDLOOP.
ELSE.
REFRESH inrec. CLEAR inrec.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsak INTO TABLE inrec
WHERE bukrs = p_bukrs
AND budat LE stida
AND augdt > stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
ENDIF.
SORT inrec BY lifnr shkzg zfbdt .
LOOP AT inrec.
AT NEW lifnr.
ztotcre = 0.
ztotsal = 0.
ENDAT.
IF inrec-shkzg = 'H'.
inrec-dmbtr = inrec-dmbtr * -1.
ztotcre = ztotcre + inrec-dmbtr.
ELSE.
IF inrec-blart = 'RV'.
IF inrec-bldat GE fsdate.
ztotsal = ztotsal + inrec-dmbtr.
ENDIF.
ENDIF.
ztotcre = ztotcre + inrec-dmbtr.
endif.
IF p_debit EQ 'X'.
IF ztotcre > 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
ENDIF.
ENDIF.
ENDIF.
IF p_credit EQ 'X'.
AT END OF lifnr.
IF ztotcre < 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
APPEND t_item.
CLEAR t_item.
ENDIF.
ENDAT. " 0001
ENDIF.
ENDLOOP.
ENDFORM. " GET_CUSTOMER_INVOICES
*& Form COLLECT_INVOICE
text
-->P_bsik_lifnr text
-->P_bsik_DMBTR text
-->P_bsik_ZFBDT text
-->P_bsik_ZFBDT1 text
-->P_bsik_ZFBDT2 text
-->P_bsik_ZFBDT3 text
FORM collect_invoice USING pp_lifnr
pp_dmbtr
pp_zfbdt
pp_zbd1t
pp_zbd2t
pp_zbd3t
pp_ztotsal.
doc_month = pp_zfbdt+4(2).
doc_year = pp_zfbdt+0(4).
doc_mth_abs = ( doc_year * 12 ) + doc_month.
mth_result = ( targ_mth_abs - doc_mth_abs ).
logic given by Mr. Ashok Singhvi
doc_days = pp_zfbdt+6(2).
addl_days = ( doc_days - targ_days ).
IF addl_days <= 0.
ADD 1 TO mth_result.
ENDIF.
IF NOT pp_zbd3t IS INITIAL.
MOVE pp_zbd3t TO ext_days.
ELSEIF NOT pp_zbd2t IS INITIAL.
MOVE pp_zbd2t TO ext_days.
ELSEIF NOT pp_zbd1t IS INITIAL.
MOVE pp_zbd1t TO ext_days.
ELSE.
CLEAR ext_days.
ENDIF.
CHECK with Andrew whether this is working or not
if extended payment terms exist, subtract no of mths from mth_result
IF NOT ext_days IS INITIAL.
CASE ext_days.
WHEN 30.
SUBTRACT 1 FROM mth_result.
WHEN 60.
SUBTRACT 2 FROM mth_result.
WHEN 90.
SUBTRACT 3 FROM mth_result.
WHEN 120.
SUBTRACT 4 FROM mth_result.
ENDCASE.
ENDIF.
change to key date
IF pp_dmbtr > 0.
IF p_future = 'X'. " 0001
IF mth_result <= 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ELSE.
IF mth_result < 0.
itab-zfuture = pp_dmbtr.
t_item-days = 'FUT'.
ELSEIF mth_result = 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ENDIF. " 0001
itab-crbal = 0.
itab-total = pp_dmbtr.
ELSE.
IF p_future = 'X'. " 0001
IF mth_result <= 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ELSE.
IF mth_result < 0.
itab-zfuture = pp_dmbtr.
t_item-days = 'FUT'.
ELSEIF mth_result = 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ENDIF. " 0001
itab-total = pp_dmbtr.
itab-crbal = 0.
ENDIF.
itab-lifnr = pp_lifnr.
itab-totsal = pp_ztotsal.
COLLECT itab.
CLEAR itab.
ENDFORM. " COLLECT_INVOICE
*& Form ADD_SORT_FIELD
text
--> p1 text
<-- p2 text
FORM add_sort_field.
DATA: l_amount(9) TYPE n.
IF p_future = 'X'.
LOOP AT itab.
l_amount = 999999999.
IF itab-365days > 0.
l_amount = l_amount - itab-365days.
CONCATENATE 'A' l_amount INTO itab-psort.
ELSEIF itab-180days > 0.
l_amount = l_amount - itab-180days.
CONCATENATE 'B' l_amount INTO itab-psort.
ELSEIF itab-120days > 0.
l_amount = l_amount - itab-120days.
CONCATENATE 'C' l_amount INTO itab-psort.
ELSEIF itab-99days > 0.
l_amount = l_amount - itab-99days.
CONCATENATE 'D' l_amount INTO itab-psort.
ELSEIF itab-90days > 0.
l_amount = l_amount - itab-90days.
CONCATENATE 'E' l_amount INTO itab-psort.
ELSEIF itab-60days > 0.
l_amount = l_amount - itab-60days.
CONCATENATE 'F' l_amount INTO itab-psort.
ELSEIF itab-30days > 0.
l_amount = l_amount - itab-30days.
CONCATENATE 'G' l_amount INTO itab-psort.
ELSEIF itab-zcurrent > 0.
l_amount = l_amount - itab-zcurrent.
CONCATENATE 'H' l_amount INTO itab-psort.
ELSEif itab-zfuture > 0.
L_AMOUNT = L_AMOUNT - ITAB-zfuture.
CONCATENATE 'F' L_AMOUNT INTO ITAB-PSORT.
ELSE.
l_amount = ABS( itab-total ).
CONCATENATE 'I' l_amount INTO itab-psort.
ENDIF.
MODIFY itab.
ENDLOOP.
ELSE.
LOOP AT itab.
l_amount = 999999999.
IF itab-365days > 0.
l_amount = l_amount - itab-365days.
CONCATENATE 'A' l_amount INTO itab-psort.
ELSEIF itab-180days > 0.
l_amount = l_amount - itab-180days.
CONCATENATE 'B' l_amount INTO itab-psort.
ELSEIF itab-120days > 0.
l_amount = l_amount - itab-120days.
CONCATENATE 'C' l_amount INTO itab-psort.
ELSEIF itab-99days > 0.
l_amount = l_amount - itab-99days.
CONCATENATE 'D' l_amount INTO itab-psort.
ELSEIF itab-90days > 0.
l_amount = l_amount - itab-90days.
CONCATENATE 'E' l_amount INTO itab-psort.
ELSEIF itab-60days > 0.
l_amount = l_amount - itab-60days.
CONCATENATE 'F' l_amount INTO itab-psort.
ELSEIF itab-30days > 0.
l_amount = l_amount - itab-30days.
CONCATENATE 'G' l_amount INTO itab-psort.
ELSEIF itab-zcurrent > 0.
l_amount = l_amount - itab-zcurrent.
CONCATENATE 'H' l_amount INTO itab-psort.
ELSEIF itab-zfuture > 0.
l_amount = l_amount - itab-zfuture.
CONCATENATE 'I' l_amount INTO itab-psort.
ELSE.
l_amount = ABS( itab-total ).
CONCATENATE 'J' l_amount INTO itab-psort.
ENDIF.
MODIFY itab.
ENDLOOP.
ENDIF.
ENDFORM. " ADD_SORT_FIELD
*& Form WRITE_REPORT
text
--> p1 text
<-- p2 text
FORM write_report.
PERFORM build_fieldcat.
PERFORM build_sortcat.
PERFORM build_eventcat.
PERFORM build_layout.
PERFORM start_list_viewer.
ENDFORM. " WRITE_REPORT
*& Form BUILD_FIELDCAT
text
--> p1 text
<-- p2 text
FORM build_fieldcat.
lifnr
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'lfa1'.
fieldcat_ln-fieldname = 'LIFNR'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
APPEND fieldcat_ln TO fieldcat.
Name1
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'lfa1'.
fieldcat_ln-fieldname = 'NAME1'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-seltext_l = 'Name'.
APPEND fieldcat_ln TO fieldcat.
City Details
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'lfa1'.
fieldcat_ln-fieldname = 'ORT01'.
fieldcat_ln-seltext_l = 'City'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
Credit Limit
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNKK'.
fieldcat_ln-fieldname = 'KLIMK'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-emphasize = 'C41'.
APPEND fieldcat_ln TO fieldcat.
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'CRBAL'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-seltext_l = 'Cr. Bal.'.
fieldcat_ln-seltext_m = 'Cr. Bal.'.
fieldcat_ln-seltext_s = 'Cr. Bal.'.
APPEND fieldcat_ln TO fieldcat.
Total Amount
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-fieldname = 'TOTAL'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-seltext_l = 'Out.St.Amt.'.
fieldcat_ln-seltext_m = 'Out.St.Amt.'.
fieldcat_ln-seltext_s = 'Out.St.Amt.'.
fieldcat_ln-ref_tabname = 'zbsik'.
fieldcat_ln-ref_fieldname = 'ZDMBTR'.
APPEND fieldcat_ln TO fieldcat.
IF p_future NE 'X'.
Future
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'ZFUTURE'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = 'Future Due'.
fieldcat_ln-seltext_m = 'Future Due'.
fieldcat_ln-seltext_s = 'Future Due'.
APPEND fieldcat_ln TO fieldcat.
ENDIF.
Current
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'ZCURRENT'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = 'Normal Due'.
fieldcat_ln-seltext_m = 'Normal Due'.
fieldcat_ln-seltext_s = 'Normal Due'.
APPEND fieldcat_ln TO fieldcat.
30 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '30DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '0-30 Days'.
fieldcat_ln-seltext_m = '0-30 Days'.
fieldcat_ln-seltext_s = '0-30 Days'.
APPEND fieldcat_ln TO fieldcat.
60 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '60DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '31-60 Days'.
fieldcat_ln-seltext_m = '31-60 Days'.
fieldcat_ln-seltext_s = '31-60 Days'.
APPEND fieldcat_ln TO fieldcat.
90 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '90DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '61-90 Days'.
fieldcat_ln-seltext_m = '61-90 Days'.
fieldcat_ln-seltext_s = '61-90 Days'.
APPEND fieldcat_ln TO fieldcat.
99 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '99DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '91-120 Days'.
fieldcat_ln-seltext_m = '91-120 Days'.
fieldcat_ln-seltext_s = '91-120 Days'.
APPEND fieldcat_ln TO fieldcat.
*120Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '120DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '121-180 Days'.
fieldcat_ln-seltext_m = '121-180 Days'.
fieldcat_ln-seltext_s = '121-180 Days'.
APPEND fieldcat_ln TO fieldcat.
*180 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '180DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '181-365 Days'.
fieldcat_ln-seltext_m = '181-365 Days'.
fieldcat_ln-seltext_s = '181-365 Days'.
APPEND fieldcat_ln TO fieldcat.
*365 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '365DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '>365 Days'.
fieldcat_ln-seltext_m = '>365 Days'.
fieldcat_ln-seltext_s = '>365 Days'.
APPEND fieldcat_ln TO fieldcat.
Last Payment Date
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNKK'.
fieldcat_ln-fieldname = 'CASHD'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
Street Name
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'lfa1'.
FIELDCAT_LN-FIELDNAME = 'STRAS'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
Telephone
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'lfa1'.
FIELDCAT_LN-FIELDNAME = 'TELF1'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
Credit Group
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'KNKK'.
FIELDCAT_LN-FIELDNAME = 'GRUPP'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
*Sales District
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNVV'.
fieldcat_ln-fieldname = 'BZIRK'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-seltext_l = 'S_Distt'.
fieldcat_ln-seltext_m = 'S_Distt'.
fieldcat_ln-seltext_s = 'S_Distt'.
APPEND fieldcat_ln TO fieldcat.
Sales Office
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNVV'.
fieldcat_ln-fieldname = 'VKBUR'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-seltext_l = 'S_Off'.
fieldcat_ln-seltext_m = 'S_Off'.
fieldcat_ln-seltext_s = 'S_Off'.
APPEND fieldcat_ln TO fieldcat.
Cust Creat Date
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'lfa1'.
FIELDCAT_LN-FIELDNAME = 'ERDAT'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT. -
Dear All.,
I want vendors ageing report in ALV to be developed in SAP 4.7. How I will do that. Anybody has any prog for the same. Its urgent.
ThanksREPORT zvender_os NO STANDARD PAGE HEADING
LINE-SIZE 132
LINE-COUNT 65.
Tables
TABLES: bsik, "open items (A/C: Secondary Index for Customers)
lfa1, "customer master
lfb1,
rf140, "temp stru (Work Fields for Corrence(SAPF140*))
bsak, "cleared items (A/c Secnd Index for Cust(Clrms))
skat.
constants and variables
TYPE-POOLS: slis.
DATA: fieldcat TYPE slis_t_fieldcat_alv,
fieldcat1 TYPE slis_t_fieldcat_alv,
fieldcat_ln TYPE slis_fieldcat_alv,
layout_in TYPE slis_layout_alv,
layout_in1 TYPE slis_layout_alv,
sortcat TYPE slis_t_sortinfo_alv,
sortcat1 TYPE slis_t_sortinfo_alv,
sortcat_ln LIKE LINE OF sortcat,
eventcat1 TYPE slis_t_event,
eventcat TYPE slis_t_event,
eventcat_ln LIKE LINE OF eventcat,
col_pos TYPE i.
DATA: targ_month(2) TYPE n, "0001
targ_year(4) TYPE n, "0001
targ_mth_abs TYPE p, "0001
doc_month(2) TYPE n, "0001
doc_year(4) TYPE n, "0001
doc_mth_abs TYPE p, "0001
mth_result TYPE p, "0001
doc_days TYPE p,
targ_days TYPE p,
addl_days TYPE p,
ext_days TYPE p,
v_days(3) TYPE c,
v_kkber LIKE knkk-kkber.
DATA:
BEGIN OF inrec OCCURS 1000, "0001
lifnr LIKE bsik-lifnr,
belnr LIKE bsik-belnr,
gjahr LIKE bsik-gjahr,
bldat LIKE bsik-bldat,
xblnr LIKE bsik-xblnr,
blart LIKE bsik-blart,
sgtxt LIKE bsik-sgtxt,
shkzg LIKE bsik-shkzg,
dmbtr LIKE bsik-dmbtr,
zfbdt LIKE bsik-zfbdt,
zbd1t LIKE bsik-zbd1t,
zbd2t LIKE bsik-zbd2t,
zbd3t LIKE bsik-zbd3t,
zuonr LIKE bsik-zuonr,
END OF inrec.
DATA:
BEGIN OF inrect OCCURS 1000, "0001
lifnr LIKE bsik-lifnr,
belnr LIKE bsik-belnr,
gjahr LIKE bsik-gjahr,
bldat LIKE bsik-bldat,
xblnr LIKE bsik-xblnr,
blart LIKE bsik-blart,
sgtxt LIKE bsik-sgtxt,
shkzg LIKE bsik-shkzg,
dmbtr LIKE bsik-dmbtr,
zfbdt LIKE bsik-zfbdt,
zbd1t LIKE bsik-zbd1t,
zbd2t LIKE bsik-zbd2t,
zbd3t LIKE bsik-zbd3t,
zuonr LIKE bsik-zuonr,
END OF inrect,
BEGIN OF t_item OCCURS 1000, " 0001
lifnr LIKE bsik-lifnr,
belnr LIKE bsik-belnr,
gjahr LIKE bsik-gjahr,
bldat LIKE bsik-bldat,
xblnr LIKE bsik-xblnr,
blart LIKE bsik-blart,
sgtxt LIKE bsik-sgtxt,
zfbdt LIKE bsik-zfbdt,
dmbtr LIKE bsik-dmbtr,
days(3) TYPE c,
zuonr LIKE bsik-zuonr,
END OF t_item,
t_line LIKE t_item OCCURS 1000 WITH HEADER LINE, " 0001
BEGIN OF itab OCCURS 1000,
lifnr LIKE lfa1-lifnr,
total LIKE bsik-dmbtr,
zfuture LIKE bsik-dmbtr,
zcurrent LIKE bsik-dmbtr,
crbal LIKE bsik-dmbtr,
30days LIKE bsik-dmbtr,
60days LIKE bsik-dmbtr,
90days LIKE bsik-dmbtr,
99days LIKE bsik-dmbtr,
120days LIKE bsik-dmbtr,
180days LIKE bsik-dmbtr,
365days LIKE bsik-dmbtr,
bzirk LIKE knvv-bzirk,
vkbur LIKE knvv-vkbur,
vwerk LIKE knvv-vwerk,
vkgrp LIKE knvv-vkgrp,
klimk LIKE knkk-klimk,
cashd LIKE knkk-cashd,
grupp LIKE knkk-grupp,
erdat LIKE lfa1-erdat,
name1 LIKE lfa1-name1,
name2 LIKE lfa1-name2,
stras LIKE lfa1-stras,
ort01 LIKE lfa1-ort01,
telf1 LIKE lfa1-telf1,
psort(10),
sperr LIKE lfa1-sperr,
totsal LIKE bsik-dmbtr,
txt50 LIKE skat-txt50,
gsber LIKE bsik-gsber,
END OF itab.
DATA: sel_tab TYPE TABLE OF rsparams WITH HEADER LINE,
p_debit(1) TYPE c,
p_credit(1) TYPE c.
DATA: t_variant LIKE disvariant OCCURS 0 WITH HEADER LINE.
parameters and select-options
SELECTION-SCREEN BEGIN OF BLOCK blck0 WITH FRAME TITLE text-002.
PARAMETERS: stida LIKE sy-datum DEFAULT sy-datum OBLIGATORY,
p_bukrs LIKE t001-bukrs DEFAULT 'PIIL' MEMORY ID buk
OBLIGATORY.
P_BUKRS LIKE T001-BUKRS DEFAULT 'CC01' OBLIGATORY. "0003
SELECT-OPTIONS: s_lifnr FOR bsik-lifnr ,
s_vkbur FOR knvv-vkbur,
s_vkgrp FOR knvv-vkgrp,
s_bzirk FOR knvv-bzirk,
s_konda FOR knvv-konda,
s_kdgrp FOR knvv-kdgrp NO-DISPLAY ,
s_kvgr2 FOR knvv-kvgr2 NO-DISPLAY ,
s_kkber FOR knkk-kkber NO-DISPLAY ,
s_grupp FOR knkk-grupp NO-DISPLAY ,
s_ctlpc FOR knkk-ctlpc,
s_akont FOR lfb1-akont,
s_gsber FOR bsik-gsber.
PARAMETERS: p_future AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK blck0.
SELECTION-SCREEN BEGIN OF BLOCK blck1 WITH FRAME TITLE text-002.
PARAMETERS: p_abs RADIOBUTTON GROUP zrad,
p_due RADIOBUTTON GROUP zrad DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK blck1.
*SELECTION-SCREEN BEGIN OF BLOCK blck2 WITH FRAME TITLE text-003.
*PARAMETERS: c_run RADIOBUTTON GROUP zrac DEFAULT 'X',
c_blk RADIOBUTTON GROUP zrac,
c_all RADIOBUTTON GROUP zrac.
*SELECTION-SCREEN END OF BLOCK blck2.
*SELECTION-SCREEN BEGIN OF BLOCK blck3 WITH FRAME TITLE text-004.
*PARAMETERS: p_debit AS CHECKBOX DEFAULT 'X' ,
p_credit AS CHECKBOX DEFAULT 'X' NO-DISPLAY,
*selection-screen end of block blck3.
start-of-selection.
START-OF-SELECTION.
PERFORM BUILD_EVENTCAT.
p_debit = 'X'.
p_credit = 'X'.
PERFORM get_customer_invoices.
filter records based on selection criteria
PERFORM filter_records.
END-OF-SELECTION.
PERFORM add_sort_field.
PERFORM modify_field.
PERFORM write_report.
*& Form FILTER_RECORDS
To collect all the required data from DB and store them in
internal table.
--> p1 text
<-- p2 text
FORM filter_records.
delete records based on selection criteria
LOOP AT itab.
SELECT vkbur vkgrp vwerk erdat konda kdgrp bzirk kvgr2
INTO (itab-vkbur, itab-vkgrp, itab-vwerk, knvv-erdat,
knvv-konda, knvv-kdgrp,itab-bzirk,knvv-kvgr2)
FROM knvv WHERE lifnr = itab-lifnr
ORDER BY erdat DESCENDING.
AKS :- Not Required for PI
CASE itab-vkbur.
WHEN 'SA1'.
itab-vkbur = 'SF25'.
WHEN 'QLD1'.
itab-vkbur = 'SF23'.
WHEN 'WA1'.
itab-vkbur = 'SF26'.
ENDCASE.
AKS.
EXIT.
ENDSELECT.
IF itab-vkbur IN s_vkbur AND
itab-vkgrp IN s_vkgrp AND
knvv-konda IN s_konda AND
knvv-kdgrp IN s_kdgrp AND
itab-bzirk IN s_bzirk AND
knvv-kvgr2 IN s_kvgr2.
ELSE.
DELETE itab.
CONTINUE.
ENDIF.
SELECT SINGLE klimk grupp cashd
INTO (itab-klimk, itab-grupp, itab-cashd)
FROM knkk WHERE lifnr = itab-lifnr
AND kkber IN s_kkber
AND ctlpc IN s_ctlpc
AND grupp IN s_grupp.
IF SY-SUBRC NE 0.
DELETE ITAB.
CONTINUE.
ENDIF.
SELECT SINGLE skat~txt50
INTO (itab-txt50)
FROM lfb1 INNER JOIN skat
ON lfb1akont EQ skatsaknr
WHERE lfb1~lifnr = itab-lifnr
AND lfb1~akont IN s_akont
AND skat~spras EQ 'EN'.
IF sy-subrc NE 0.
DELETE itab.
CONTINUE.
ENDIF.
SELECT SINGLE name1 name2 telf1 erdat stras ort01 sperr
INTO (itab-name1, itab-name2, itab-telf1,
itab-erdat, itab-stras, itab-ort01, itab-sperr )
FROM lfa1
WHERE lifnr = itab-lifnr
IF sy-subrc NE 0 .
DELETE itab.
CONTINUE.
ENDIF.
AKS For Filteration of Customer base on Block Area.
IF c_all NE 'X'.
IF c_run EQ 'X' AND itab-sperr EQ 'X'.
DELETE itab.
CONTINUE.
ELSE.
IF c_blk EQ 'X' AND itab-sperr NE 'X'.
DELETE itab.
CONTINUE.
ENDIF.
ENDIF.
ENDIF.
MODIFY itab.
ENDLOOP.
ENDFORM. " FILTER_RECORDS
*& Form GET_CUSTOMER_INVOICES
text
--> p1 text
<-- p2 text
FORM get_customer_invoices.
DATA:ztotcre LIKE bsik-dmbtr.
DATA:ztotsal LIKE bsik-dmbtr.
DATA: fsdate LIKE sy-datum.
DATA: l_perio(4) TYPE c.
MOVE stida TO rf140-stida.
MOVE rf140-stida+4(2) TO targ_month.
MOVE rf140-stida+0(4) TO targ_year.
MOVE rf140-stida+6(2) TO targ_days.
targ_mth_abs = ( targ_year * 12 ) + targ_month.
CALL FUNCTION 'ZGET_PERIOD_FROM_DATE'
EXPORTING
i_date = stida
IMPORTING
e_perio = l_perio.
CONCATENATE l_perio '0401' INTO fsdate.
select open items.
IF p_due EQ 'X'.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt " 0001
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsik INTO TABLE inrect
WHERE bukrs = p_bukrs
AND budat LE stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
AND umskz NE 'T'
AND umskz NE 'F'
AND umskz NE 'R'
AND umskz NE 'P'
AND umskz NE 'J'
AND umskz NE 'L'.
LOOP AT INREC.
IF INREC-SHKZG = 'H'.
INREC-DMBTR = INREC-DMBTR * -1.
ENDIF.
MOVE-CORRESPONDING INREC TO T_ITEM. " 0001
PERFORM COLLECT_INVOICE USING INREC-lifnr INREC-DMBTR
INREC-ZFBDT INREC-ZBD1T
INREC-ZBD2T INREC-ZBD3T.
APPEND T_ITEM.
CLEAR T_ITEM.
ENDLOOP.
LOOP AT inrect.
inrec-lifnr = inrect-lifnr.
inrec-belnr = inrect-belnr.
inrec-gjahr = inrect-gjahr.
inrec-bldat = inrect-bldat.
inrec-xblnr = inrect-xblnr.
inrec-blart = inrect-blart.
inrec-sgtxt = inrect-sgtxt.
inrec-shkzg = inrect-shkzg.
inrec-dmbtr = inrect-dmbtr.
CALL FUNCTION 'NJ_CAL_DATE_IN_INTERVAL'
EXPORTING
date = inrect-zfbdt
days = inrect-zbd1t
months = 00
signum = '+'
years = 00
IMPORTING
calc_date = inrec-zfbdt.
inrec-zbd1t = inrect-zbd1t.
inrec-zbd2t = inrect-zbd2t.
inrec-zbd3t = inrect-zbd3t.
inrec-zuonr = inrect-zuonr.
APPEND inrec.
CLEAR inrec.
ENDLOOP.
ELSE.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt " 0001
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsik INTO TABLE inrec
WHERE bukrs = p_bukrs
AND budat LE stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
AND umskz NE 'T'
AND umskz NE 'F'
AND umskz NE 'R'
AND umskz NE 'P'
AND umskz NE 'J'
AND umskz NE 'L'.
ENDIF.
SORT inrec BY lifnr shkzg zfbdt .
LOOP AT inrec.
AT NEW lifnr.
For Customers Credit Balance Transaction to be display in Report
End of Credit Balance
ztotcre = 0.
ztotsal = 0.
ENDAT.
IF inrec-shkzg = 'H'.
inrec-dmbtr = inrec-dmbtr * -1.
ztotcre = ztotcre + inrec-dmbtr.
ELSE.
IF inrec-blart = 'RV'.
IF inrec-bldat GE fsdate.
ztotsal = ztotsal + inrec-dmbtr.
ENDIF.
ENDIF.
ztotcre = ztotcre + inrec-dmbtr.
endif.
IF p_debit EQ 'X'.
IF ztotcre > 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
ENDIF.
ENDIF.
ENDIF.
IF p_credit EQ 'X'.
AT END OF lifnr.
IF ztotcre < 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
APPEND t_item.
CLEAR t_item.
ENDIF.
ENDAT.
ENDIF.
ENDLOOP.
select cleared items
IF p_due EQ 'X'.
REFRESH inrect. CLEAR inrect.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsak INTO TABLE inrect
WHERE bukrs = p_bukrs
AND budat LE stida
AND augdt > stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
REFRESH inrec. CLEAR inrec.
LOOP AT inrect.
inrec-lifnr = inrect-lifnr.
inrec-belnr = inrect-belnr.
inrec-gjahr = inrect-gjahr.
inrec-bldat = inrect-bldat.
inrec-xblnr = inrect-xblnr.
inrec-blart = inrect-blart.
inrec-sgtxt = inrect-sgtxt.
inrec-shkzg = inrect-shkzg.
inrec-dmbtr = inrect-dmbtr.
CALL FUNCTION 'NJ_CAL_DATE_IN_INTERVAL'
EXPORTING
date = inrect-zfbdt
days = inrect-zbd1t
months = 00
signum = '+'
years = 00
IMPORTING
calc_date = inrec-zfbdt.
inrec-zbd1t = inrect-zbd1t.
inrec-zbd2t = inrect-zbd2t.
inrec-zbd3t = inrect-zbd3t.
inrec-zuonr = inrect-zuonr.
APPEND inrec.
CLEAR inrec.
ENDLOOP.
ELSE.
REFRESH inrec. CLEAR inrec.
SELECT lifnr belnr gjahr bldat xblnr blart sgtxt
shkzg dmbtr zfbdt zbd1t zbd2t zbd3t
zuonr
FROM bsak INTO TABLE inrec
WHERE bukrs = p_bukrs
AND budat LE stida
AND augdt > stida
AND lifnr IN s_lifnr
AND gsber IN s_gsber
ENDIF.
SORT inrec BY lifnr shkzg zfbdt .
LOOP AT inrec.
AT NEW lifnr.
ztotcre = 0.
ztotsal = 0.
ENDAT.
IF inrec-shkzg = 'H'.
inrec-dmbtr = inrec-dmbtr * -1.
ztotcre = ztotcre + inrec-dmbtr.
ELSE.
IF inrec-blart = 'RV'.
IF inrec-bldat GE fsdate.
ztotsal = ztotsal + inrec-dmbtr.
ENDIF.
ENDIF.
ztotcre = ztotcre + inrec-dmbtr.
endif.
IF p_debit EQ 'X'.
IF ztotcre > 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
ENDIF.
ENDIF.
ENDIF.
IF p_credit EQ 'X'.
AT END OF lifnr.
IF ztotcre < 0.
MOVE-CORRESPONDING inrec TO t_item. " 0001
PERFORM collect_invoice USING inrec-lifnr ztotcre
inrec-zfbdt inrec-zbd1t
inrec-zbd2t inrec-zbd3t
ztotsal.
APPEND t_item.
CLEAR t_item.
ztotcre = 0.
ztotsal = 0.
APPEND t_item.
CLEAR t_item.
ENDIF.
ENDAT. " 0001
ENDIF.
ENDLOOP.
ENDFORM. " GET_CUSTOMER_INVOICES
*& Form COLLECT_INVOICE
text
-->P_bsik_lifnr text
-->P_bsik_DMBTR text
-->P_bsik_ZFBDT text
-->P_bsik_ZFBDT1 text
-->P_bsik_ZFBDT2 text
-->P_bsik_ZFBDT3 text
FORM collect_invoice USING pp_lifnr
pp_dmbtr
pp_zfbdt
pp_zbd1t
pp_zbd2t
pp_zbd3t
pp_ztotsal.
doc_month = pp_zfbdt+4(2).
doc_year = pp_zfbdt+0(4).
doc_mth_abs = ( doc_year * 12 ) + doc_month.
mth_result = ( targ_mth_abs - doc_mth_abs ).
logic given by Mr. Ashok Singhvi
doc_days = pp_zfbdt+6(2).
addl_days = ( doc_days - targ_days ).
IF addl_days <= 0.
ADD 1 TO mth_result.
ENDIF.
IF NOT pp_zbd3t IS INITIAL.
MOVE pp_zbd3t TO ext_days.
ELSEIF NOT pp_zbd2t IS INITIAL.
MOVE pp_zbd2t TO ext_days.
ELSEIF NOT pp_zbd1t IS INITIAL.
MOVE pp_zbd1t TO ext_days.
ELSE.
CLEAR ext_days.
ENDIF.
CHECK with Andrew whether this is working or not
if extended payment terms exist, subtract no of mths from mth_result
IF NOT ext_days IS INITIAL.
CASE ext_days.
WHEN 30.
SUBTRACT 1 FROM mth_result.
WHEN 60.
SUBTRACT 2 FROM mth_result.
WHEN 90.
SUBTRACT 3 FROM mth_result.
WHEN 120.
SUBTRACT 4 FROM mth_result.
ENDCASE.
ENDIF.
change to key date
IF pp_dmbtr > 0.
IF p_future = 'X'. " 0001
IF mth_result <= 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ELSE.
IF mth_result < 0.
itab-zfuture = pp_dmbtr.
t_item-days = 'FUT'.
ELSEIF mth_result = 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ENDIF. " 0001
itab-crbal = 0.
itab-total = pp_dmbtr.
ELSE.
IF p_future = 'X'. " 0001
IF mth_result <= 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ELSE.
IF mth_result < 0.
itab-zfuture = pp_dmbtr.
t_item-days = 'FUT'.
ELSEIF mth_result = 0.
itab-zcurrent = pp_dmbtr.
t_item-days = 'CUR'.
ELSEIF mth_result = 1.
itab-30days = pp_dmbtr.
t_item-days = '30D'.
ELSEIF mth_result = 2.
itab-60days = pp_dmbtr.
t_item-days = '60D'.
ELSEIF mth_result = 3.
itab-90days = pp_dmbtr.
t_item-days = '90D'.
ELSEIF mth_result > 3 AND mth_result <= 4 .
itab-99days = pp_dmbtr.
t_item-days = '99D'.
ELSEIF mth_result > 4 AND mth_result <= 6 .
itab-120days = pp_dmbtr.
t_item-days = '120D'.
ELSEIF mth_result > 6 AND mth_result <= 12 .
itab-180days = pp_dmbtr.
t_item-days = '180D'.
ELSEIF mth_result > 12 .
itab-365days = pp_dmbtr.
t_item-days = '365D'.
ENDIF.
ENDIF. " 0001
itab-total = pp_dmbtr.
itab-crbal = 0.
ENDIF.
itab-lifnr = pp_lifnr.
itab-totsal = pp_ztotsal.
COLLECT itab.
CLEAR itab.
ENDFORM. " COLLECT_INVOICE
*& Form ADD_SORT_FIELD
text
--> p1 text
<-- p2 text
FORM add_sort_field.
DATA: l_amount(9) TYPE n.
IF p_future = 'X'.
LOOP AT itab.
l_amount = 999999999.
IF itab-365days > 0.
l_amount = l_amount - itab-365days.
CONCATENATE 'A' l_amount INTO itab-psort.
ELSEIF itab-180days > 0.
l_amount = l_amount - itab-180days.
CONCATENATE 'B' l_amount INTO itab-psort.
ELSEIF itab-120days > 0.
l_amount = l_amount - itab-120days.
CONCATENATE 'C' l_amount INTO itab-psort.
ELSEIF itab-99days > 0.
l_amount = l_amount - itab-99days.
CONCATENATE 'D' l_amount INTO itab-psort.
ELSEIF itab-90days > 0.
l_amount = l_amount - itab-90days.
CONCATENATE 'E' l_amount INTO itab-psort.
ELSEIF itab-60days > 0.
l_amount = l_amount - itab-60days.
CONCATENATE 'F' l_amount INTO itab-psort.
ELSEIF itab-30days > 0.
l_amount = l_amount - itab-30days.
CONCATENATE 'G' l_amount INTO itab-psort.
ELSEIF itab-zcurrent > 0.
l_amount = l_amount - itab-zcurrent.
CONCATENATE 'H' l_amount INTO itab-psort.
ELSEif itab-zfuture > 0.
L_AMOUNT = L_AMOUNT - ITAB-zfuture.
CONCATENATE 'F' L_AMOUNT INTO ITAB-PSORT.
ELSE.
l_amount = ABS( itab-total ).
CONCATENATE 'I' l_amount INTO itab-psort.
ENDIF.
MODIFY itab.
ENDLOOP.
ELSE.
LOOP AT itab.
l_amount = 999999999.
IF itab-365days > 0.
l_amount = l_amount - itab-365days.
CONCATENATE 'A' l_amount INTO itab-psort.
ELSEIF itab-180days > 0.
l_amount = l_amount - itab-180days.
CONCATENATE 'B' l_amount INTO itab-psort.
ELSEIF itab-120days > 0.
l_amount = l_amount - itab-120days.
CONCATENATE 'C' l_amount INTO itab-psort.
ELSEIF itab-99days > 0.
l_amount = l_amount - itab-99days.
CONCATENATE 'D' l_amount INTO itab-psort.
ELSEIF itab-90days > 0.
l_amount = l_amount - itab-90days.
CONCATENATE 'E' l_amount INTO itab-psort.
ELSEIF itab-60days > 0.
l_amount = l_amount - itab-60days.
CONCATENATE 'F' l_amount INTO itab-psort.
ELSEIF itab-30days > 0.
l_amount = l_amount - itab-30days.
CONCATENATE 'G' l_amount INTO itab-psort.
ELSEIF itab-zcurrent > 0.
l_amount = l_amount - itab-zcurrent.
CONCATENATE 'H' l_amount INTO itab-psort.
ELSEIF itab-zfuture > 0.
l_amount = l_amount - itab-zfuture.
CONCATENATE 'I' l_amount INTO itab-psort.
ELSE.
l_amount = ABS( itab-total ).
CONCATENATE 'J' l_amount INTO itab-psort.
ENDIF.
MODIFY itab.
ENDLOOP.
ENDIF.
ENDFORM. " ADD_SORT_FIELD
*& Form WRITE_REPORT
text
--> p1 text
<-- p2 text
FORM write_report.
PERFORM build_fieldcat.
PERFORM build_sortcat.
PERFORM build_eventcat.
PERFORM build_layout.
PERFORM start_list_viewer.
ENDFORM. " WRITE_REPORT
*& Form BUILD_FIELDCAT
text
--> p1 text
<-- p2 text
FORM build_fieldcat.
lifnr
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'lfa1'.
fieldcat_ln-fieldname = 'LIFNR'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
APPEND fieldcat_ln TO fieldcat.
Name1
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'lfa1'.
fieldcat_ln-fieldname = 'NAME1'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-seltext_l = 'Name'.
APPEND fieldcat_ln TO fieldcat.
City Details
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'lfa1'.
fieldcat_ln-fieldname = 'ORT01'.
fieldcat_ln-seltext_l = 'City'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
Credit Limit
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNKK'.
fieldcat_ln-fieldname = 'KLIMK'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-emphasize = 'C41'.
APPEND fieldcat_ln TO fieldcat.
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'CRBAL'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-seltext_l = 'Cr. Bal.'.
fieldcat_ln-seltext_m = 'Cr. Bal.'.
fieldcat_ln-seltext_s = 'Cr. Bal.'.
APPEND fieldcat_ln TO fieldcat.
Total Amount
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-fieldname = 'TOTAL'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-seltext_l = 'Out.St.Amt.'.
fieldcat_ln-seltext_m = 'Out.St.Amt.'.
fieldcat_ln-seltext_s = 'Out.St.Amt.'.
fieldcat_ln-ref_tabname = 'zbsik'.
fieldcat_ln-ref_fieldname = 'ZDMBTR'.
APPEND fieldcat_ln TO fieldcat.
IF p_future NE 'X'.
Future
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'ZFUTURE'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = 'Future Due'.
fieldcat_ln-seltext_m = 'Future Due'.
fieldcat_ln-seltext_s = 'Future Due'.
APPEND fieldcat_ln TO fieldcat.
ENDIF.
Current
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'ZCURRENT'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = 'Normal Due'.
fieldcat_ln-seltext_m = 'Normal Due'.
fieldcat_ln-seltext_s = 'Normal Due'.
APPEND fieldcat_ln TO fieldcat.
30 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '30DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '0-30 Days'.
fieldcat_ln-seltext_m = '0-30 Days'.
fieldcat_ln-seltext_s = '0-30 Days'.
APPEND fieldcat_ln TO fieldcat.
60 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '60DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '31-60 Days'.
fieldcat_ln-seltext_m = '31-60 Days'.
fieldcat_ln-seltext_s = '31-60 Days'.
APPEND fieldcat_ln TO fieldcat.
90 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '90DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '61-90 Days'.
fieldcat_ln-seltext_m = '61-90 Days'.
fieldcat_ln-seltext_s = '61-90 Days'.
APPEND fieldcat_ln TO fieldcat.
99 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '99DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '91-120 Days'.
fieldcat_ln-seltext_m = '91-120 Days'.
fieldcat_ln-seltext_s = '91-120 Days'.
APPEND fieldcat_ln TO fieldcat.
*120Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '120DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '121-180 Days'.
fieldcat_ln-seltext_m = '121-180 Days'.
fieldcat_ln-seltext_s = '121-180 Days'.
APPEND fieldcat_ln TO fieldcat.
*180 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '180DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '181-365 Days'.
fieldcat_ln-seltext_m = '181-365 Days'.
fieldcat_ln-seltext_s = '181-365 Days'.
APPEND fieldcat_ln TO fieldcat.
*365 Days
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = '365DAYS'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = '>365 Days'.
fieldcat_ln-seltext_m = '>365 Days'.
fieldcat_ln-seltext_s = '>365 Days'.
APPEND fieldcat_ln TO fieldcat.
Last Payment Date
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNKK'.
fieldcat_ln-fieldname = 'CASHD'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
Street Name
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'lfa1'.
FIELDCAT_LN-FIELDNAME = 'STRAS'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
Telephone
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'lfa1'.
FIELDCAT_LN-FIELDNAME = 'TELF1'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
Credit Group
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'KNKK'.
FIELDCAT_LN-FIELDNAME = 'GRUPP'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
*Sales District
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNVV'.
fieldcat_ln-fieldname = 'BZIRK'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-seltext_l = 'S_Distt'.
fieldcat_ln-seltext_m = 'S_Distt'.
fieldcat_ln-seltext_s = 'S_Distt'.
APPEND fieldcat_ln TO fieldcat.
Sales Office
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNVV'.
fieldcat_ln-fieldname = 'VKBUR'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-seltext_l = 'S_Off'.
fieldcat_ln-seltext_m = 'S_Off'.
fieldcat_ln-seltext_s = 'S_Off'.
APPEND fieldcat_ln TO fieldcat.
Cust Creat Date
ADD 1 TO COL_POS.
CLEAR FIELDCAT_LN.
FIELDCAT_LN-REF_TABNAME = 'lfa1'.
FIELDCAT_LN-FIELDNAME = 'ERDAT'.
FIELDCAT_LN-COL_POS = COL_POS.
APPEND FIELDCAT_LN TO FIELDCAT.
Del Plant
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNVV'.
fieldcat_ln-fieldname = 'VWERK'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
Sales Group
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'KNVV'.
fieldcat_ln-fieldname = 'VKGRP'.
fieldcat_ln-col_pos = col_pos.
APPEND fieldcat_ln TO fieldcat.
Sort Criteria
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'lifnr'.
fieldcat_ln-fieldname = 'PSORT'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-seltext_l = 'Sort Field'.
fieldcat_ln-seltext_m = 'Sort Field'.
fieldcat_ln-seltext_s = 'Sort Field'.
APPEND fieldcat_ln TO fieldcat.
Sales of Customer
ADD 1 TO col_pos.
CLEAR fieldcat_ln.
fieldcat_ln-ref_tabname = 'bsik'.
fieldcat_ln-ref_fieldname = 'DMBTR'.
fieldcat_ln-fieldname = 'TOTSAL'.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-do_sum = 'X'.
fieldcat_ln-hotspot = 'X'.
fieldcat_ln-emphasize = 'C41'.
fieldcat_ln-seltext_l = 'Total Sales'.
fieldcat_ln-seltext_m = 'Total Sales'.
fieldcat_ln-seltext_s = 'Total Sales'.
APPEND fieldcat_ln TO fieldcat.
ENDFORM. " BUILD_FIELDCAT
*& Form BUILD_SORTCAT
text
--> p1 text
<-- p2 text
FORM build_sortcat.
SORTCAT_LN-SPOS = '1'.
sortcat_ln-spos = '2'. " 0001
sortcat_ln-fieldname = 'PSORT'.
sortcat_ln-up = 'X'. " 0001
sortcat_ln-subtot = 'X'.
APPEND sortcat_ln TO sortcat.
CLEAR sortcat_ln.
SORTCAT_LN-SPOS = '2'.
SORTCAT_LN-FIELDNAME = 'lifnr'.
sortcat_ln-spos = '1'. " 0001
sortcat_ln-fieldname = 'NAME1'. " 0001
sortcat_ln-up = 'X'.
APPEND sortcat_ln TO sortcat.
ENDFORM. " BUILD_SORTCAT
*& Form BUILD_EVENTCAT
text
--> p1 text
<-- p2 text
FORM build_eventcat.
eventcat_ln-name = 'TOP_OF_PAGE'.
eventcat_ln-form = 'PAGE_HEADER'.
APPEND eventcat_ln TO eventcat.
ENDFORM. " BUILD_EVENTCAT
*& Form BUILD_LAYOUT
text
--> p1 text
<-- p2 text
FORM build_layout.
layout_in-colwidth_optimize = 'X'.
layout_in-no_hotspot = 'X'.
layout_in-zebra = 'X'.
layout_in-get_selinfos = 'X'.
ENDFORM. " BUILD_LAYOUT
*& Form START_LIST_VIEWER
text
--> p1 text
<-- p2 text
FORM start_list_viewer.
DATA: pgm LIKE sy-repid.
pgm = sy-repid.
if t_variant[] is initial.
t_variant-report = pgm.
t_variant-variant = '/ATB'.
t_variant-TEXT = '/ATB'.
t_variant-DEPENDVARS = 'S'.
append t_variant.
clear t_variant.
endif.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = pgm
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = fieldcat
it_sort = sortcat
is_layout = layout_in
i_save = 'A'
IS_VARIANT = t_variant
it_events = eventcat
TABLES
t_outtab = itab
EXCEPTIONS
OTHERS = 2.
ENDFORM. " START_LIST_VIEWER
FORM user_command USING ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
DATA l_lifnr(10) TYPE n.
READ TABLE itab INDEX selfield-tabindex.
CHECK sy-subrc = 0.
CASE ucomm.
WHEN '&IC1'.
CASE selfield-sel_tab_field.
WHEN 'ITAB-LIFNR'.
SET PARAMETER ID 'LIF' FIELD itab-lifnr.
SET PARAMETER ID 'BUK' FIELD p_bukrs.
IF itab-lifnr CO '0123456789 '.
l_lifnr = itab-lifnr.
itab-lifnr = l_lifnr.
ENDIF.
SELECT SINGLE kkber INTO knkk-kkber
FROM knkk WHERE lifnr = itab-lifnr.
IF sy-subrc EQ 0.
v_kkber = knkk-kkber.
ELSE.
CLEAR v_kkber.
ENDIF.
REFRESH sel_tab[].
MOVE: 'lifnr' TO sel_tab-selname,
'P' TO sel_tab-kind, " PARAMETER
itab-lifnr TO sel_tab-low.
APPEND sel_tab.
CLEAR sel_tab.
MOVE: 'KKBER' TO sel_tab-selname,
'P' TO sel_tab-kind, " PARAMETER
v_kkber TO sel_tab-low.
APPEND sel_tab.
CLEAR sel_tab.
SUBMIT rfdkli41
USING SELECTION-SET 'VAR1'
WITH SELECTION-TABLE sel_tab
AND RETURN.
CALL TRANSACTION 'XK03' AND SKIP FIRST SCREEN.
WHEN 'ITAB-ZCURRENT'. " 0001
v_days = 'CUR'.
PERFORM display_line_item_level.
WHEN 'ITAB-ZFUTURE'.
v_days = 'FUT'.
PERFORM display_line_item_level.
WHEN 'ITAB-30DAYS'.
v_days = '30D'.
PERFORM display_line_item_level.
WHEN 'ITAB-60DAYS'.
v_days = '60D'.
PERFORM display_line_item_level.
WHEN 'ITAB-90DAYS'.
v_days = '90D'.
PERFORM display_line_item_level.
WHEN 'ITAB-99DAYS'.
v_days = '99D'.
PERFORM display_line_item_level.
WHEN 'ITAB-120DAYS'.
v_days = '120D'.
PERFORM display_line_item_level.
WHEN 'ITAB-180DAYS'.
v_days = '180D'.
PERFORM display_line_item_level.
WHEN 'ITAB-365DAYS'.
v_days = '365D'.
PERFORM display_line_item_level.
WHEN 'ITAB-TOTAL'.
v_days = ' '.
PERFORM display_line_item_level. " 0001
ENDCASE.
ENDCASE.
ENDFORM. "USER_COMMAND
PAGE_HEADER
FORM page_header.
WRITE:/115 'Time:', sy-timlo.
WRITE: /115 'Date:', sy-datum.
WRITE: /52 'Customer Outstanding Agewise ', "0002
115 'Page:', sy-pagno.
SKIP.
IF p_abs EQ 'X'.
WRITE: /52 'Vendor Outstanding Agewise (Absolute Aging)',
115 'Page:', sy-pagno.
ELSE.
WRITE: /52 'Vendor Outstanding Agewise (Due Date Aging)',
115 'Page:', sy-pagno.
ENDIF.
SKIP.
ULINE /(132).
WRITE: /02 'Open Items as of:', stida.
IF NOT s_vkgrp[] IS INITIAL.
IF s_vkgrp-high IS INITIAL.
WRITE: 52 'Sales Group :',s_vkgrp-low.
ELSE.
WRITE: 52 'Sales Group :',s_vkgrp-low,'to',s_vkgrp-high.
ENDIF.
ELSE.
WRITE: 52 'Sales Group : All'.
ENDIF.
IF NOT s_grupp[] IS INITIAL.
IF s_grupp-high IS INITIAL.
WRITE: 107 'Credit group :',s_grupp-low.
ELSE.
WRITE: 107 'Credit group :',s_grupp-low,' to',s_grupp-high.
ENDIF.
ELSE.
WRITE: 107 'Credit Group : All'.
ENDIF.
WRITE: /02 'Comapany Code :', p_bukrs.
IF NOT s_konda[] IS INITIAL.
IF s_konda-high IS INITIAL.
WRITE: 52 'Price group :',s_konda-low.
ELSE.
WRITE: 52 'Price group :',s_konda-low,' to',s_konda-high.
ENDIF.
ELSE.
WRITE: 52 'Price Group : All'.
ENDIF.
IF NOT s_ctlpc[] IS INITIAL.
IF s_ctlpc-high IS INITIAL.
WRITE: 107 'Risk category:',s_ctlpc-low.
ELSE.
WRITE: 107 'Risk category:',s_ctlpc-low,' to',s_ctlpc-high.
ENDIF.
ELSE.
WRITE: 107 'Risk category: All'.
ENDIF.
IF NOT s_vkbur[] IS INITIAL.
IF s_vkbur-high IS INITIAL.
WRITE:/02 'Sales Office :',s_vkbur-low.
ELSE.
WRITE:/02 'Sales Office :',s_vkbur-low,' to',s_vkbur-high.
ENDIF.
ELSE.
WRITE:/02 'Sales Office : All'.
ENDIF.
IF NOT s_kdgrp[] IS INITIAL.
IF s_kdgrp-high IS INITIAL.
WRITE: 52 'Customer group :',s_kdgrp-low.
ELSE.
WRITE: 52 'Customer group :',s_kdgrp-low,' to',s_kdgrp-high.
ENDIF.
ELSE.
WRITE: 52 'Customer group : All'.
ENDIF.
IF NOT s_ktokd[] IS INITIAL.
IF s_ktokd-high IS INITIAL.
WRITE: 107 'Account Group:',s_ktokd-low.
ELSE.
WRITE: 107 'Account Group:',s_ktokd-low,' to',s_ktokd-high.
ENDIF.
ELSE.
WRITE: 107 'Account Group: All'.
ENDIF.
IF NOT s_lifnr[] IS INITIAL.
IF s_lifnr-high IS INITIAL.
WRITE: /02 'Vendor No :',s_lifnr-low.
ELSE.
WRITE: /02 'Vendor No :',s_lifnr-low,' to',s_lifnr-high.
ENDIF.
ELSE.
WRITE: /02 'Vendor No : All'.
ENDIF.
IF NOT s_kkber[] IS INITIAL.
IF s_kkber-high IS INITIAL.
WRITE: 52 'Credit Control Area:',s_kkber-low.
ELSE.
WRITE: 52 'Credit Control Area:',s_kkber-low,' to',s_kkber-high.
ENDIF.
ELSE.
WRITE: 52 'Credit Control Area: All'.
ENDIF.
AKS for Heading Of Modification for Block Customer -
Customer and supplier aging analysis
Hi
How we can do the customer and supplier aging analysis?
e,g -for more than 3 months and more than 6 months
what are the various setting we have to do?
Pls guide me and if there is any config doccument
points will be awarded
regardsHi:
Check this report for vendor aging analysis
S_ALR_87012085
For Customer aging analysis
S_ALR_87012168
Additionally go to se38.
Input pogram RFDOPR00
If this not suit your requirement, develop a customized report with help of ABAPer.
Please let me know if you need more information.
Assign points if useful.
Regards
Sridhar M
Maybe you are looking for
-
Hi , I have a Webi document with 4 queries and I merged all of them with org unit dimension.When I am refreshing this Webi document I am getting a message saying that "no data to retrieve <Query name>". When I created a new document by using same Uni
-
I have a JavaFX project running in the mobile emulator through NetBeans 6.5. Several of the classes used are Java classes being called from the Main.fx. When I set a breakpoint in Main.fx it always triggers, but if I set it anywhere in any of my Java
-
Whenever I try to put music on to my iPod touch 2g 3.0, iTunes will freeze after "syncing" and won't open up once minimized, it requires me to close and open iTunes each time I want to put music on my iPod. iTunes will also slow down for about 30 sec
-
Apple trailers says I need to install QuickTime
I have several Macs. The one that fails to play trailers at http://trailers.apple.com is a Mac Mini OS 10.8.2. I get the big Q icon with a link to download QuickTime. Obviously, my QuickTime works fine. I use it almost daily to play movies. Disk Util
-
My wife's PowerBook crashed (kernel panic) a few days back when I woke it up in the morning. I restarted, ran some maintenance, then restarted again. When I went to use it this morning, whaddaya know, it crashed again. This seems like odd behavior ov