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: 

Profit center wise credit/debit calculation

Former Member
0 Kudos

Hi, SAP guru's

My vendor have required profit center wise cedit/debit calculation. I did this coading but in gt_list it append one blank line.due to this when i want to calculate the final debit credit it wont give proper value.please help me...

SELECT prctr dmbtr shkzg

FROM bsik

INTO TABLE gt_bsik

WHERE lifnr = s_lifnr AND bukrs = s_bukrs AND prctr <> ' '.

SORT gt_bsik BY prctr.

LOOP AT gt_bsik INTO gs_bsik WHERE shkzg = 'H'.

lv_prctr = gs_bsik-prctr.

AT NEW prctr.

lv_prctr = gs_bsik-prctr.

APPEND gs_list TO gt_list.

CLEAR lv_pr_dmbtr1.

ENDAT.

IF sy-subrc = 0.

lv_pr_dmbtr1 = lv_pr_dmbtr1 + gs_bsik-dmbtr.

ENDIF.

gs_list-prctr = lv_prctr.

gs_list-dmbtr = lv_pr_dmbtr1.

gs_list-shkzg = 'H'.

ENDLOOP.

APPEND gs_list TO gt_list.

CLEAR lv_prctr.

CLEAR gs_list.

LOOP AT gt_bsik INTO gs_bsik WHERE shkzg = 'S'.

AT NEW prctr.

lv_prctr = gs_bsik-prctr.

APPEND gs_list TO gt_list.

CLEAR lv_pr_dmbtr2.

ENDAT.

IF sy-subrc = 0.

lv_pr_dmbtr2 = lv_pr_dmbtr2 + gs_bsik-dmbtr.

ENDIF.

gs_list-prctr = lv_prctr.

gs_list-dmbtr = lv_pr_dmbtr2.

gs_list-shkzg = 'S'.

ENDLOOP.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Why R U doing Loop twice??

It should be like this .

SELECT prctr dmbtr shkzg
FROM bsik
INTO TABLE gt_bsik
WHERE lifnr = s_lifnr AND bukrs = s_bukrs AND prctr ' '.


SORT gt_bsik BY prctr.

LOOP AT gt_bsik INTO gs_bsik .


AT NEW prctr.
  CLEAR lv_prctr .
  CLEAR lv_pr_dmbtr1.
  CLEAR lv_pr_dmbtr2.
ENDAT.

lv_prctr = gs_bsik-prctr.

IF gs_bsik-shkzg = 'H'.
  lv_pr_dmbtr1 = lv_pr_dmbtr1 + gs_bsik-dmbtr.
ELSEIF gs_bsik-shkzg = 'S'.
  lv_pr_dmbtr2 = lv_pr_dmbtr2 + gs_bsik-dmbtr.
ENDIF.

AT END OF prctr .
  gs_list-prctr = lv_prctr.
  gs_list-dmbtr = lv_pr_dmbtr1.
  gs_list-shkzg = 'H'.
  APPEND gs_list TO gt_list.

  gs_list-prctr = lv_prctr.
  gs_list-dmbtr = lv_pr_dmbtr2.
  gs_list-shkzg = 'S'.
  APPEND gs_list TO gt_list.
ENDAT.

ENDLOOP.

Jitendra

5 REPLIES 5

Former Member
0 Kudos

Why R U doing Loop twice??

It should be like this .

SELECT prctr dmbtr shkzg
FROM bsik
INTO TABLE gt_bsik
WHERE lifnr = s_lifnr AND bukrs = s_bukrs AND prctr ' '.


SORT gt_bsik BY prctr.

LOOP AT gt_bsik INTO gs_bsik .


AT NEW prctr.
  CLEAR lv_prctr .
  CLEAR lv_pr_dmbtr1.
  CLEAR lv_pr_dmbtr2.
ENDAT.

lv_prctr = gs_bsik-prctr.

IF gs_bsik-shkzg = 'H'.
  lv_pr_dmbtr1 = lv_pr_dmbtr1 + gs_bsik-dmbtr.
ELSEIF gs_bsik-shkzg = 'S'.
  lv_pr_dmbtr2 = lv_pr_dmbtr2 + gs_bsik-dmbtr.
ENDIF.

AT END OF prctr .
  gs_list-prctr = lv_prctr.
  gs_list-dmbtr = lv_pr_dmbtr1.
  gs_list-shkzg = 'H'.
  APPEND gs_list TO gt_list.

  gs_list-prctr = lv_prctr.
  gs_list-dmbtr = lv_pr_dmbtr2.
  gs_list-shkzg = 'S'.
  APPEND gs_list TO gt_list.
ENDAT.

ENDLOOP.

Jitendra

0 Kudos

Dear Jitendra,

Thank's for reply,it's working now but there is another problem.I want to take the Profit center wise final debit & creadit

(Shown last in Bold) but elseif condition is not working.please help me. thanx

SELECT prctr dmbtr shkzg

FROM bsik

INTO TABLE gt_bsik

WHERE lifnr = s_lifnr AND bukrs = s_bukrs AND prctr <> ' '.

SORT gt_bsik BY prctr.

LOOP AT gt_bsik INTO gs_bsik .

AT NEW prctr.

