Application Development and Automation 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: 
Read only

At Last statement in a loop

siongchao_ng
Contributor
0 Likes
2,881

Hi all,

My program is doing sum kind of summation suring at last statement.

I want to sum for every row where stufe = 1 but the at last only sum for row 4 ( row 4 + row 5 values).

Why at last is not summing for row 1 ? (row 1 + row 2 + row 3 )

Row 1 value not summed. Its 0.

LOOP AT gt_print ASSIGNING <fs_print>
WHERE psphi <> ''.

REFRESH:lt_child_wbs,
lt_parent_wbs.

CLEAR:lwa_child_wbs,
lwa_parent_wbs,
lv_sub_element,
lwa_sum.

*To retrieve all the child WBS elements
IF <fs_print>-stufe NE '001'.

lwa_parent_wbs = <fs_print>-posid.
APPEND lwa_parent_wbs TO lt_parent_wbs.
CLEAR lwa_parent_wbs.

CALL FUNCTION 'BAPI_PROJECT_GETINFO'
EXPORTING
with_subtree = 'X'
TABLES
i_wbs_element_table = lt_parent_wbs
e_wbs_element_table = lt_child_wbs.
ENDIF.


* if <fs_print>-stufe = '001' or <fs_print>-stufe = '002'.
LOOP AT gt_print INTO gwa_print
WHERE psphi = <fs_print>-psphi
AND stufe > <fs_print>-stufe.

*_ Raise flag of sub element found
lv_sub_element = gc_x.

* if lt_child_wbs[] is INITIAL.
IF <fs_print>-stufe = '001'.
lwa_sum-pfy_total = lwa_sum-pfy_total + gwa_print-pfy_total.

* begin ins
lwa_sum-last_subm_total = lwa_sum-last_subm_total + gwa_print-last_subm_total.
lwa_sum-curr_subm_total = lwa_sum-curr_subm_total + gwa_print-curr_subm_total.
* end ins

lwa_sum-fy_total = lwa_sum-fy_total + gwa_print-fy_total.
lwa_sum-wlp01 = lwa_sum-wlp01 + gwa_print-wlp01.
lwa_sum-wlp02 = lwa_sum-wlp02 + gwa_print-wlp02.
lwa_sum-wlp03 = lwa_sum-wlp03 + gwa_print-wlp03.
lwa_sum-wlp04 = lwa_sum-wlp04 + gwa_print-wlp04.
lwa_sum-wlp05 = lwa_sum-wlp05 + gwa_print-wlp05.
lwa_sum-wlp06 = lwa_sum-wlp06 + gwa_print-wlp06.
lwa_sum-wlp07 = lwa_sum-wlp07 + gwa_print-wlp07.
lwa_sum-wlp08 = lwa_sum-wlp08 + gwa_print-wlp08.
lwa_sum-wlp09 = lwa_sum-wlp09 + gwa_print-wlp09.
lwa_sum-wlp10 = lwa_sum-wlp10 + gwa_print-wlp10.
lwa_sum-wlp11 = lwa_sum-wlp11 + gwa_print-wlp11.
lwa_sum-wlp12 = lwa_sum-wlp12 + gwa_print-wlp12.
lwa_sum-total_itd = lwa_sum-total_itd + gwa_print-total_itd.
CLEAR gwa_print.
ELSE.
CLEAR lv_posid.
CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT'
EXPORTING
input = gwa_print-posid
IMPORTING
output = lv_posid.

*To check if the WBS(<fs_print>-psphi) has any child WBS elements
READ TABLE lt_child_wbs INTO lwa_child_wbs
WITH KEY wbs_element = lv_posid.
IF sy-subrc EQ 0.
lwa_sum-pfy_total = lwa_sum-pfy_total + gwa_print-pfy_total.
* begin ins
lwa_sum-last_subm_total = lwa_sum-last_subm_total + gwa_print-last_subm_total.
lwa_sum-curr_subm_total = lwa_sum-curr_subm_total + gwa_print-curr_subm_total.
* end ins
lwa_sum-fy_total = lwa_sum-fy_total + gwa_print-fy_total.
lwa_sum-wlp01 = lwa_sum-wlp01 + gwa_print-wlp01.
lwa_sum-wlp02 = lwa_sum-wlp02 + gwa_print-wlp02.
lwa_sum-wlp03 = lwa_sum-wlp03 + gwa_print-wlp03.
lwa_sum-wlp04 = lwa_sum-wlp04 + gwa_print-wlp04.
lwa_sum-wlp05 = lwa_sum-wlp05 + gwa_print-wlp05.
lwa_sum-wlp06 = lwa_sum-wlp06 + gwa_print-wlp06.
lwa_sum-wlp07 = lwa_sum-wlp07 + gwa_print-wlp07.
lwa_sum-wlp08 = lwa_sum-wlp08 + gwa_print-wlp08.
lwa_sum-wlp09 = lwa_sum-wlp09 + gwa_print-wlp09.
lwa_sum-wlp10 = lwa_sum-wlp10 + gwa_print-wlp10.
lwa_sum-wlp11 = lwa_sum-wlp11 + gwa_print-wlp11.
lwa_sum-wlp12 = lwa_sum-wlp12 + gwa_print-wlp12.
lwa_sum-total_itd = lwa_sum-total_itd + gwa_print-total_itd.
CLEAR gwa_print.
ENDIF.
ENDIF.

