Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

how to achieve this using control break statement

former_member815151
Discoverer
0 Kudos

IN MY internal table data's . while looping when the debit/ credit value is c it should add the amount fields and when ever D it should subtract the amount fields. how to achieve this in control break statements.

2 REPLIES 2

Nitish2027
Participant

Here you go. Use the below code.

REPORT zdemo_report.

START-OF-SELECTION.

TYPES: BEGIN OF ty_type,
record(4) TYPE c,
item TYPE i,
debit_credit TYPE c,
amount TYPE i,
END OF ty_type.

DATA: it_tab TYPE TABLE OF ty_type.


it_tab = VALUE #( ( record = 5888 item = 10 debit_credit = 'C' amount = 100 )
( record = 5888 item = 10 debit_credit = 'D' amount = 50 )
( record = 5888 item = 20 debit_credit = 'C' amount = 90 )
( record = 5888 item = 30 debit_credit = 'D' amount = 200 )
( record = 5888 item = 30 debit_credit = 'C' amount = 100 )
( record = 5889 item = 10 debit_credit = 'C' amount = 100 )
( record = 5889 item = 20 debit_credit = 'C' amount = 50 )
( record = 5889 item = 20 debit_credit = 'D' amount = 100 )
( record = 5889 item = 20 debit_credit = 'C' amount = 90 )
( record = 5890 item = 10 debit_credit = 'C' amount = 100 )
( record = 5890 item = 20 debit_credit = 'D' amount = 80 )
( record = 5890 item = 20 debit_credit = 'C' amount = 70 )
( record = 5890 item = 30 debit_credit = 'D' amount = 100 )
( record = 5891 item = 10 debit_credit = 'C' amount = 110 )
( record = 5891 item = 10 debit_credit = 'D' amount = 40 )
( record = 5892 item = 10 debit_credit = 'C' amount = 80 )
( record = 5892 item = 20 debit_credit = 'D' amount = 120 )
( record = 5892 item = 30 debit_credit = 'D' amount = 30 )
( record = 5892 item = 30 debit_credit = 'C' amount = 60 ) ).

DATA: lv_total TYPE i.
SORT it_tab ASCENDING BY record item.

LOOP AT it_tab INTO DATA(wa_tab).
IF wa_tab-debit_credit = 'D'.
wa_tab-amount = wa_tab-amount * -1 .
MODIFY it_tab FROM wa_tab INDEX sy-tabix.
ENDIF.
AT NEW record.
ULINE.
WRITE:/ 'Doc_Number', 'Doc_Item', 'Balance'.
ENDAT.
AT END OF item.
SUM.
WRITE:/ wa_tab-record, wa_tab-item, wa_tab-amount.
ENDAT.
AT END OF record.
SUM.
WRITE:/ 'Subtotal', wa_tab-amount.
lv_total = lv_total + wa_tab-amount.
ENDAT.
AT LAST.
ULINE.
WRITE:/ 'Grand_Total', lv_total.
ENDAT.
ENDLOOP.

The output for this looks like:

Hope this is what you wanted. 🙂

0 Kudos

Kindly accept the answer if this resolved your query, as this would help someone with similar sort of requirement in future. 🙂