CLEAR lv_prctr .

CLEAR lv_pr_dmbtr1.

CLEAR lv_pr_dmbtr2.

ENDAT.

lv_prctr = gs_bsik-prctr.

IF gs_bsik-shkzg = 'H'.

lv_pr_dmbtr1 = lv_pr_dmbtr1 + gs_bsik-dmbtr.

ELSEIF gs_bsik-shkzg = 'S'.

lv_pr_dmbtr2 = lv_pr_dmbtr2 + gs_bsik-dmbtr.

ENDIF.

AT END OF prctr .

gs_list-prctr = lv_prctr.

gs_list-dmbtr = lv_pr_dmbtr1.

gs_list-shkzg = 'H'.

APPEND gs_list TO gt_list.

gs_list-prctr = lv_prctr.

gs_list-dmbtr = lv_pr_dmbtr2.

gs_list-shkzg = 'S'.

APPEND gs_list TO gt_list.

ENDAT.

ENDLOOP.

LOOP AT gt_list INTO gs_list.

AT NEW prctr.

CLEAR lv_prctr .

CLEAR lv_plant_dmbtr1.

CLEAR lv_plant_dmbtr2.

ENDAT.

lv_prctr = gs_list-prctr.

IF gs_list-shkzg = 'H'.

lv_plant_dmbtr1 = gs_list-dmbtr.

ELSEIF gs_list-shkzg = 'S'.

lv_plant_dmbtr2 = gs_list-dmbtr.

ENDIF.

lv_plant_dmbtr = lv_plant_dmbtr1 - lv_plant_dmbtr2.

AT END OF prctr .

gs_plant-prctr = lv_prctr.

gs_plant-dmbtr = lv_plant_dmbtr1.

APPEND gs_plant TO gt_plant.

ENDAT.

ENDLOOP.

0 Kudos

sorry to disturbing you...............

thanx u very much it solved

thanx..........

0 Kudos

Atulks ,

always think about your program performace, no need to do loop again for final H - S . You can do in single loop .

try this .

SELECT prctr dmbtr shkzg
FROM bsik
INTO TABLE gt_bsik
WHERE lifnr = s_lifnr AND bukrs = s_bukrs AND prctr ' '.

SORT gt_bsik BY prctr.

LOOP AT gt_bsik INTO gs_bsik .


AT NEW prctr.
CLEAR lv_prctr .
CLEAR lv_pr_dmbtr1.
CLEAR lv_pr_dmbtr2.
CLEAR lv_plant_dmbtr.
ENDAT.

lv_prctr = gs_bsik-prctr.

IF gs_bsik-shkzg = 'H'.
lv_pr_dmbtr1 = lv_pr_dmbtr1 + gs_bsik-dmbtr.
ELSEIF gs_bsik-shkzg = 'S'.
lv_pr_dmbtr2 = lv_pr_dmbtr2 + gs_bsik-dmbtr.
ENDIF.

AT END OF prctr .

gs_list-prctr = lv_prctr.
gs_list-dmbtr = lv_pr_dmbtr1.
gs_list-shkzg = 'H'.
APPEND gs_list TO gt_list.

gs_list-prctr = lv_prctr.
gs_list-dmbtr = lv_pr_dmbtr2.
gs_list-shkzg = 'S'.
APPEND gs_list TO gt_list.

lv_plant_dmbtr = lv_plant_dmbtr1 - lv_plant_dmbtr2.

gs_plant-prctr = lv_prctr.
gs_plant-dmbtr = lv_plant_dmbtr.
APPEND gs_plant TO gt_plant.
ENDAT.

ENDLOOP.

Jitendra

sachin_jadhav8
Participant
0 Kudos

Hello,

Try below code,

SELECT prctr dmbtr shkzg

FROM bsik

INTO TABLE gt_bsik

WHERE lifnr = s_lifnr AND bukrs = s_bukrs AND prctr ' '.

SORT gt_bsik BY prctr.

LOOP AT gt_bsik INTO gs_bsik WHERE shkzg = 'H'.

lv_prctr = gs_bsik-prctr.

AT NEW prctr.

lv_prctr = gs_bsik-prctr.

IF sy-subrc = 0.

lv_pr_dmbtr1 = lv_pr_dmbtr1 + gs_bsik-dmbtr.

ENDIF.

gs_list-prctr = lv_prctr.

gs_list-dmbtr = lv_pr_dmbtr1.

gs_list-shkzg = 'H'.

APPEND gs_list TO gt_list.

CLEAR : lv_pr_dmbtr1,gs_list.

ENDAT.

ENDLOOP.

LOOP AT gt_bsik INTO gs_bsik WHERE shkzg = 'S'.

AT NEW prctr.

lv_prctr = gs_bsik-prctr.

IF sy-subrc = 0.

lv_pr_dmbtr2 = lv_pr_dmbtr2 + gs_bsik-dmbtr.

ENDIF.

gs_list-prctr = lv_prctr.

gs_list-dmbtr = lv_pr_dmbtr2.

gs_list-shkzg = 'S'.

APPEND gs_list TO gt_list.

CLEAR lv_pr_dmbtr2,gs_list.

ENDAT.

ENDLOOP.

Regards,

Sachin