AT LAST.
<fs_print>-pfy_total = lwa_sum-pfy_total.
* begin ins
<fs_print>-last_subm_total = lwa_sum-last_subm_total.
<fs_print>-curr_subm_total = lwa_sum-curr_subm_total.
* end ins
<fs_print>-fy_total = lwa_sum-fy_total.
<fs_print>-wlp01 = lwa_sum-wlp01.
<fs_print>-wlp02 = lwa_sum-wlp02.
<fs_print>-wlp03 = lwa_sum-wlp03.
<fs_print>-wlp04 = lwa_sum-wlp04.
<fs_print>-wlp05 = lwa_sum-wlp05.
<fs_print>-wlp06 = lwa_sum-wlp06.
<fs_print>-wlp07 = lwa_sum-wlp07.
<fs_print>-wlp08 = lwa_sum-wlp08.
<fs_print>-wlp09 = lwa_sum-wlp09.
<fs_print>-wlp10 = lwa_sum-wlp10.
<fs_print>-wlp11 = lwa_sum-wlp11.
<fs_print>-wlp12 = lwa_sum-wlp12.
<fs_print>-total_itd = lwa_sum-total_itd.
<fs_print>-budget_balance = <fs_print>-budget_awarded
- lwa_sum-total_itd.

IF <fs_print>-stufe EQ '001'.
*_ Sum subtotal of all projects to manually manipulate totals data
gs_proj_total-budget_awarded = gs_proj_total-budget_awarded
+ <fs_print>-budget_awarded.
gs_proj_total-pfy_total = gs_proj_total-pfy_total
+ lwa_sum-pfy_total.
gs_proj_total-fy_total = gs_proj_total-fy_total
+ lwa_sum-fy_total.

* begin ins
gs_proj_total-last_subm_total = gs_proj_total-last_subm_total
+ lwa_sum-last_subm_total.

gs_proj_total-curr_subm_total = gs_proj_total-curr_subm_total
+ lwa_sum-curr_subm_total.
* end ins

gs_proj_total-wlp01 = gs_proj_total-wlp01 + lwa_sum-wlp01.
gs_proj_total-wlp02 = gs_proj_total-wlp02 + lwa_sum-wlp02.
gs_proj_total-wlp03 = gs_proj_total-wlp03 + lwa_sum-wlp03.
gs_proj_total-wlp04 = gs_proj_total-wlp04 + lwa_sum-wlp04.
gs_proj_total-wlp05 = gs_proj_total-wlp05 + lwa_sum-wlp05.
gs_proj_total-wlp06 = gs_proj_total-wlp06 + lwa_sum-wlp06.
gs_proj_total-wlp07 = gs_proj_total-wlp07 + lwa_sum-wlp07.
gs_proj_total-wlp08 = gs_proj_total-wlp08 + lwa_sum-wlp08.
gs_proj_total-wlp09 = gs_proj_total-wlp09 + lwa_sum-wlp09.
gs_proj_total-wlp10 = gs_proj_total-wlp10 + lwa_sum-wlp10.
gs_proj_total-wlp11 = gs_proj_total-wlp11 + lwa_sum-wlp11.
gs_proj_total-wlp12 = gs_proj_total-wlp12 + lwa_sum-wlp12.
gs_proj_total-total_itd = gs_proj_total-total_itd
+ lwa_sum-total_itd.
gs_proj_total-budget_balance = gs_proj_total-budget_balance
+ <fs_print>-budget_balance.
ENDIF.
ENDAT.
ENDLOOP.



1 ACCEPTED SOLUTION
Read only

siongchao_ng
Contributor
0 Likes
2,796
This is actually the answer.

Use AT END of psphi so that every end of psphi can load in the summed value.

AT LAST.
      AT END OF psphi. 
This is actually the answer.

Use AT END of psphi so that every end of psphi can load in the summed value.

AT LAST.
      AT END OF psphi. 
6 REPLIES 6
Read only

Nitish2027
Participant
0 Likes
2,796

The question is not very clear just by the image alone. Please copy paste your code as well so that people can suggest where you might be going wrong.

Read only

siongchao_ng
Contributor
0 Likes
2,796

nitish2027 the codes added.

Read only

venkateswaran_k
Active Contributor
0 Likes
2,796

Hi siongchao.ng

Please add this statement before starting the Loop. ( Since you are using AT LAST - ) the internal table should be on that desired order.

SORT gt_print BY psphi stufe ASCENDING.

Regards,

Venkat

Read only

Nitish2027
Participant
0 Likes
2,796

As suggested by Venkat, sort gt_print table

SORT gt_print BY psphi stufe ASCENDING.

before looping on it. AT LAST requires the internal table to be sorted.

    LOOP AT gt_print INTO gwa_print
WHERE psphi = <fs_print>-psphi
AND stufe > <fs_print>-stufe.

This should resolve your issue here.

Read only

siongchao_ng
Contributor
0 Likes
2,796

nitish2027

The contents already sorted.

Read only

siongchao_ng
Contributor
0 Likes
2,797
This is actually the answer.

Use AT END of psphi so that every end of psphi can load in the summed value.

AT LAST.
      AT END OF psphi.