05-08-2010 5:31 AM
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.
05-08-2010 6:22 AM
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
05-08-2010 6:22 AM
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
05-08-2010 7:15 AM
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.
05-08-2010 7:31 AM
sorry to disturbing you...............
thanx u very much it solved
thanx..........
05-08-2010 7:52 AM
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
05-08-2010 6:23 AM
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