12-24-2007 2:54 AM
Hi,
There is one program need to calculat the SUB-TOTAL AMOUNT FOR SAME DOCUMENT NUMBER.
Means: Need to sumup betrg for the same belnr.
QUESTION:
How can I write the sorce cord In AT END OF...ENDAT.
TO SUMUP THE AMOUNT FOR SAME DOCUMENT NUMBER.
Please help!!
Thanks.
Here is the sourc code.
-
DATA: BEGIN OF t OCCURS 0,
bukrs LIKE knb1-bukrs,
*<<<<< CR01
zuonr Like bsid-zuonr, "sort key "CR01
*>>>>> CR01
belnr LIKE bsid-belnr,
kunnr LIKE kna1-kunnr,
bldat LIKE bsid-bldat,
budat LIKE bsid-budat,
netdt LIKE bsega-netdt,
waers LIKE bsid-waers,
wrbtr LIKE bsid-wrbtr,
shkzg LIKE bsid-shkzg,
xblnr LIKE bsid-xblnr, "WD041005a
sgtxt LIKE bsid-sgtxt,
dmbtr LIKE bsid-dmbtr,
END OF t.
Description of Interface-record RECON
DATA: BEGIN OF s,
belnr(10), " document number
*<<<< CR01 STRAT ADD ZUONR
zuonr(10), "sort key " CR01
*>>>> CR01 END ADD ZUONR
filler1(1),
KUNNR(5), " customer no."WD290705a
kunnr LIKE kna1-kunnr, " customer no."WD290705a
filler2(1),
bldat(10), " date
filler3(1),
budat(10),
filler4(1),
netdt(10), " due date for payment
filler5(1),
betrg(14), " amount
filler6(1),
waers(3), " currency
filler7(1), " document field - blank
compcode(4), " company-code "fw070905
filler8(1), " comment - blank
sgtxt(50), " Text "INS MG020207
filler9(1),
kmmnt(30),
filler10(1),
vbeln(12) ,
filler11(1),
xblnr(16), "WD041005a hier Referenznr rein
filler12(1),
lifn2(11),
filler13(1), " remark - blank
dmbtr(14),
filler14(1),
twaer(3),
END OF s.
DATA: BEGIN OF outtab OCCURS 1000,
s LIKE s,
END OF outtab.
*<<<<< INS MG020207
TYPES: BEGIN OF ty_outalv,
belnr(10), " document number
*<<<< CR01 START ADD ZUONR
zuonr, " sort key " CR01
*>>>>CR01 END ADD AUONR
kunnr LIKE kna1-kunnr, " customer no."WD290705a
bldat(10), " date
budat(10), " posting date
netdt(10), " due date for payment
betrg(14), " amount
waers(3), " currency
compcode(4), " company-code "fw070905
sgtxt(30), " comment
kmmnt(30), " comment
vbeln(12), " delivery number
xblnr(16), "WD041005a hier Referenznr rein
lifn2(11), " customer number
dmbtr(14),
twaer(3), " currency company code
END OF ty_outalv.
DATA: gt_outalv TYPE STANDARD TABLE OF ty_outalv.
DATA: gs_outalv TYPE ty_outalv.
*>>>>> INS MG020207
DATA: l_date TYPE sy-datum.
DATA: g_date TYPE sy-datum.
DATA: g_budat TYPE bsik-budat.
*<<<< CR01 START ADD DATA STATEMENT
DATA: wk_belnr LIKE bsid-zuonr,
wk_x_belnr LIKE bsid-zuonr,
ZUONR LIKE BSID-ZUONR,
WRBTR LIKE BSID-WRBTR,
WK_ZUONR LIKE BSID-ZUONR,
WK_WRBTR LIKE BSID-WRBTR.
*>>>> CR01 END ADD DATA STATEMENT
DATA: l_it_bsik TYPE STANDARD TABLE OF bsik. "INS MG050706
DATA: l_wa_bsik TYPE bsik. "INS MG050706
TYPE-POOLS: slis. "INS MG020207
DATA: "INS MG020207
gt_fieldcat TYPE slis_t_fieldcat_alv, "INS MG020207
gs_layout TYPE slis_layout_alv, "INS MG020207
gs_fieldcat TYPE slis_fieldcat_alv. "INS MG020207
-
END-OF-SELECTION.
SORT t.
LOOP AT t.
AT NEW bukrs.
CLEAR anz_dl.
CLEAR htext-anzahl.
CLEAR htext-datei.
htext-text1 = ' records writen in file '.
CLEAR p_pfad.
CONCATENATE
i_pfad
'CU_CC'
t-bukrs
'_'
sy-datum+6(2)
sy-datum+4(2)
sy-datum(4)
'_'
sy-uzeit
'.txt'
INTO p_pfad.
CLEAR outtab.
REFRESH outtab.
REFRESH: gt_outalv. "INS MG020207
ENDAT.
IF t-shkzg = 'H'.
h_betrg = t-wrbtr * -1.
ELSE.
h_betrg = t-wrbtr.
h_dmbtr = t-dmbtr.
ENDIF.
s-filler1 = s-filler2 = s-filler3 = s-filler4 = s-filler5 = ';'.
s-filler6 = s-filler7 = s-filler8 = ';'.
s-filler9 = s-filler10 = s-filler11 = s-filler12 = s-filler13 = ';'.
s-filler14 = ';'.
s-belnr = t-belnr.
IF t-xblnr NE space. "WD041005a
s-xblnr = t-xblnr. "WD041005a
ELSE. "WD041005a
s-xblnr = t-belnr. "WD041005a
ENDIF. "WD041005a
WHILE s-xblnr(1) EQ '0'. "INS MG130606
SHIFT s-xblnr LEFT. "INS MG130606
ENDWHILE. "INS MG130606
WRITE t-kunnr TO s-kunnr NO-ZERO.
s-lifn2 = s-kunnr.
shift s-lifn2 RIGHT.
s-lifn2(1) = 'R'.
S-KUNNR = T-KUNNR+5(5).
s-bldat+2(1) = '/'.
s-bldat+5(1) = '/'.
s-bldat0(2) = t-bldat4(2).
s-bldat3(2) = t-bldat6(2).
s-bldat6(4) = t-bldat0(4).
s-budat+2(1) = '/'.
s-budat+5(1) = '/'.
s-budat0(2) = t-budat4(2).
s-budat3(2) = t-budat6(2).
s-budat6(4) = t-budat0(4).
s-netdt+2(1) = '/'.
s-netdt+5(1) = '/'.
s-netdt0(2) = t-netdt4(2).
s-netdt3(2) = t-netdt6(2).
s-netdt6(4) = t-netdt0(4).
s-waers = t-waers.
s-dmbtr = t-dmbtr.
s-sgtxt = t-sgtxt.
CLEAR s-twaer.
SELECT SINGLE waers INTO s-twaer
FROM t001
WHERE bukrs = t-bukrs.
IF h_betrg < 0.
hs_betrg+0(1) = '-'.
ELSE.
hs_betrg+0(1) = ' '.
ENDIF.
WRITE h_betrg CURRENCY t-waers TO hs_betrg+1 NO-GROUPING
NO-SIGN
LEFT-JUSTIFIED.
REPLACE ',' WITH '.' INTO hs_betrg.
WRITE hs_betrg TO s-betrg.
IF h_dmbtr < 0.
hs_betrg+0(1) = '-'.
ELSE.
hs_betrg+0(1) = ' '.
ENDIF.
WRITE h_dmbtr CURRENCY t-waers TO hs_betrg+1 NO-GROUPING
NO-SIGN
LEFT-JUSTIFIED.
REPLACE ',' WITH '.' INTO hs_betrg.
WRITE hs_betrg TO s-dmbtr.
s-compcode = t-bukrs. "fw070905
IF p_downl = 'X'.
MOVE s TO outtab-s.
APPEND outtab.
ADD 1 TO anz_dl.
ENDIF.
gs_outalv-belnr = s-belnr. "INS MG020207
*<<<< CR01 START ADD as_outalv-zuonr
gs_outalv-zuonr = s-zuonr. "CR01
*>>>> CR01 EDD ADD as_outalv-zuonr
gs_outalv-kunnr = s-kunnr. "INS MG020207
gs_outalv-bldat = s-bldat. "INS MG020207
gs_outalv-netdt = s-netdt. "INS MG020207
gs_outalv-betrg = s-betrg. "INS MG020207
gs_outalv-waers = s-waers. "INS MG020207
gs_outalv-compcode = s-compcode. "INS MG020207
gs_outalv-budat = s-budat. "INS MG020207
gs_outalv-sgtxt = s-sgtxt.
gs_outalv-kmmnt = s-kmmnt.
gs_outalv-vbeln = s-vbeln.
gs_outalv-xblnr = s-xblnr.
gs_outalv-lifn2 = s-lifn2.
gs_outalv-dmbtr = s-dmbtr.
gs_outalv-twaer = s-twaer.
APPEND gs_outalv TO gt_outalv. "INS MG020207
AT END OF bukrs.
WRITE anz_dl TO htext-anzahl.
WRITE p_pfad TO htext-datei.
CONDENSE htext.
IF p_downl = 'X'.
SKIP 2.
WRITE: / htext.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = p_pfad
filetype = 'ASC'
TABLES
data_tab = outtab
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
write: / 'Error creating File:', P_Pfad, sy-subrc.
MESSAGE e405 WITH text-002 p_pfad.
ENDIF.
ENDIF.
*<<<<< INS MG020207
IF p_alvd EQ 'X'.
PERFORM build_layout_data.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_structure_name = 'GT_OUTALV'
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
i_callback_top_of_page = 'TOP-OF-PAGE'
TABLES
t_outtab = gt_outalv.
ENDIF.
*>>>>> INS MG020207
ENDAT.
ENDLOOP.
12-24-2007 3:35 AM
Hi,
Why are you using AT..ENDAT.
Have you tried with COLLECT statement.
Regards,
Atish
12-24-2007 3:35 AM
Hi,
Why are you using AT..ENDAT.
Have you tried with COLLECT statement.
Regards,
Atish
12-24-2007 3:41 AM
Hi,
if u want the subtotal in ALV output, u don't need to use AT-END OF....ENDON.
Sort the table you are passing to REUSE_ALV_GRID_DISPLAY
declare a int tab to store sort information whose TYPE should be SLIS_T_SORTINFO_ALV. and a workarea SLIS_SORTINFO_ALV
WA_SORT-FIELDNAME = 'BELNR'.
WA_SORT-DOWN = 'X'.
WA_SORT-SPOS = 1.
WA_SORT-SUBTOT = 'X'.
APPEND WA_SORT TO T_SORT.
& pass this T_SORT to IT_SORT in REUSE..............
this will work....
Reward if useful
Regards
ANUPAM
12-24-2007 4:42 AM
Hi,
Thans you very much for your email.
I tried to writ the codes as you adviced as following:
-
DATA:
t_sort type SLIS_T_SORTINFO_ALV,
wa_sort type SLIS_SORTINFO_ALV.
-
sort gt_outalv.
WA_SORT-FIELDNAME = 'BELNR'.
WA_SORT-DOWN = 'X'.
WA_SORT-SPOS = 1.
WA_SORT-SUBTOT = 'X'.
APPEND WA_SORT TO T_SORT.
**********************************************
So far, the subtotal wrbtr have not come out.
Question:
How can I "pass this T_SORT to IT_SORT in REUSE.............."?
Please help!!
Thank you.
12-24-2007 4:49 AM
hi,
In the FM REUSE_ALV_GRID_DISPLAY, there is an exporting parameter named IT_SORT. put IT_SORT = T_SORT..
Reward if useful
Regards
ANUPAM
12-24-2007 5:24 AM
Hi ANUPAM,
Thank you for you help so much.
I tried your advice, but the subtotal amount for
betrg(14), " amount
waers(3), " currency
have not come out!
Question,
How can i sum up the betrg which have same belnr number in alv?
Please help/
Thank you so much!
12-24-2007 3:52 AM
HI
Have alook at below program
&----
*& Report ZINTERNALTABLE
*&
&----
*&
*&
&----
REPORT zinternaltable.
TYPES:BEGIN OF itab,
num TYPE i,
name(10) TYPE c,
amt type i,
END OF itab.
DATA : wa_itab TYPE itab,
it_itab TYPE STANDARD TABLE OF itab.
DATA : v_lines TYPE i.
wa_itab-num = 1.
wa_itab-name = 'nag'.
wa_itab-amt = 1000.
append wa_itab TO it_itab.
wa_itab-num = 1.
wa_itab-name = 'nag'.
wa_itab-amt = 2000.
append wa_itab TO it_itab.
wa_itab-num = 1.
wa_itab-name = 'nag'.
wa_itab-amt = 1500.
append wa_itab TO it_itab.
wa_itab-num = 2.
wa_itab-name = 'sri'.
wa_itab-amt = 500.
append wa_itab tO it_itab.
wa_itab-num = 2.
wa_itab-name = 'sri'.
wa_itab-amt = 600.
append wa_itab TO it_itab.
wa_itab-num = 2.
wa_itab-name = 'sri'.
wa_itab-amt = 700.
append wa_itab TO it_itab.
wa_itab-num = 3.
wa_itab-name = 'ganesh'.
wa_itab-amt = 1200.
append wa_itab TO it_itab.
wa_itab-num = 3.
wa_itab-name = 'ganesh'.
wa_itab-amt = 1300.
append wa_itab TO it_itab.
wa_itab-num = 3.
wa_itab-name = 'ganesh'.
wa_itab-amt = 1400.
append wa_itab TO it_itab.
wa_itab-num = 4.
wa_itab-name = 'suresh'.
wa_itab-amt = 900.
append wa_itab TO it_itab.
wa_itab-num = 4.
wa_itab-name = 'suresh'.
wa_itab-amt = 300.
append wa_itab TO it_itab.
sort it_itab.
LOOP AT it_itab INTO wa_itab.
at first.
write 😕 'details of sales order:'.
uline.
endat.
at new num.
write 😕 'serial num:', wa_itab-num.
uline.
endat.
WRITE 😕 wa_itab-num , wa_itab-name , wa_itab-amt.
at end of num.
uline.
sum.
write 😕 'total amount:',wa_itab-amt.
uline.
endat.
*
at last.
sum.
uline.
write:/ 'grand total:',wa_itab-amt.
endat.
ENDLOOP.
describe table it_itab lines v_lines.
WRITE:/'no of records :', v_lines.
Regards
Nagesh.Paruchuri
12-24-2007 5:36 AM
hi,
sort the table u are passing in the FM by the field for which u want sub total.
the field for which u want sub total, pass X in the Parameter SUBTOT in Layout.
and the field whose subtotal is to be done pass X in the parameter DO_SUM in the Field catalog
Pls reward if helpful
12-24-2007 6:15 AM
hi,
Sorry for ask you so many times. I am learning abap recently. I am so cofused about FM.
I wrote the code as following:
DATA:
t_sort type SLIS_T_SORTINFO_ALV,
wa_sort type SLIS_SORTINFO_ALV.
sort gt_outalv.
WA_SORT-FIELDNAME = 'BELNR'.
WA_SORT-DOWN = 'X'.
WA_SORT-SPOS = 1.
WA_SORT-SUBTOT = 'X'.
APPEND WA_SORT TO T_SORT.
Here is the image of alv.
-
Specimen Adversary Amount
ZZZ 300100089 1050
ZZZ 300100089 -1050
90256243 300100000 193410
90256242 300100000 173250
90256241 300100000 173250
90256240 300100000 173250
90256239 300100000 173250
90256238 300100000 173250
90256237 300100000 173250
-
What I need to do it to sum up the amount for same "ADVERSARY"
The out-come image should be
-
Specimen Adversary Amount
ZZZ 300100089 1050
ZZZ 300100089 -1050
subtotal 0
90256243 300100000 193410
90256242 300100000 173250
90256241 300100000 173250
90256240 300100000 173250
90256239 300100000 173250
90256238 300100000 173250
90256237 300100000 173250
subtotal 1232910
I did what you told me, but the subtotal for the same adversary have no come out.Please help.
Sorry for bothering you fo much.
Thank you .