2008 Sep 11 11:56 PM
Hello,
We are having problem with below report. I'm able to send emails(invoice) as PDF attachments , but the attached PDF file wont open. I'm getting a message "Adobe reader could not open attachement the file has been damaged".This report works in our old version 4.6c but we just upgrade to ecc6. Please Please help.
Thanks,
Jose
************************************************************************
REPORT zrfi_customer_statement_new
NO STANDARD PAGE HEADING
MESSAGE-ID zm_load
LINE-SIZE 325
LINE-COUNT 65(3).
-
Tables *
-
TABLES:
bsid, bsad, knb1, kna1, knkk, t001, t014, t179t,
t052, fplt, vbap, veda, vbrk, vbpa, vbkd, knvk,
cepct, tvzbt, vbak, bsik, tsp01, usr21,adr6, tsp03l.
-
Internal tables *
-
*
DATA: i_bsid LIKE bsid OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF i_bukrs OCCURS 0,
bukrs LIKE bsid-bukrs,
waers LIKE bsid-waers,
END OF i_bukrs.
DATA:
BEGIN OF i_temp_data OCCURS 0,
bukrs LIKE bsid-bukrs, " Company code
kunnr LIKE bsid-kunnr, " Customer
belnr LIKE bsid-belnr, " Invoice
gjahr LIKE bsid-gjahr, " Fiscal year
waers LIKE bsid-waers, " Currency
rebzg LIKE bsid-rebzg,
bldat LIKE bsid-bldat, " Posting date
shkzg LIKE bsid-shkzg, " Debit/Credit
zfbdt LIKE bsid-zfbdt, " Baseline date
zterm LIKE bsid-zterm, " Terms of payment key
dmbtr LIKE bsid-dmbtr, " company currency
dmbe2 LIKE bsid-dmbe2, " Amount in Group Currency
days LIKE rfposxext-verzn, " No of Arrear Days
kidno LIKE bsid-kidno, " Payment reference number
kunnr_c LIKE vbak-kunnr, " Partner Number
name_c(50), " Partner Last name
matnr LIKE vbap-matnr, " Material no
arktx LIKE vbap-arktx, " material description
vbeln LIKE vbap-vbeln, " Contract/Order no
inv_date LIKE vbrk-fkdat,
xblnr LIKE bsid-xblnr,
xblnr LIKE bsid-zuonr,
vtext LIKE vbap-arktx, "material description
sgtxt LIKE bsid-sgtxt,
plant LIKE t001w-name1,
zzihrez_e LIKE vbap-zzihrez_e,
vvtext LIKE tvzbt-vtext,
blart LIKE bsid-blart,
zuonr LIKE bsid-zuonr,
END OF i_temp_data.
DATA:
BEGIN OF itab OCCURS 0,
kunnr LIKE bsid-kunnr, " Customer
bukrs LIKE bsid-bukrs, " Company code
kunnr_c LIKE vbak-kunnr, " Partner Number
name_c(50), " Partner Last name
matnr LIKE vbap-matnr, " Material no
kidno LIKE bseg-kidno, " Payment reference
name1 LIKE kna1-name1, " Customer name
belnr LIKE bsid-belnr, " Invoice
waers LIKE bsid-waers, " Currency ( Document )
gjahr LIKE bsid-gjahr, " Fiscal year
zfbdt LIKE bsid-zfbdt, " Baseline date
zterm LIKE bsid-zterm, " Terms of payment key
amt00_30 TYPE netwr_ak, " 000 - 030 Days
amt31_60 TYPE netwr_ak, " 031 - 060 Days
amt61_90 TYPE netwr_ak, " 061 - 090 Days
amt91_120 TYPE netwr_ak, " 090 - 120 Days
amt120pls TYPE netwr_ak, " 120+ Days
total TYPE netwr_ak, " Row Total
inv_date LIKE vbrk-fkdat,
rebzg LIKE bsid-rebzg,
xblnr LIKE bsid-xblnr,
xblnr LIKE bsid-zuonr,
sgtxt LIKE bsid-sgtxt,
days(5) , " No of Arrear Days
inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
vtext LIKE t179t-vtext,
zzihrez_e LIKE vbap-zzihrez_e,
plant LIKE t001w-name1,
vvtext LIKE tvzbt-vtext,
bldat LIKE bsid-bldat,
blart LIKE bsid-blart,
zuonr LIKE bsid-zuonr,
END OF itab.
DATA: BEGIN OF i_final OCCURS 0,
inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
bldat LIKE bsid-bldat,
xblnr LIKE bsid-xblnr,
inv_date LIKE vbrk-fkdat,
name_c(50), " Partner Last name
vtext LIKE t179t-vtext,
zzihrez_e LIKE vbap-zzihrez_e,
plant LIKE t001w-name1,
vvtext LIKE tvzbt-vtext,
total TYPE netwr_ak, " Row Total
days(5) , " No of Arrear Days
waers LIKE bsid-waers,
blart LIKE bsid-blart,
zuonr LIKE bsid-zuonr,
END OF i_final.
DATA: BEGIN OF i_last OCCURS 0,
kunnr LIKE vbak-kunnr,
inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
bldat LIKE bsid-bldat,
xblnr LIKE bsid-xblnr,
inv_date LIKE vbrk-fkdat,
name_c(50), " Partner Last name
vtext LIKE t179t-vtext,
zzihrez_e LIKE vbap-zzihrez_e,
plant LIKE t001w-name1,
vvtext LIKE tvzbt-vtext,
total TYPE netwr_ak, " Row Total
days(5) , " No of Arrear Days
waers LIKE bsid-waers,
blart LIKE bsid-blart,
zuonr LIKE bsid-zuonr,
END OF i_last.
DATA: i_bsik LIKE bsik OCCURS 0 WITH HEADER LINE.
DATA: itab_temp LIKE itab OCCURS 100 WITH HEADER LINE.
DATA:
BEGIN OF itab_details OCCURS 0,
bukrs LIKE bsid-bukrs, " Company code
xblnr LIKE bsid-xblnr,
gjahr LIKE bsid-gjahr,
belnr LIKE bsid-belnr,
kunnr LIKE bsid-kunnr,
END OF itab_details.
DATA: BEGIN OF x_kna1 OCCURS 0,
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
name2 LIKE kna1-name2,
ptext LIKE tpfkt-vtext,
street LIKE adrc-street,
ort01 LIKE kna1-ort01,
regio LIKE kna1-regio,
pstlz LIKE kna1-pstlz,
landx LIKE t005t-landx,
agdate LIKE sy-datum, " aging date
END OF x_kna1.
DATA: BEGIN OF i_total OCCURS 0,
waers LIKE bsid-waers,
00_30 TYPE netwr_ak,
31_60 TYPE netwr_ak,
61_90 TYPE netwr_ak,
91_120 TYPE netwr_ak,
120pls TYPE netwr_ak,
total TYPE netwr_ak,
END OF i_total.
DATA: i_ssfcrescl TYPE ssfcrescl.
DATA: i_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE.
DATA: i_ssfctrlop LIKE ssfctrlop OCCURS 0 WITH HEADER LINE.
DATA: v_itcpo LIKE itcpo.
DATA: BEGIN OF itab_vender OCCURS 0,
vender LIKE kna1-kunnr,
END OF itab_vender.
DATA: BEGIN OF ioutput OCCURS 0,
kunnr LIKE vbrk-kunrg,
kname(50),
email(50),
error(1),
END OF ioutput.
DATA: vv_text(90).
-
Structures *
-
DATA: x_item LIKE rfposxext.
DATA: x_t001 LIKE t001.
DATA: x_bsegp LIKE bsegp.
-
Variables *
-
DATA: v_count TYPE i.
DATA: v_dialog TYPE c VALUE 'X'.
DATA: v_name1 LIKE kna1-name1,
v_name2 LIKE kna1-name2,
v_print LIKE tsp03l-padest,
v_formname(20),
v_flag.
DATA: f_recap_report(1) TYPE c. " Flag for recap report
DATA:
BEGIN OF x_amt,
amt00_ls LIKE bsid-wrbtr,
00_30 LIKE bsid-wrbtr,
31_60 LIKE bsid-wrbtr,
61_90 LIKE bsid-wrbtr,
91_120 LIKE bsid-wrbtr,
120pls LIKE bsid-wrbtr,
END OF x_amt.
DATA: BEGIN OF itab_bill OCCURS 0,
vbeln LIKE vbfa-vbeln,
fplnr LIKE vbfa-fplnr,
fpltr LIKE vbfa-fpltr,
END OF itab_bill.
DATA: v_sdate LIKE vbrk-fkdat,
v_edate LIKE vbrk-fkdat,
v_order(10) TYPE n.
DATA: v_eddate(10), v_stdate(10).
DATA: v_num TYPE i,
v_stat,
v_bill_prd(24),
v_counter TYPE c.
DATA: v_matnr LIKE vbrp-matnr,
v_arktx LIKE vbrp-arktx,
v_vbeln LIKE vbrp-vbeln,
v_vvtext LIKE t176t-vtext,
v_posnr LIKE vbap-posnr,
v_kunnr_c LIKE vbak-kunnr,
v_name_c(50),
v_inv_date LIKE vbrk-fkdat,
v_vdatu LIKE vbak-vdatu,
v_auart LIKE vbak-auart,
v_prctr LIKE vbap-prctr,
v_zzihrez LIKE vbap-zzihrez_e,
v_plant LIKE t001w-name1,
p_form TYPE tdsfname,
fm_name TYPE rs38l_fnam.
DATA: i_ssfcompop TYPE ssfcompop OCCURS 0." WITH HEADER LINE.
DATA: addr_no LIKE kna1-adrnr,
last_name LIKE kna1-name1,
first_name LIKE kna1-name1,
pafkt LIKE knvk-pafkt,
lang LIKE knvk-parla,
v_land LIKE adrc-country,
v_lines TYPE i.
DATA: v_tabix LIKE sy-tabix, v_gjahr LIKE bsid-gjahr,
v_kunnr LIKE vbak-kunnr, v_prodh LIKE vbap-prodh,
v_vtext LIKE t179t-vtext.
DATA: spno LIKE tsp01-rqident,
mi_bytecount TYPE i,
mstr_print_parms LIKE pri_params,
downfile(128) VALUE 'c:\customer.pdf',
mtab_pdf LIKE tline OCCURS 0 WITH HEADER LINE.
DATA: packing_list TYPE TABLE OF sopcklsti1 WITH HEADER LINE,
contents_txt TYPE TABLE OF solisti1 WITH HEADER LINE,
v_email LIKE adr6-smtp_addr,
v_returncode,
contents_hex TYPE TABLE OF solix," WITH HEADER LINE,
w_contents_hex TYPE solix ,
receivers TYPE TABLE OF somlreci1 WITH HEADER LINE.
DATA: att_pos TYPE i.
DATA: document_data LIKE sodocchgi1.
DATA: esubject LIKE sood1-objdes. "subject line
DATA: emsgs TYPE TABLE OF solisti1 WITH HEADER LINE.
DATA: pdf TYPE TABLE OF tline WITH HEADER LINE.
DATA: BEGIN OF itext OCCURS 200,
text(132),
END OF itext.
DATA: i_fields LIKE sval OCCURS 0 WITH HEADER LINE.
DATA: v_ccemail LIKE adr6-smtp_addr,
v_check,
v_kname(50).
DATA: otf_data1 LIKE itcoo OCCURS 0 WITH HEADER LINE,
i_itcpp LIKE itcpp.
-
*FIELD-GROUPS: HEADER, ...
-
FIELD-GROUPS: header,
details.
-
Selection Screen
-
*
SELECTION-SCREEN BEGIN OF BLOCK a10 WITH FRAME TITLE text-sa1.
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-sa1.
PARAMETERS : p_ex_ic AS CHECKBOX DEFAULT 'X'. "R3DK906903
SELECTION-SCREEN END OF BLOCK a1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS : s_kunnr FOR bsid-kunnr,
s_bukrs FOR t001-bukrs OBLIGATORY.
PARAMETERS : p_bdate LIKE sy-datum OBLIGATORY.
PARAMETERS: p_vender AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s11.
PARAMETERS : r_group RADIOBUTTON GROUP r1,
r_comp RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-s13.
PARAMETERS: p_print LIKE tsp03l-lname MATCHCODE OBJECT prin
OBLIGATORY DEFAULT 'locl'.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-s14.
PARAMETERS: v_immed AS CHECKBOX DEFAULT 'X',
v_dele AS CHECKBOX DEFAULT 'X',
ch_email AS CHECKBOX.
*PARAMETERS:ch_down AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b4.
SELECTION-SCREEN END OF BLOCK a10.
************************************************************************
AT SELECTION-SCREEN.
Selection Screen Validation.
PERFORM validate_selection_screen.
************************************************************************
INITIALIZATION.
************************************************************************
INITIALIZATION.
IF sy-sysid NE 'R3P'.
v_email = .
ENDIF.
************************************************************************
START-OF-SELECTION.
************************************************************************
START-OF-SELECTION.
IF p_vender = 'X'.
Fetch data from BSIK .
PERFORM fetch_data_vender.
Get Arrear Days
PERFORM get_arrear_days_vender.
ENDIF.
Fetch data from BSID and BSAD.
PERFORM fetch_data_from_bsid.
Get Arrear Days
PERFORM get_arrear_days.
Format Data as per selection.
PERFORM format_final_data.
Print sapscript
SORT i_last BY kunnr days DESCENDING.
LOOP AT i_last.
AT NEW kunnr.
CLEAR: i_final, x_kna1.
REFRESH: i_final, x_kna1.
PERFORM get_address.
PERFORM get_total.
ENDAT.
MOVE-CORRESPONDING i_last TO i_final.
i_final-xblnr = i_final-zuonr.
APPEND i_final.
CLEAR i_final.
AT END OF kunnr.
SORT i_final BY days DESCENDING inv_chk total DESCENDING.
PERFORM smart_from.
ENDAT.
ENDLOOP.
************************************************************************
END-OF-SELECTION.
************************************************************************
END-OF-SELECTION.
&----
*& Form FETCH_DATA_FROM_BSID
&----
text
-
FORM fetch_data_from_bsid.
fetch data from BSID into Internal table I_BSID.
SELECT *
FROM bsid
INTO TABLE i_bsid
WHERE bukrs IN s_bukrs AND
kunnr IN s_kunnr AND
budat LE p_bdate ."AND
BELNR in ('0090000231','1400000131').
Fetch data from BSAD into Internal table I_BSID.
SELECT *
FROM bsad
APPENDING TABLE i_bsid
WHERE bukrs IN s_bukrs AND
kunnr IN s_kunnr AND
budat LE p_bdate AND
augdt GT p_bdate." AND
DELETE i_bsid WHERE ( bukrs = '1500' OR bukrs = '3000' OR
bukrs = '1400' ) AND
( umsks = 'E' OR umskz = 'E' ).
*Exclude intercompany customers
IF p_ex_ic = 'X'.
DELETE i_bsid WHERE kunnr+0(2) EQ 'IC'.
ENDIF.
CLEAR sy-tfill.
DESCRIBE TABLE i_bsid LINES sy-tfill.
IF sy-tfill = 0.
MESSAGE i999 WITH ' No data selected for the selection Condition'.
STOP.
ENDIF.
ENDFORM. " FETCH_DATA_FROM_BSID
&----
*& Form Get_Arrear_Days
&----
text
-
FORM get_arrear_days.
SORT i_bsid BY bukrs belnr.
LOOP AT i_bsid.
for company code 1500 and 3000
IF i_bsid-bukrs EQ '1500' OR i_bsid-bukrs EQ '3000'.
MOVE i_bsid-xblnr TO i_bsid-belnr.
ENDIF.
MOVE i_bsid-bukrs TO itab_details-bukrs.
MOVE i_bsid-xblnr TO itab_details-xblnr.
MOVE i_bsid-belnr TO itab_details-belnr.
MOVE i_bsid-gjahr TO itab_details-gjahr.
MOVE i_bsid-kunnr TO itab_details-kunnr.
APPEND itab_details.
CLEAR itab_details.
CLEAR x_item.
AT NEW bukrs.
READ TABLE i_bsid INDEX sy-tabix.
CLEAR x_t001.
SELECT SINGLE * FROM t001
INTO x_t001
WHERE bukrs = i_bsid-bukrs.
ENDAT.
for company code 1500 and 3000 .
IF i_bsid-bukrs EQ '1500' OR i_bsid-bukrs EQ '3000'.
MOVE i_bsid-xblnr TO i_bsid-belnr.
ENDIF.
MOVE-CORRESPONDING i_bsid TO x_item.
x_item-koart = 'D'. " Debitor - Customer Indicator
x_item-konto = bsid-kunnr. " Debitor - Customer Number
x_item-dmshb = bsid-dmbtr.
x_item-wrshb = bsid-wrbtr.
Function module to get ARREAR days.
CALL FUNCTION 'ITEM_DERIVE_FIELDS'
EXPORTING
s_t001 = x_t001
s_bsegp = x_bsegp
key_date = p_bdate
CHANGING
s_item = x_item
EXCEPTIONS
bad_input = 1
OTHERS = 2.
IF sy-subrc = 0.
Populate I_TEMP_DATA for further processing.
i_temp_data-bukrs = i_bsid-bukrs.
i_temp_data-kunnr = i_bsid-kunnr.
i_temp_data-belnr = i_bsid-belnr.
i_temp_data-bldat = i_bsid-bldat.
i_temp_data-shkzg = i_bsid-shkzg.
i_temp_data-zfbdt = i_bsid-zfbdt.
i_temp_data-zterm = i_bsid-zterm.
i_temp_data-vbeln = i_bsid-vbeln.
i_temp_data-waers = i_bsid-waers.
IF x_item-verzn < 0.
x_item-verzn = 0.
ENDIF.
i_temp_data-zuonr = i_bsid-zuonr.
i_temp_data-days = x_item-verzn.
i_temp_data-gjahr = i_bsid-gjahr.
i_temp_data-kidno = i_bsid-kidno.
i_temp_data-rebzg = i_bsid-rebzg.
i_temp_data-xblnr = i_bsid-xblnr.
i_temp_data-sgtxt = i_bsid-sgtxt.
Changing the Sign
IF i_bsid-shkzg = 'H'.
i_temp_data-dmbe2 = i_temp_data-dmbe2 + ( -1 * i_bsid-dmbe2 ).
i_temp_data-dmbtr = i_temp_data-dmbtr + ( -1 * i_bsid-dmbtr ).
ELSE.
i_temp_data-dmbe2 = i_temp_data-dmbe2 + i_bsid-dmbe2.
i_temp_data-dmbtr = i_temp_data-dmbtr + i_bsid-dmbtr.
ENDIF.
i_temp_data-blart = i_bsid-blart.
*for doc type DR
IF i_bsid-blart = 'DR' AND i_bsid-bschl = '01'.
IF i_bsid-sgtxt IS INITIAL.
*Changed our phone number to
MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
ELSE.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
MOVE 'Financial Invoice' TO i_temp_data-vvtext.
ENDIF.
ENDIF.
*for doc type AB
IF i_bsid-blart = 'AB' AND
( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
i_temp_data-bldat = i_bsid-zfbdt.
i_temp_data-xblnr = i_bsid-vbeln.
IF NOT i_bsid-sgtxt IS INITIAL.
*Changed our phone nuber to
MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
MOVE 'Financial Doc' TO i_temp_data-vvtext.
ELSE.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
MOVE 'Financial Doc' TO i_temp_data-vvtext.
ENDIF.
ENDIF.
*for doc type DG
IF i_bsid-blart = 'DG' AND
( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
i_temp_data-bldat = i_bsid-zfbdt.
i_temp_data-xblnr = i_bsid-vbeln.
IF i_bsid-sgtxt IS INITIAL.
*Changed our phone nuber to
MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
ELSE.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
MOVE 'Financial Doc' TO i_temp_data-vvtext.
ENDIF.
ENDIF.
*To display Debit memo and credit memo.
IF i_bsid-blart = 'DG'.
IF ( i_bsid-bschl GE '11' AND i_bsid-bschl LE '19' ).
MOVE 'Credit Memo' TO i_temp_data-vvtext.
ELSEIF ( i_bsid-bschl GE '01' AND i_bsid-bschl LE '09' ).
MOVE 'Debit Memo' TO i_temp_data-vvtext.
ENDIF.
ENDIF.
*for doc type DZ
IF i_bsid-blart = 'DZ' AND
( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
IF i_bsid-sgtxt IS INITIAL.
*changed our phone number to
MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
ELSE.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
MOVE 'Cust Pmt' TO i_temp_data-vvtext.
ENDIF.
ENDIF.
*Document type DZ and posting key 15
IF i_bsid-blart = 'DZ' AND
i_bsid-bschl EQ '15'.
MOVE 'Cust Pmt' TO i_temp_data-vvtext.
ENDIF.
*Document type DZ and posting key 06.
IF i_bsid-blart = 'DZ' AND
i_bsid-bschl EQ '06'.
MOVE 'Debit' TO i_temp_data-vvtext.
ENDIF.
*Document type DA and posting key 04, 14.
IF i_bsid-blart = 'DA' AND
i_bsid-bschl EQ '04' OR
i_bsid-bschl EQ '14'.
MOVE 'Cust Pmt' TO i_temp_data-vvtext.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
IF i_bsid-sgtxt IS INITIAL.
MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
ENDIF.
ENDIF.
ENDIF.
*billing period
IF i_bsid-blart = 'RV' AND i_bsid-bschl = '01'.
PERFORM billing_period USING i_temp_data-belnr
i_temp_data-vbeln.
ENDIF.
AT END OF belnr.
at end of zuonr.
APPEND i_temp_data.
CLEAR i_temp_data.
ENDAT.
ENDLOOP.
PERFORM material_details.
ENDFORM. " Get_Arrear_Days
&----
*& Form FORMAT_FINAL_DATA
&----
text
-
FORM format_final_data.
PERFORM pop_format_grp_curr_detail.
CLEAR: itab_temp, i_total.
REFRESH: itab_temp, i_total.
itab_temp] = itab[.
CLEAR itab.
REFRESH itab.
LOOP AT itab_temp.
CLEAR itab.
itab = itab_temp.
CLEAR: itab-matnr.
IF itab-belnr+0(2) = '14'.
*Adding two 00 for the left alignment.
CONCATENATE '00' itab-xblnr
INTO itab-inv_chk.
CONDENSE itab-inv_chk NO-GAPS.
itab-inv_chk = itab-xblnr.
itab-xblnr = itab-belnr.
ELSE.
itab-inv_chk = itab-belnr.
ENDIF.
COLLECT itab.
ENDLOOP.
CLEAR v_stat.
SORT itab BY days inv_chk total DESCENDING.
LOOP AT itab.
*To display Aging totals in usd (if v_stat ne f) for
*company code 1100,1300,2000.
IF itab-bukrs NE '1100' AND
itab-bukrs NE '1300' AND
itab-bukrs NE '2000'.
v_stat = 'F'.
ENDIF.
CLEAR: i_last-vvtext, tvzbt.
MOVE-CORRESPONDING itab TO i_last.
APPEND i_last.
CLEAR i_last.
ENDLOOP.
ENDFORM. " FORMAT_FINAL_DATA
&----
*& Form POP_FORMAT_grp_CURR_DETAIL
&----
text
-
FORM pop_format_grp_curr_detail.
Populating the Final Internal table for report by Group Currency.
CLEAR x_amt.
SORT i_temp_data.
LOOP AT i_temp_data.
CLEAR: v_count.
IF i_temp_data-sgtxt+0(10) = 'Spcfy in p'.
i_temp_data-sgtxt = i_temp_data-sgtxt+32(18).
MOVE i_temp_data-sgtxt TO i_temp_data-vtext.
MODIFY i_temp_data.
ENDIF.
IF r_comp = 'X'.
IF i_temp_data-days LT 0.
x_amt-amt00_ls = x_amt-amt00_ls + i_temp_data-dmbtr.
If between 1 and 30 Days.
ELSEIF i_temp_data-days GE 0 AND i_temp_data-days LE 30.
x_amt-00_30 = x_amt-00_30 + i_temp_data-dmbtr.
If between 31 and 60 Days.
ELSEIF i_temp_data-days GE 31 AND i_temp_data-days LE 60.
x_amt-31_60 = x_amt-31_60 + i_temp_data-dmbtr.
if between 61 and 90
ELSEIF i_temp_data-days GE 61 AND i_temp_data-days LE 90.
x_amt-61_90 = x_amt-61_90 + i_temp_data-dmbtr.
if between 91 and 120
ELSEIF i_temp_data-days GE 91 AND i_temp_data-days LE 120.
x_amt-91_120 = x_amt-91_120 + i_temp_data-dmbtr.
if > 120
ELSEIF i_temp_data-days GT 120.
x_amt-120pls = x_amt-120pls + i_temp_data-dmbtr.
ENDIF.
ELSE.
if the group currency is selected
IF i_temp_data-days LT 0.
x_amt-amt00_ls = x_amt-amt00_ls + i_temp_data-dmbe2.
If between 1 and 30 Days.
ELSEIF i_temp_data-days GE 0 AND i_temp_data-days LE 30.
x_amt-00_30 = x_amt-00_30 + i_temp_data-dmbe2.
If between 31 and 60 Days.
ELSEIF i_temp_data-days GE 31 AND i_temp_data-days LE 60.
x_amt-31_60 = x_amt-31_60 + i_temp_data-dmbe2.
if between 61 and 90
ELSEIF i_temp_data-days GE 61 AND i_temp_data-days LE 90.
x_amt-61_90 = x_amt-61_90 + i_temp_data-dmbe2.
if between 91 and 120
ELSEIF i_temp_data-days GE 91 AND i_temp_data-days LE 120.
x_amt-91_120 = x_amt-91_120 + i_temp_data-dmbe2.
if > 120
ELSEIF i_temp_data-days GT 120.
x_amt-120pls = x_amt-120pls + i_temp_data-dmbe2.
ENDIF.
ENDIF.
Get Customer Name.
SELECT SINGLE name1
INTO itab-name1
FROM kna1
WHERE kunnr = i_temp_data-kunnr.
Invoice and year
AT END OF rebzg.
READ TABLE i_temp_data INDEX sy-tabix.
itab-zuonr = i_temp_data-zuonr.
itab-bukrs = i_temp_data-bukrs.
itab-kunnr = i_temp_data-kunnr.
itab-belnr = i_temp_data-belnr.
itab-gjahr = i_temp_data-gjahr.
IF r_comp EQ 'X'.
itab-waers = i_temp_data-waers.
ELSE.
itab-waers = 'USD'.
ENDIF.
itab-zfbdt = i_temp_data-zfbdt.
itab-zterm = i_temp_data-zterm.
itab-amt00_30 = x_amt-amt00_ls + x_amt-00_30.
itab-amt31_60 = x_amt-31_60.
itab-amt61_90 = x_amt-61_90.
itab-amt91_120 = x_amt-91_120.
itab-amt120pls = x_amt-120pls.
itab-total = x_amt-amt00_ls + x_amt-00_30 +
x_amt-31_60 + x_amt-61_90 +
x_amt-91_120 + x_amt-120pls.
itab-kunnr_c = i_temp_data-kunnr_c.
itab-name_c = i_temp_data-name_c.
itab-kidno = i_temp_data-kidno.
itab-matnr = i_temp_data-matnr.
itab-inv_date = i_temp_data-inv_date.
itab-rebzg = i_temp_data-rebzg.
itab-xblnr = i_temp_data-xblnr.
itab-vtext = i_temp_data-vtext.
itab-sgtxt = i_temp_data-sgtxt.
itab-days = i_temp_data-days.
itab-bldat = i_temp_data-bldat.
itab-vvtext = i_temp_data-vvtext.
itab-zzihrez_e = i_temp_data-zzihrez_e.
itab-blart = i_temp_data-blart.
itab-plant = i_temp_data-plant.
Populating table.
APPEND: itab.
CLEAR : itab,
x_amt.
v_count = 1.
ENDAT.
IF v_count NE 1.
itab-zuonr = i_temp_data-zuonr.
itab-bukrs = i_temp_data-bukrs.
itab-kunnr = i_temp_data-kunnr.
itab-belnr = i_temp_data-belnr.
itab-gjahr = i_temp_data-gjahr.
itab-bldat = i_temp_data-bldat.
IF r_comp EQ 'X'.
itab-waers = i_temp_data-waers.
ELSE.
itab-waers = 'USD'.
ENDIF.
itab-zfbdt = i_temp_data-zfbdt.
itab-zterm = i_temp_data-zterm.
itab-kunnr_c = i_temp_data-kunnr_c.
itab-name_c = i_temp_data-name_c.
itab-kidno = i_temp_data-kidno.
itab-matnr = i_temp_data-matnr.
itab-inv_date = i_temp_data-inv_date.
itab-rebzg = i_temp_data-rebzg.
itab-xblnr = i_temp_data-xblnr.
itab-vtext = i_temp_data-vtext.
itab-sgtxt = i_temp_data-sgtxt.
itab-days = i_temp_data-days.
itab-zzihrez_e = i_temp_data-zzihrez_e.
itab-plant = i_temp_data-plant.
itab-vvtext = i_temp_data-vvtext.
itab-blart = i_temp_data-blart.
IF itab-matnr NE space.
APPEND itab.
CLEAR itab-plant.
ELSE.
ON CHANGE OF i_temp_data-kidno.
READ TABLE i_temp_data INDEX sy-tabix.
itab-zuonr = i_temp_data-zuonr.
itab-bukrs = i_temp_data-bukrs.
itab-kunnr = i_temp_data-kunnr.
itab-belnr = i_temp_data-belnr.
itab-gjahr = i_temp_data-gjahr.
itab-bldat = i_temp_data-bldat.
IF r_comp EQ 'X'.
itab-waers = i_temp_data-waers.
ELSE.
itab-waers = 'USD'.
ENDIF.
itab-zfbdt = i_temp_data-zfbdt.
itab-zterm = i_temp_data-zterm.
itab-amt00_30 = x_amt-amt00_ls + x_amt-00_30.
itab-amt31_60 = x_amt-31_60.
itab-amt61_90 = x_amt-61_90.
itab-amt91_120 = x_amt-91_120.
itab-amt120pls = x_amt-120pls.
itab-total = x_amt-amt00_ls + x_amt-00_30 +
x_amt-31_60 + x_amt-61_90 +
x_amt-91_120 + x_amt-120pls.
itab-kunnr_c = i_temp_data-kunnr_c.
itab-name_c = i_temp_data-name_c.
itab-kidno = i_temp_data-kidno.
itab-matnr = i_temp_data-matnr.
itab-inv_date = i_temp_data-inv_date.
itab-rebzg = i_temp_data-rebzg.
itab-xblnr = i_temp_data-xblnr.
itab-vtext = i_temp_data-vtext.
itab-sgtxt = i_temp_data-sgtxt.
itab-days = i_temp_data-days.
itab-zzihrez_e = i_temp_data-zzihrez_e.
itab-vvtext = i_temp_data-vvtext.
itab-plant = i_temp_data-plant.
APPEND itab.
CLEAR: x_amt-amt00_ls, x_amt-00_30, x_amt-31_60,
x_amt-61_90, x_amt-91_120 , x_amt-120pls.
ENDON.
ENDIF.
CLEAR: itab.
ENDIF.
ENDLOOP.
ENDFORM. " POP_FORMAT_grp_CURR_DETAIL
&----
*& Form material_details
&----
text
-
--> p1 text
<-- p2 text
-
FORM material_details.
SORT itab_details.
DELETE ADJACENT DUPLICATES FROM itab_details.
LOOP AT itab_details.
CLEAR: v_counter, v_gjahr, v_kunnr, v_prodh, v_vbeln,
v_vvtext, v_vtext.
v_gjahr = itab_details-gjahr.
v_kunnr = itab_details-kunnr.
*Invoice Date/Billing date
SELECT SINGLE fkdat FROM vbrk INTO v_inv_date
WHERE vbeln = itab_details-xblnr.
*material number, description and product hierarchy
SELECT matnr arktx prodh FROM vbrp
INTO (v_matnr, v_arktx, v_prodh)
WHERE vbeln = itab_details-xblnr AND
uepos = '00000'.
CLEAR: v_vdatu, v_posnr, v_auart, v_prctr, v_zzihrez,
v_kunnr_c, v_name1, v_name2, v_vtext, v_vvtext.
*Find the contract/order no
SELECT SINGLE vbelv posnv FROM vbfa INTO (v_vbeln, v_posnr)
WHERE vbeln = itab_details-xblnr
AND vbtyp_v IN ('C','G').
*delivery date, document type, plant and reservation no
SELECT SINGLE vbakvdatu vbakauart vbapprctr vbapzzihrez_e
INTO (v_vdatu, v_auart, v_prctr, v_zzihrez)
FROM vbak INNER JOIN vbap ON vbakvbeln = vbapvbeln
WHERE vbap~vbeln = v_vbeln AND
vbap~posnr = v_posnr AND
vbap~abgru = space.
*billing type
SELECT SINGLE * FROM vbkd WHERE vbeln = v_vbeln.
IF vbkd-bsark NE 'ZG01' OR vbkd-bsark NE 'ZO02'.
SELECT SINGLE vtext FROM t176t INTO v_vvtext
WHERE bsark = vbkd-bsark
AND spras EQ sy-langu.
ELSE.
MOVE 'One Time' TO v_vvtext.
ENDIF.
*getting only the reservation number (no text)
IF vbkd-ihrez_e+0(11) CO
'0123456789'.
ELSE.
v_zzihrez = space.
ENDIF.
*location
CONCATENATE '000000' v_zzihrez+0(4) INTO v_prctr.
*plant name
CLEAR v_plant.
SELECT SINGLE ktext FROM cepct INTO v_plant WHERE
prctr = v_prctr AND
spras = sy-langu.
*client no and name
SELECT SINGLE vbpakunnr kna1name1 kna1~name2
INTO (v_kunnr_c, v_name1, v_name2)
FROM vbpa INNER JOIN kna1 ON
vbpakunnr = kna1kunnr
WHERE vbpa~vbeln = v_vbeln AND
vbpa~parvw = 'Z3'.
CONCATENATE v_name1 v_name2 INTO v_name_c
SEPARATED BY space.
READ TABLE i_temp_data WITH KEY bukrs = itab_details-bukrs
belnr = itab_details-belnr
gjahr = itab_details-gjahr.
IF sy-subrc = 0.
CLEAR: v_tabix.
v_tabix = sy-tabix.
IF v_counter IS INITIAL.
MOVE v_plant TO i_temp_data-plant.
MOVE v_zzihrez TO i_temp_data-zzihrez_e.
MOVE v_kunnr_c TO i_temp_data-kunnr_c.
MOVE v_name_c TO i_temp_data-name_c.
MOVE v_gjahr TO i_temp_data-gjahr.
MOVE v_kunnr TO i_temp_data-kunnr.
IF v_auart EQ 'ZOTO' AND i_temp_data-inv_date IS INITIAL.
MOVE v_inv_date TO i_temp_data-inv_date.
ELSEIF i_temp_data-inv_date IS INITIAL.
MOVE v_vdatu TO i_temp_data-inv_date.
ENDIF.
IF i_temp_data-vtext IS INITIAL.
MOVE v_arktx TO i_temp_data-vtext.
ENDIF.
IF i_temp_data-vvtext IS INITIAL.
MOVE v_vvtext TO i_temp_data-vvtext.
ENDIF.
MODIFY i_temp_data INDEX v_tabix.
CLEAR i_temp_data.
v_counter = 'T'.
CLEAR: v_matnr,v_arktx,v_vbeln,v_name_c,v_vtext, v_prodh,
v_kunnr_c, v_name1,v_name2, v_vdatu, v_vvtext.
ELSE.
CLEAR:i_temp_data-dmbe2, i_temp_data-dmbtr. " i_temp_data-wrbtr
MOVE v_matnr TO i_temp_data-matnr.
MOVE v_plant TO i_temp_data-plant.
MOVE v_zzihrez TO i_temp_data-zzihrez_e.
MOVE v_kunnr_c TO i_temp_data-kunnr_c.
MOVE v_name_c TO i_temp_data-name_c.
MOVE v_gjahr TO i_temp_data-gjahr.
MOVE v_kunnr TO i_temp_data-kunnr.
IF v_auart EQ 'ZOTO' AND i_temp_data-inv_date IS INITIAL.
MOVE v_inv_date TO i_temp_data-inv_date.
ELSEIF i_temp_data-inv_date IS INITIAL.
MOVE v_vdatu TO i_temp_data-inv_date.
ENDIF.
MOVE v_arktx TO i_temp_data-vtext.
APPEND i_temp_data.
CLEAR i_temp_data.
ENDIF.
ENDIF.
ENDSELECT.
CLEAR:
i_temp_data-kunnr_c,
i_temp_data-name_c,i_temp_data-inv_date,
i_temp_data-vtext.
CLEAR: v_matnr,v_arktx,v_vbeln,v_name_c,
v_kunnr_c, v_name1,v_name2,v_inv_date, v_vdatu,
v_vtext, v_prodh.
ENDLOOP.
ENDFORM. " material_details
&----
*& Form get_address
&----
text
-
FORM get_address.
Get Address
CLEAR: kna1, x_kna1, first_name, last_name,pafkt, lang, v_land.
SELECT SINGLE * FROM kna1 INTO kna1 WHERE kunnr = i_last-kunnr.
SELECT SINGLE name1 namev pafkt parla FROM knvk
INTO (last_name, first_name, pafkt, lang)
WHERE kunnr = i_last-kunnr
AND abtnr = '0003'. "financial department
IF sy-subrc NE 0.
SELECT SINGLE name1 namev pafkt parla FROM knvk
INTO (last_name, first_name, pafkt, lang)
WHERE kunnr = i_last-kunnr.
ENDIF.
IF lang = ' '.
lang = 'E'.
ENDIF.
SELECT SINGLE vtext FROM tpfkt INTO x_kna1-ptext
WHERE pafkt = pafkt
AND spras = lang.
SELECT SINGLE name1 name2 street country FROM
adrc INTO (x_kna1-name1, x_kna1-name2,
x_kna1-street, v_land)
WHERE addrnumber = kna1-adrnr.
SELECT SINGLE landx FROM t005t INTO x_kna1-landx WHERE land1 = v_land
AND spras = lang.
TRANSLATE x_kna1-landx TO UPPER CASE. "#EC SYNTCHAR added by sony
MOVE kna1-kunnr TO x_kna1-kunnr.
MOVE kna1-ort01 TO x_kna1-ort01.
MOVE kna1-regio TO x_kna1-regio.
MOVE kna1-pstlz TO x_kna1-pstlz.
MOVE p_bdate TO x_kna1-agdate.
APPEND x_kna1.
CLEAR: x_kna1.
ENDFORM. " get_addres
&----
*& Form fetch_data_vender
&----
text
-
--> p1 text
<-- p2 text
-
FORM fetch_data_vender.
SELECT lifnr FROM kna1 INTO TABLE itab_vender
WHERE kunnr IN s_kunnr.
LOOP AT itab_vender.
Fetch data from BSIK into Internal table I_BSIK.
SELECT *
FROM bsik
APPENDING TABLE i_bsik
WHERE bukrs IN s_bukrs AND
lifnr EQ itab_vender-vender AND
budat LE p_bdate AND
blart IN ('KA', 'KG', 'KR', 'KZ', 'KF').
Fetch data from BSAK into Internal table I_BSAK.
SELECT *
FROM bsak "#EC ENHOK "added by sony 06/05/08
APPENDING TABLE i_bsik
WHERE bukrs IN s_bukrs AND
lifnr EQ itab_vender-vender AND
budat LE p_bdate AND
augdt GT p_bdate AND
blart IN ('KA', 'KG', 'KR', 'KZ', 'KF').
ENDLOOP.
DELETE i_bsik WHERE ( bukrs = '1500' OR bukrs = '3000' ) AND
( umsks = 'E' OR umskz = 'E' ).
ENDFORM. " fetch_data_vender
&----
*& Form GET_ARREAR_DAYS_vender
&----
text
-
--> p1 text
<-- p2 text
-
FORM get_arrear_days_vender.
SORT i_bsik BY mandt bukrs belnr.
CLEAR: v_tabix.
LOOP AT i_bsik.
v_tabix = sy-tabix.
SELECT SINGLE * FROM kna1 WHERE lifnr = i_bsik-lifnr.
MOVE i_bsik-bukrs TO itab_details-bukrs.
MOVE i_bsik-xblnr TO itab_details-xblnr.
MOVE i_bsik-belnr TO itab_details-belnr.
MOVE i_bsik-gjahr TO itab_details-gjahr.
MOVE kna1-kunnr TO itab_details-kunnr.
APPEND itab_details.
CLEAR itab_details.
CLEAR x_item.
AT NEW bukrs.
*company code details
READ TABLE i_bsik INDEX sy-tabix.
CLEAR x_t001.
SELECT SINGLE * FROM t001
INTO x_t001
WHERE bukrs = i_bsik-bukrs.
ENDAT.
MOVE-CORRESPONDING i_bsik TO x_item.
x_item-koart = 'D'. " Debitor - Customer Indicator
x_item-konto = kna1-kunnr. " Debitor - Customer Number
x_item-dmshb = bsik-dmbtr.
x_item-wrshb = bsik-wrbtr.
Function module to get ARREAR days.
CALL FUNCTION 'ITEM_DERIVE_FIELDS'
EXPORTING
s_t001 = x_t001
s_bsegp = x_bsegp
key_date = p_bdate
CHANGING
s_item = x_item
EXCEPTIONS
bad_input = 1
OTHERS = 2.
IF sy-subrc = 0.
Populate I_TEMP_DATA for further processing.
i_temp_data-bukrs = i_bsik-bukrs.
i_temp_data-kunnr = kna1-kunnr.
i_temp_data-belnr = i_bsik-belnr.
i_temp_data-bldat = i_bsik-bldat. "Document date in document
i_temp_data-shkzg = i_bsik-shkzg.
i_temp_data-zfbdt = i_bsik-zfbdt. " Base line date
i_temp_data-zterm = i_bsik-zterm. "Terms of payment key
i_temp_data-waers = i_bsik-waers.
i_temp_data-days = x_item-verzn. " days in arrs
i_temp_data-gjahr = i_bsik-gjahr. " year
i_temp_data-kidno = i_bsik-kidno. " Payment Reference
i_temp_data-rebzg = i_bsik-rebzg. " Number of the Invoice the
"Transaction Belongs to
i_temp_data-xblnr = i_bsik-xblnr.
i_temp_data-sgtxt = i_bsik-sgtxt. " Item Text
Changing the Sign
IF i_bsik-shkzg = 'H'.
i_temp_data-dmbe2 = -1 * i_bsik-dmbe2.
i_temp_data-dmbtr = -1 * i_bsik-dmbtr.
ELSE.
i_temp_data-dmbe2 = i_bsik-dmbe2.
i_temp_data-dmbtr = i_bsik-dmbtr.
ENDIF.
ENDIF.
APPEND i_temp_data.
CLEAR i_temp_data.
ENDLOOP.
PERFORM material_details.
ENDFORM. " Get_Arrear_DaysENDFORM.
" GET_ARREAR_DAYS_vender
&----
*& Form convert_pdf
&----
text
-
--> p1 text
<-- p2 text
-
FORM convert_pdf.
CLEAR: tsp01.
CLEAR: mtab_pdf, mi_bytecount.
REFRESH mtab_pdf.
FREE mtab_pdf.
***convert to PDF format
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = mi_bytecount
TABLES
otf = i_otf_final
lines = mtab_pdf
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.
IF sy-subrc 0.
ENDIF.
CONDENSE itab-kunnr NO-GAPS.
CONCATENATE 'C:\' itab-kunnr '_' sy-datum '.pdf' INTO downfile.
IF ch_down = 'X'.
PERFORM download_pdf.
ENDIF.
IF ch_email = 'X'.
PERFORM send_email.
ENDIF.
ENDFORM. " convert_pdf
&----
*& Form download_pdf
&----
text
-
--> p1 text
<-- p2 text
-
FORM download_pdf.
DATA: i_downfile TYPE string.
i_downfile = downfile.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = mi_bytecount
filename = i_downfile
filetype = 'BIN'
IMPORTING
FILELENGTH =
TABLES
data_tab = mtab_pdf[]
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.
ENDIF.
ENDFORM. " download_pdf
&----
*& Form send_email
&----
text
-
--> p1 text
<-- p2 text
-
FORM send_email.
CLEAR: packing_list[],
pdf[],
contents_txt[],
contents_hex[],
receivers[],
att_pos,
document_data,
esubject,emsgs[],
w_contents_hex.
PERFORM packing_list.
PERFORM set_data.
IF v_check NE 'X'.
PERFORM send_email_message.
ENDIF.
ENDFORM. " send_email
&----
*& Form packing_list
&----
text
-
--> p1 text
<-- p2 text
-
FORM packing_list.
Concatenate the PDF material into the attachments table.
PERFORM append_pdf_to_attachments USING mi_bytecount.
Describe the attachment
CLEAR packing_list.
REFRESH packing_list.
packing_list-transf_bin = 'X'.
ADD 1 TO att_pos.
packing_list-body_start = att_pos.
DESCRIBE TABLE contents_hex LINES att_pos.
packing_list-body_num = att_pos.
packing_list-doc_type = 'PDF'.
CONCATENATE 'Statement Date'
sy-datum4(2) '/' sy-datum6(2) '/'
sy-datum+2(2) '-' 'Customer no -' itab-kunnr
INTO packing_list-obj_descr.
packing_list-obj_langu = 'E'.
packing_list-doc_size = mi_bytecount.
APPEND packing_list.
ENDFORM. " packing_list
&----
*& Form set_data
&----
text
-
--> p1 text
<-- p2 text
-
FORM set_data.
CLEAR: sy-tfill.
DESCRIBE TABLE contents_hex LINES sy-tfill.
IF sy-tfill GT 0.
DATA: lines TYPE TABLE OF tline WITH HEADER LINE.
By this point, the attachments have been created. Now we supply body
text and set up the recipients.
CONCATENATE 'Customer Statement for Customer - '
itab-kunnr esubject INTO esubject.
The message header information
CLEAR document_data.
document_data-obj_name = 'ZWRAPPER'.
document_data-obj_descr = esubject.
document_data-obj_langu = 'E'.
document_data-obj_prio = '1'.
CLEAR: contents_txt, contents_txt], itext[, itext.
IF sy-sysid NE 'R3P'.
CONCATENATE 'Please ignore this mail. This is part of testing from '
sy-sysid INTO contents_txt SEPARATED BY space.
APPEND contents_txt.
CLEAR: contents_txt.
APPEND contents_txt.
ENDIF.
CLEAR vv_text.
CONCATENATE 'Enter Body of the Email and SAVE it for customer '
itab-kunnr itab-name1 INTO vv_text SEPARATED BY space.
EDITOR-CALL FOR itext TITLE vv_text.
LOOP AT itext.
contents_txt = itext-text.
APPEND contents_txt.
ENDLOOP.
Describe the body data. This descriptor has to be the first, in front
of all the attachments.
CLEAR packing_list.
packing_list-transf_bin = space.
packing_list-body_start = 1.
DESCRIBE TABLE contents_txt LINES packing_list-body_num.
packing_list-doc_type = 'RAW'.
packing_list-obj_langu = 'E'.
INSERT packing_list INDEX 1.
Set up the recipients.
CLEAR: receivers, receivers[], sy-tfill.
CLEAR: usr21, adr6.
*find email address.
IF sy-sysid = 'R3P'.
SELECT prsnr FROM knvk INTO knvk-prsnr WHERE kunnr = itab-kunnr.
SELECT SINGLE adrnr name1 name2 FROM kna1 INTO
(kna1-adrnr, kna1-name1, kna1-name2)
WHERE kunnr = itab-kunnr.
SELECT SINGLE smtp_addr INTO v_email FROM adr6
WHERE addrnumber EQ kna1-adrnr.
IF sy-subrc NE 0.
CLEAR: v_email.
ELSE.
EXIT.
ENDIF.
ENDSELECT.
ENDIF.
*find the user email address.
CLEAR: usr21, adr6.
SELECT SINGLE * FROM usr21 WHERE bname = sy-uname.
CLEAR adr6.
SELECT SINGLE * FROM adr6 WHERE addrnumber = usr21-addrnumber AND
persnumber = usr21-persnumber.
v_ccemail = adr6-smtp_addr.
CLEAR:i_fields.
REFRESH:i_fields.
i_fields-tabname = 'COMPMSG'.
i_fields-fieldname = 'TEXT'.
i_fields-fieldtext = 'Email'.
i_fields-value = v_email.
APPEND i_fields.
CLEAR i_fields.
i_fields-tabname = 'T100'.
i_fields-fieldname = 'TEXT'.
i_fields-fieldtext = 'CC to'.
i_fields-value = v_ccemail.
APPEND i_fields.
CLEAR i_fields.
CLEAR v_returncode.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = 'Email Address.'
start_column = '25'
start_row = '2'
IMPORTING
returncode = v_returncode
TABLES
fields = i_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF sy-subrc 0.
ENDIF.
IF v_returncode NE 'A'.
*find the new condition value (table name and filed name took itfor char
LOOP AT i_fields WHERE tabname = 'COMPMSG' AND fieldname = 'TEXT'.
v_email = i_fields-value.
ENDLOOP.
LOOP AT i_fields WHERE tabname = 'T100'
AND fieldname = 'TEXT'.
v_ccemail = i_fields-value.
ENDLOOP.
ENDIF.
receivers-receiver = v_email.
receivers-rec_type = 'U'. "..assume it's an internet address
APPEND receivers.
receivers-receiver = v_ccemail.
receivers-rec_type = 'U'.
receivers-copy = 'X'.
APPEND receivers.
SORT receivers BY receiver.
DELETE ADJACENT DUPLICATES FROM receivers COMPARING receiver.
ENDIF.
CLEAR: v_check.
IF v_email = space.
v_check = 'X'.
MOVE itab-kunnr TO ioutput-kunnr.
MOVE v_kname TO ioutput-kname.
MOVE v_email TO ioutput-email.
MOVE 'X' TO ioutput-error.
APPEND ioutput.
CLEAR ioutput.
ENDIF.
ENDFORM. " set_data
&----
*& Form SEND_EMAIL_MESSAGE
&----
text
-
--> p1 text
<-- p2 text
-
FORM send_email_message.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = document_data
TABLES
packing_list = packing_list
contents_txt = contents_txt
contents_hex = contents_hex
receivers = receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc 0.
MOVE itab-kunnr TO ioutput-kunnr.
MOVE v_kname TO ioutput-kname.
MOVE v_email TO ioutput-email.
MOVE 'X' TO ioutput-error.
APPEND ioutput.
CLEAR ioutput.
IF sy-msgv1 = 'ADDR_PERS_COMP_COMM_GET'.
MESSAGE i999 WITH 'Please Contact Help Desk. '
'You Must Have An E-mail-ID In The SAP System'.
STOP.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
STOP. "exit prematurely
ENDIF.
ELSE.
MOVE itab-kunnr TO ioutput-kunnr.
MOVE v_kname TO ioutput-kname.
MOVE v_email TO ioutput-email.
MOVE ' ' TO ioutput-error.
APPEND ioutput.
CLEAR ioutput.
ENDIF.
ENDFORM. " SEND_EMAIL_MESSAGE
&----
*& Form APPEND_PDF_TO_ATTACHMENTS
&----
text
-
-->P_MI_BYTECOUNT text
-
FORM append_pdf_to_attachments USING bytecount.
DATA: src_len TYPE i,
dst_len TYPE i.
DATA: src_off TYPE i,
dst_off TYPE i.
DATA: tot_off TYPE i.
REFRESH pdf.
CLEAR pdf.
pdf] = mtab_pdf[.
DESCRIBE FIELD pdf LENGTH src_len IN CHARACTER MODE.
DESCRIBE FIELD w_contents_hex LENGTH dst_len IN BYTE MODE.
CLEAR: dst_off, tot_off.
CLEAR: w_contents_hex WITH NULL.
LOOP AT pdf.
CLEAR src_off.
DO.
WHILE src_off LT src_len AND
dst_off LT dst_len AND
tot_off LT bytecount.
w_contents_hex-linedst_off = pdfsrc_off. "copy one byte at a time
ADD 1 TO: src_off, dst_off, tot_off. "..until a boundary reached
ENDWHILE.
IF dst_off GE dst_len. "we've completely filled an output line
APPEND w_contents_hex TO contents_hex. "write it out
CLEAR w_contents_hex WITH NULL. "re-initialize the output line
CLEAR dst_off.
ENDIF.
IF src_off GE src_len. "we've completely exhausted an input line
EXIT. "cause a new input line to be read
ENDIF.
IF tot_off GE bytecount. "we've completely exhausted input stream
EXIT.
ENDIF.
ENDDO.
IF tot_off GE bytecount. "exit loop when byte stream exhausted
EXIT.
ENDIF.
ENDLOOP.
IF dst_off GT 0. "write out the last partial line
APPEND w_contents_hex TO contents_hex.
ENDIF.
ENDFORM. " APPEND_PDF_TO_ATTACHMENTS
&----
*& Form display_output
&----
text
-
--> p1 text
<-- p2 text
-
FORM display_output.
DATA: v_count TYPE i.
CLEAR: v_count.
LOOP AT ioutput WHERE error EQ space.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
WRITE:/10
'Customer Statement Email sent to the following email address'.
SKIP 2.
WRITE:/10 'Customer No' COLOR 5 INVERSE,
25 'Customer Name' COLOR 5 INVERSE,
60 'Enail ' COLOR 5 INVERSE.
SKIP 1.
LOOP AT ioutput WHERE error EQ space.
v_count = v_count + 1.
WRITE:/10 ioutput-kunnr COLOR 5 INVERSE,
25 ioutput-kname COLOR 5 INVERSE,
60 ioutput-email COLOR 5 INVERSE.
ENDLOOP.
SKIP.
WRITE:/10 'Total Number for Customers' COLOR 5 INVERSE,
v_count COLOR 5 INVERSE.
ENDIF.
CLEAR: v_count.
LOOP AT ioutput WHERE error EQ 'X'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
SKIP 2.
WRITE:/10
'Customer Statement Email did not send - Error'.
SKIP 2.
WRITE:/10 'Customer No' COLOR 7 INVERSE,
25 'Customer Name' COLOR 7 INVERSE,
60 'Enail ' COLOR 7 INVERSE.
SKIP 1.
LOOP AT ioutput WHERE error EQ 'X'.
v_count = v_count + 1.
WRITE:/10 ioutput-kunnr COLOR 7 INVERSE,
25 ioutput-kname COLOR 7 INVERSE,
60 ioutput-email COLOR 7 INVERSE.
ENDLOOP.
SKIP.
WRITE:/10 'Total Number for Customers' COLOR 7 INVERSE,
v_count COLOR 7 INVERSE.
ENDIF.
ENDFORM. " display_output
&----
*& Form smart_from
&----
text
-
--> p1 text
<-- p2 text
-
FORM smart_from.
DATA: i_ssfcompop TYPE ssfcompop." OCCURS 0 WITH HEADER LINE.
DATA: i_ssfctrlop TYPE ssfctrlop." occurs 0 with header line.
p_form = 'ZDFI_CUSTOMER_STATEMENT_NEW'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = p_form
IMPORTING
fm_name = fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
CLEAR: i_ssfcompop.
SELECT SINGLE padest FROM tsp03l INTO v_print
WHERE lname EQ p_print.
i_ssfcompop-tddest = v_print.
IF v_print EQ space.
i_ssfcompop-tddest = 'LOCL'.
ENDIF.
i_ssfctrlop-no_dialog = 'X'.
i_ssfctrlop-preview = space.
IF ch_down = 'X' OR ch_email = 'X'.
IF ch_email ='X' OR v_immed = space.
i_ssfctrlop-getotf = 'X'.
ENDIF.
i_ssfcompop-tdnewid = 'X'.
i_ssfcompop-tdimmed = v_immed.
i_ssfcompop-tddelete = v_dele.
CALL FUNCTION fm_name
EXPORTING
control_parameters = i_ssfctrlop
output_options = i_ssfcompop
user_settings = space
r_comp = r_comp
v_stat = v_stat
IMPORTING
job_output_info = i_ssfcrescl
TABLES
zaddress = x_kna1
ztotal = i_total
zmain = i_final
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
.
IF sy-subrc 0.
MESSAGE i999 WITH
'Forms did not create,': ' Please contact Business System'.
STOP.
ENDIF.
*for email selection
IF ch_email = 'X'.
i_otf_final] = i_ssfcrescl-otfdata[.
PERFORM convert_pdf.
ENDIF.
*to display if no value in the print Immediately
IF v_immed = space.
CALL FUNCTION 'HR_EFI_SHOW_PDF_FORM'
EXPORTING
top_edge = 0
left_edge = 0
TABLES
otf_table = i_ssfcrescl-otfdata.
ENDIF.
ENDFORM. " smart_from
&----
*& Form VALIDATE_SELECTION_SCREEN
&----
text
-
--> p1 text
<-- p2 text
-
FORM validate_selection_screen.
IF r_comp = 'X'.
SELECT bukrs waers FROM t001 INTO TABLE i_bukrs WHERE
bukrs IN s_bukrs.
*only one compnay code/Currency for company code
SORT i_bukrs BY waers.
DELETE ADJACENT DUPLICATES FROM i_bukrs.
CLEAR sy-tfill.
DESCRIBE TABLE i_bukrs LINES sy-tfill.
IF sy-tfill GT 1.
MESSAGE i999 WITH 'Only one company code at a time':
' for group currency'.
STOP.
ENDIF.
DELETE i_bukrs WHERE bukrs EQ '1400' OR
bukrs EQ '1500' OR
bukrs EQ '1600' OR
bukrs EQ '3000' OR
bukrs EQ '4530'.
CLEAR sy-tfill.
DESCRIBE TABLE i_bukrs LINES sy-tfill.
IF sy-tfill GT 0.
MESSAGE i999 WITH 'All North America Companies Codes ' :
' can not print in Group Currency. ':
' Please select Company Currency'.
STOP.
ENDIF.
ENDIF.
ENDFORM. " VALIDATE_SELECTION_SCREEN
&----
*& Form get_total
&----
text
-
--> p1 text
<-- p2 text
-
FORM get_total.
CLEAR: i_total.
REFRESH: i_total.
LOOP AT itab_temp WHERE kunnr = i_last-kunnr.
i_total-00_30 = itab_temp-amt00_30.
i_total-31_60 = itab_temp-amt31_60.
i_total-61_90 = itab_temp-amt61_90.
i_total-91_120 = itab_temp-amt91_120.
i_total-120pls = itab_temp-amt120pls.
i_total-total = itab_temp-total.
i_total-waers = itab_temp-waers.
COLLECT i_total.
CLEAR: i_total.
ENDLOOP.
ENDFORM. " get_total
&----
*& Form billing_period
&----
text
-
-->P_BELNR text
-->P_VBELN text
-
FORM billing_period USING p_belnr
p_vbeln.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " invoice no
EXPORTING
input = p_belnr
IMPORTING
output = p_belnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " order/contract no
EXPORTING
input = p_vbeln
IMPORTING
output = p_vbeln.
DATA: v_count(2) TYPE p VALUE 0,
v_count1(2).
DATA: v_vbeln(10) TYPE n,
v_sdate LIKE vbrk-fkdat,
v_edate LIKE vbrk-fkdat,
v_order(10) TYPE n.
DATA: v_eddate(10), v_stdate(10).
DATA: BEGIN OF itab_bill OCCURS 0,
vbeln LIKE vbfa-vbeln,
fplnr LIKE vbfa-fplnr,
fpltr LIKE vbfa-fpltr,
END OF itab_bill.
DATA: v_flag,
v_afdat LIKE fplt-afdat,
v_bdate LIKE fplt-nfdat.
CLEAR: itab_bill, itab_bill[].
CLEAR: v_sdate ,itab_bill, v_count.
*select the billing period from vbfa
SELECT vbeln fplnr fpltr FROM vbfa INTO TABLE itab_bill
WHERE vbeln = p_belnr.
SORT itab_bill BY vbeln fpltr.
delete duplicate records.
DELETE ADJACENT DUPLICATES FROM itab_bill COMPARING vbeln fpltr.
LOOP AT itab_bill.
SELECT SINGLE * FROM fplt
WHERE fplnr = itab_bill-fplnr AND
fpltr = itab_bill-fpltr.
IF sy-subrc EQ 0.
AT NEW vbeln.
move first starting date to starting date
IF fplt-nfdat+0(2) NE '00'.
MOVE fplt-fkdat TO i_temp_data-inv_date.
ELSE.
MOVE fplt-afdat TO i_temp_data-inv_date.
ENDIF.
ENDAT.
EXIT.
ENDIF.
ENDLOOP.
ENDFORM. " billing_period
Hello,
We are having problem with below report. I'm able to send emails(invoice) as PDF attachments , but the attached PDF file wont open. I'm getting a message "Adobe reader could not open attachement the file has been damaged".This report works in our old version 4.6c but we just upgrade to ecc6. Please Please help.
Thanks,
Jose
************************************************************************
REPORT zrfi_customer_statement_new
NO STANDARD PAGE HEADING
MESSAGE-ID zm_load
LINE-SIZE 325
LINE-COUNT 65(3).
-
Tables *
-
TABLES:
bsid, bsad, knb1, kna1, knkk, t001, t014, t179t,
t052, fplt, vbap, veda, vbrk, vbpa, vbkd, knvk,
cepct, tvzbt, vbak, bsik, tsp01, usr21,adr6, tsp03l.
-
Internal tables *
-
*
DATA: i_bsid LIKE bsid OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF i_bukrs OCCURS 0,
bukrs LIKE bsid-bukrs,
waers LIKE bsid-waers,
END OF i_bukrs.
DATA:
BEGIN OF i_temp_data OCCURS 0,
bukrs LIKE bsid-bukrs, " Company code
kunnr LIKE bsid-kunnr, " Customer
belnr LIKE bsid-belnr, " Invoice
gjahr LIKE bsid-gjahr, " Fiscal year
waers LIKE bsid-waers, " Currency
rebzg LIKE bsid-rebzg,
bldat LIKE bsid-bldat, " Posting date
shkzg LIKE bsid-shkzg, " Debit/Credit
zfbdt LIKE bsid-zfbdt, " Baseline date
zterm LIKE bsid-zterm, " Terms of payment key
dmbtr LIKE bsid-dmbtr, " company currency
dmbe2 LIKE bsid-dmbe2, " Amount in Group Currency
days LIKE rfposxext-verzn, " No of Arrear Days
kidno LIKE bsid-kidno, " Payment reference number
kunnr_c LIKE vbak-kunnr, " Partner Number
name_c(50), " Partner Last name
matnr LIKE vbap-matnr, " Material no
arktx LIKE vbap-arktx, " material description
vbeln LIKE vbap-vbeln, " Contract/Order no
inv_date LIKE vbrk-fkdat,
xblnr LIKE bsid-xblnr,
xblnr LIKE bsid-zuonr,
vtext LIKE vbap-arktx, "material description
sgtxt LIKE bsid-sgtxt,
plant LIKE t001w-name1,
zzihrez_e LIKE vbap-zzihrez_e,
vvtext LIKE tvzbt-vtext,
blart LIKE bsid-blart,
zuonr LIKE bsid-zuonr,
END OF i_temp_data.
DATA:
BEGIN OF itab OCCURS 0,
kunnr LIKE bsid-kunnr, " Customer
bukrs LIKE bsid-bukrs, " Company code
kunnr_c LIKE vbak-kunnr, " Partner Number
name_c(50), " Partner Last name
matnr LIKE vbap-matnr, " Material no
kidno LIKE bseg-kidno, " Payment reference
name1 LIKE kna1-name1, " Customer name
belnr LIKE bsid-belnr, " Invoice
waers LIKE bsid-waers, " Currency ( Document )
gjahr LIKE bsid-gjahr, " Fiscal year
zfbdt LIKE bsid-zfbdt, " Baseline date
zterm LIKE bsid-zterm, " Terms of payment key
amt00_30 TYPE netwr_ak, " 000 - 030 Days
amt31_60 TYPE netwr_ak, " 031 - 060 Days
amt61_90 TYPE netwr_ak, " 061 - 090 Days
amt91_120 TYPE netwr_ak, " 090 - 120 Days
amt120pls TYPE netwr_ak, " 120+ Days
total TYPE netwr_ak, " Row Total
inv_date LIKE vbrk-fkdat,
rebzg LIKE bsid-rebzg,
xblnr LIKE bsid-xblnr,
xblnr LIKE bsid-zuonr,
sgtxt LIKE bsid-sgtxt,
days(5) , " No of Arrear Days
inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
vtext LIKE t179t-vtext,
zzihrez_e LIKE vbap-zzihrez_e,
plant LIKE t001w-name1,
vvtext LIKE tvzbt-vtext,
bldat LIKE bsid-bldat,
blart LIKE bsid-blart,
zuonr LIKE bsid-zuonr,
END OF itab.
DATA: BEGIN OF i_final OCCURS 0,
inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
bldat LIKE bsid-bldat,
xblnr LIKE bsid-xblnr,
inv_date LIKE vbrk-fkdat,
name_c(50), " Partner Last name
vtext LIKE t179t-vtext,
zzihrez_e LIKE vbap-zzihrez_e,
plant LIKE t001w-name1,
vvtext LIKE tvzbt-vtext,
total TYPE netwr_ak, " Row Total
days(5) , " No of Arrear Days
waers LIKE bsid-waers,
blart LIKE bsid-blart,
zuonr LIKE bsid-zuonr,
END OF i_final.
DATA: BEGIN OF i_last OCCURS 0,
kunnr LIKE vbak-kunnr,
inv_chk LIKE bsid-xblnr, " invoice/check/wire transfer no
bldat LIKE bsid-bldat,
xblnr LIKE bsid-xblnr,
inv_date LIKE vbrk-fkdat,
name_c(50), " Partner Last name
vtext LIKE t179t-vtext,
zzihrez_e LIKE vbap-zzihrez_e,
plant LIKE t001w-name1,
vvtext LIKE tvzbt-vtext,
total TYPE netwr_ak, " Row Total
days(5) , " No of Arrear Days
waers LIKE bsid-waers,
blart LIKE bsid-blart,
zuonr LIKE bsid-zuonr,
END OF i_last.
DATA: i_bsik LIKE bsik OCCURS 0 WITH HEADER LINE.
DATA: itab_temp LIKE itab OCCURS 100 WITH HEADER LINE.
DATA:
BEGIN OF itab_details OCCURS 0,
bukrs LIKE bsid-bukrs, " Company code
xblnr LIKE bsid-xblnr,
gjahr LIKE bsid-gjahr,
belnr LIKE bsid-belnr,
kunnr LIKE bsid-kunnr,
END OF itab_details.
DATA: BEGIN OF x_kna1 OCCURS 0,
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
name2 LIKE kna1-name2,
ptext LIKE tpfkt-vtext,
street LIKE adrc-street,
ort01 LIKE kna1-ort01,
regio LIKE kna1-regio,
pstlz LIKE kna1-pstlz,
landx LIKE t005t-landx,
agdate LIKE sy-datum, " aging date
END OF x_kna1.
DATA: BEGIN OF i_total OCCURS 0,
waers LIKE bsid-waers,
00_30 TYPE netwr_ak,
31_60 TYPE netwr_ak,
61_90 TYPE netwr_ak,
91_120 TYPE netwr_ak,
120pls TYPE netwr_ak,
total TYPE netwr_ak,
END OF i_total.
DATA: i_ssfcrescl TYPE ssfcrescl.
DATA: i_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE.
DATA: i_ssfctrlop LIKE ssfctrlop OCCURS 0 WITH HEADER LINE.
DATA: v_itcpo LIKE itcpo.
DATA: BEGIN OF itab_vender OCCURS 0,
vender LIKE kna1-kunnr,
END OF itab_vender.
DATA: BEGIN OF ioutput OCCURS 0,
kunnr LIKE vbrk-kunrg,
kname(50),
email(50),
error(1),
END OF ioutput.
DATA: vv_text(90).
-
Structures *
-
DATA: x_item LIKE rfposxext.
DATA: x_t001 LIKE t001.
DATA: x_bsegp LIKE bsegp.
-
Variables *
-
DATA: v_count TYPE i.
DATA: v_dialog TYPE c VALUE 'X'.
DATA: v_name1 LIKE kna1-name1,
v_name2 LIKE kna1-name2,
v_print LIKE tsp03l-padest,
v_formname(20),
v_flag.
DATA: f_recap_report(1) TYPE c. " Flag for recap report
DATA:
BEGIN OF x_amt,
amt00_ls LIKE bsid-wrbtr,
00_30 LIKE bsid-wrbtr,
31_60 LIKE bsid-wrbtr,
61_90 LIKE bsid-wrbtr,
91_120 LIKE bsid-wrbtr,
120pls LIKE bsid-wrbtr,
END OF x_amt.
DATA: BEGIN OF itab_bill OCCURS 0,
vbeln LIKE vbfa-vbeln,
fplnr LIKE vbfa-fplnr,
fpltr LIKE vbfa-fpltr,
END OF itab_bill.
DATA: v_sdate LIKE vbrk-fkdat,
v_edate LIKE vbrk-fkdat,
v_order(10) TYPE n.
DATA: v_eddate(10), v_stdate(10).
DATA: v_num TYPE i,
v_stat,
v_bill_prd(24),
v_counter TYPE c.
DATA: v_matnr LIKE vbrp-matnr,
v_arktx LIKE vbrp-arktx,
v_vbeln LIKE vbrp-vbeln,
v_vvtext LIKE t176t-vtext,
v_posnr LIKE vbap-posnr,
v_kunnr_c LIKE vbak-kunnr,
v_name_c(50),
v_inv_date LIKE vbrk-fkdat,
v_vdatu LIKE vbak-vdatu,
v_auart LIKE vbak-auart,
v_prctr LIKE vbap-prctr,
v_zzihrez LIKE vbap-zzihrez_e,
v_plant LIKE t001w-name1,
p_form TYPE tdsfname,
fm_name TYPE rs38l_fnam.
DATA: i_ssfcompop TYPE ssfcompop OCCURS 0." WITH HEADER LINE.
DATA: addr_no LIKE kna1-adrnr,
last_name LIKE kna1-name1,
first_name LIKE kna1-name1,
pafkt LIKE knvk-pafkt,
lang LIKE knvk-parla,
v_land LIKE adrc-country,
v_lines TYPE i.
DATA: v_tabix LIKE sy-tabix, v_gjahr LIKE bsid-gjahr,
v_kunnr LIKE vbak-kunnr, v_prodh LIKE vbap-prodh,
v_vtext LIKE t179t-vtext.
DATA: spno LIKE tsp01-rqident,
mi_bytecount TYPE i,
mstr_print_parms LIKE pri_params,
downfile(128) VALUE 'c:\customer.pdf',
mtab_pdf LIKE tline OCCURS 0 WITH HEADER LINE.
DATA: packing_list TYPE TABLE OF sopcklsti1 WITH HEADER LINE,
contents_txt TYPE TABLE OF solisti1 WITH HEADER LINE,
v_email LIKE adr6-smtp_addr,
v_returncode,
contents_hex TYPE TABLE OF solix," WITH HEADER LINE,
w_contents_hex TYPE solix ,
receivers TYPE TABLE OF somlreci1 WITH HEADER LINE.
DATA: att_pos TYPE i.
DATA: document_data LIKE sodocchgi1.
DATA: esubject LIKE sood1-objdes. "subject line
DATA: emsgs TYPE TABLE OF solisti1 WITH HEADER LINE.
DATA: pdf TYPE TABLE OF tline WITH HEADER LINE.
DATA: BEGIN OF itext OCCURS 200,
text(132),
END OF itext.
DATA: i_fields LIKE sval OCCURS 0 WITH HEADER LINE.
DATA: v_ccemail LIKE adr6-smtp_addr,
v_check,
v_kname(50).
DATA: otf_data1 LIKE itcoo OCCURS 0 WITH HEADER LINE,
i_itcpp LIKE itcpp.
-
*FIELD-GROUPS: HEADER, ...
-
FIELD-GROUPS: header,
details.
-
Selection Screen
-
*
SELECTION-SCREEN BEGIN OF BLOCK a10 WITH FRAME TITLE text-sa1.
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-sa1.
PARAMETERS : p_ex_ic AS CHECKBOX DEFAULT 'X'. "R3DK906903
SELECTION-SCREEN END OF BLOCK a1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
SELECT-OPTIONS : s_kunnr FOR bsid-kunnr,
s_bukrs FOR t001-bukrs OBLIGATORY.
PARAMETERS : p_bdate LIKE sy-datum OBLIGATORY.
PARAMETERS: p_vender AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s11.
PARAMETERS : r_group RADIOBUTTON GROUP r1,
r_comp RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-s13.
PARAMETERS: p_print LIKE tsp03l-lname MATCHCODE OBJECT prin
OBLIGATORY DEFAULT 'locl'.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-s14.
PARAMETERS: v_immed AS CHECKBOX DEFAULT 'X',
v_dele AS CHECKBOX DEFAULT 'X',
ch_email AS CHECKBOX.
*PARAMETERS:ch_down AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b4.
SELECTION-SCREEN END OF BLOCK a10.
************************************************************************
AT SELECTION-SCREEN.
Selection Screen Validation.
PERFORM validate_selection_screen.
************************************************************************
INITIALIZATION.
************************************************************************
INITIALIZATION.
IF sy-sysid NE 'R3P'.
v_email = .
ENDIF.
************************************************************************
START-OF-SELECTION.
************************************************************************
START-OF-SELECTION.
IF p_vender = 'X'.
Fetch data from BSIK .
PERFORM fetch_data_vender.
Get Arrear Days
PERFORM get_arrear_days_vender.
ENDIF.
Fetch data from BSID and BSAD.
PERFORM fetch_data_from_bsid.
Get Arrear Days
PERFORM get_arrear_days.
Format Data as per selection.
PERFORM format_final_data.
Print sapscript
SORT i_last BY kunnr days DESCENDING.
LOOP AT i_last.
AT NEW kunnr.
CLEAR: i_final, x_kna1.
REFRESH: i_final, x_kna1.
PERFORM get_address.
PERFORM get_total.
ENDAT.
MOVE-CORRESPONDING i_last TO i_final.
i_final-xblnr = i_final-zuonr.
APPEND i_final.
CLEAR i_final.
AT END OF kunnr.
SORT i_final BY days DESCENDING inv_chk total DESCENDING.
PERFORM smart_from.
ENDAT.
ENDLOOP.
************************************************************************
END-OF-SELECTION.
************************************************************************
END-OF-SELECTION.
&----
*& Form FETCH_DATA_FROM_BSID
&----
text
-
FORM fetch_data_from_bsid.
fetch data from BSID into Internal table I_BSID.
SELECT *
FROM bsid
INTO TABLE i_bsid
WHERE bukrs IN s_bukrs AND
kunnr IN s_kunnr AND
budat LE p_bdate ."AND
BELNR in ('0090000231','1400000131').
Fetch data from BSAD into Internal table I_BSID.
SELECT *
FROM bsad
APPENDING TABLE i_bsid
WHERE bukrs IN s_bukrs AND
kunnr IN s_kunnr AND
budat LE p_bdate AND
augdt GT p_bdate." AND
DELETE i_bsid WHERE ( bukrs = '1500' OR bukrs = '3000' OR
bukrs = '1400' ) AND
( umsks = 'E' OR umskz = 'E' ).
*Exclude intercompany customers
IF p_ex_ic = 'X'.
DELETE i_bsid WHERE kunnr+0(2) EQ 'IC'.
ENDIF.
CLEAR sy-tfill.
DESCRIBE TABLE i_bsid LINES sy-tfill.
IF sy-tfill = 0.
MESSAGE i999 WITH ' No data selected for the selection Condition'.
STOP.
ENDIF.
ENDFORM. " FETCH_DATA_FROM_BSID
&----
*& Form Get_Arrear_Days
&----
text
-
FORM get_arrear_days.
SORT i_bsid BY bukrs belnr.
LOOP AT i_bsid.
for company code 1500 and 3000
IF i_bsid-bukrs EQ '1500' OR i_bsid-bukrs EQ '3000'.
MOVE i_bsid-xblnr TO i_bsid-belnr.
ENDIF.
MOVE i_bsid-bukrs TO itab_details-bukrs.
MOVE i_bsid-xblnr TO itab_details-xblnr.
MOVE i_bsid-belnr TO itab_details-belnr.
MOVE i_bsid-gjahr TO itab_details-gjahr.
MOVE i_bsid-kunnr TO itab_details-kunnr.
APPEND itab_details.
CLEAR itab_details.
CLEAR x_item.
AT NEW bukrs.
READ TABLE i_bsid INDEX sy-tabix.
CLEAR x_t001.
SELECT SINGLE * FROM t001
INTO x_t001
WHERE bukrs = i_bsid-bukrs.
ENDAT.
for company code 1500 and 3000 .
IF i_bsid-bukrs EQ '1500' OR i_bsid-bukrs EQ '3000'.
MOVE i_bsid-xblnr TO i_bsid-belnr.
ENDIF.
MOVE-CORRESPONDING i_bsid TO x_item.
x_item-koart = 'D'. " Debitor - Customer Indicator
x_item-konto = bsid-kunnr. " Debitor - Customer Number
x_item-dmshb = bsid-dmbtr.
x_item-wrshb = bsid-wrbtr.
Function module to get ARREAR days.
CALL FUNCTION 'ITEM_DERIVE_FIELDS'
EXPORTING
s_t001 = x_t001
s_bsegp = x_bsegp
key_date = p_bdate
CHANGING
s_item = x_item
EXCEPTIONS
bad_input = 1
OTHERS = 2.
IF sy-subrc = 0.
Populate I_TEMP_DATA for further processing.
i_temp_data-bukrs = i_bsid-bukrs.
i_temp_data-kunnr = i_bsid-kunnr.
i_temp_data-belnr = i_bsid-belnr.
i_temp_data-bldat = i_bsid-bldat.
i_temp_data-shkzg = i_bsid-shkzg.
i_temp_data-zfbdt = i_bsid-zfbdt.
i_temp_data-zterm = i_bsid-zterm.
i_temp_data-vbeln = i_bsid-vbeln.
i_temp_data-waers = i_bsid-waers.
IF x_item-verzn < 0.
x_item-verzn = 0.
ENDIF.
i_temp_data-zuonr = i_bsid-zuonr.
i_temp_data-days = x_item-verzn.
i_temp_data-gjahr = i_bsid-gjahr.
i_temp_data-kidno = i_bsid-kidno.
i_temp_data-rebzg = i_bsid-rebzg.
i_temp_data-xblnr = i_bsid-xblnr.
i_temp_data-sgtxt = i_bsid-sgtxt.
Changing the Sign
IF i_bsid-shkzg = 'H'.
i_temp_data-dmbe2 = i_temp_data-dmbe2 + ( -1 * i_bsid-dmbe2 ).
i_temp_data-dmbtr = i_temp_data-dmbtr + ( -1 * i_bsid-dmbtr ).
ELSE.
i_temp_data-dmbe2 = i_temp_data-dmbe2 + i_bsid-dmbe2.
i_temp_data-dmbtr = i_temp_data-dmbtr + i_bsid-dmbtr.
ENDIF.
i_temp_data-blart = i_bsid-blart.
*for doc type DR
IF i_bsid-blart = 'DR' AND i_bsid-bschl = '01'.
IF i_bsid-sgtxt IS INITIAL.
*Changed our phone number to
MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
ELSE.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
MOVE 'Financial Invoice' TO i_temp_data-vvtext.
ENDIF.
ENDIF.
*for doc type AB
IF i_bsid-blart = 'AB' AND
( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
i_temp_data-bldat = i_bsid-zfbdt.
i_temp_data-xblnr = i_bsid-vbeln.
IF NOT i_bsid-sgtxt IS INITIAL.
*Changed our phone nuber to
MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
MOVE 'Financial Doc' TO i_temp_data-vvtext.
ELSE.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
MOVE 'Financial Doc' TO i_temp_data-vvtext.
ENDIF.
ENDIF.
*for doc type DG
IF i_bsid-blart = 'DG' AND
( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
i_temp_data-bldat = i_bsid-zfbdt.
i_temp_data-xblnr = i_bsid-vbeln.
IF i_bsid-sgtxt IS INITIAL.
*Changed our phone nuber to
MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
ELSE.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
MOVE 'Financial Doc' TO i_temp_data-vvtext.
ENDIF.
ENDIF.
*To display Debit memo and credit memo.
IF i_bsid-blart = 'DG'.
IF ( i_bsid-bschl GE '11' AND i_bsid-bschl LE '19' ).
MOVE 'Credit Memo' TO i_temp_data-vvtext.
ELSEIF ( i_bsid-bschl GE '01' AND i_bsid-bschl LE '09' ).
MOVE 'Debit Memo' TO i_temp_data-vvtext.
ENDIF.
ENDIF.
*for doc type DZ
IF i_bsid-blart = 'DZ' AND
( i_bsid-bschl GE '01' AND i_bsid-bschl LE '19' ).
IF i_bsid-sgtxt IS INITIAL.
*changed our phone number to
MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
ELSE.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
MOVE 'Cust Pmt' TO i_temp_data-vvtext.
ENDIF.
ENDIF.
*Document type DZ and posting key 15
IF i_bsid-blart = 'DZ' AND
i_bsid-bschl EQ '15'.
MOVE 'Cust Pmt' TO i_temp_data-vvtext.
ENDIF.
*Document type DZ and posting key 06.
IF i_bsid-blart = 'DZ' AND
i_bsid-bschl EQ '06'.
MOVE 'Debit' TO i_temp_data-vvtext.
ENDIF.
*Document type DA and posting key 04, 14.
IF i_bsid-blart = 'DA' AND
i_bsid-bschl EQ '04' OR
i_bsid-bschl EQ '14'.
MOVE 'Cust Pmt' TO i_temp_data-vvtext.
MOVE i_bsid-sgtxt TO i_temp_data-vtext.
IF i_bsid-sgtxt IS INITIAL.
MOVE 'Contact Flightsafety' TO i_temp_data-vtext.
ENDIF.
ENDIF.
ENDIF.
*billing period
IF i_bsid-blart = 'RV' AND i_bsid-bschl = '01'.
PERFORM billing_period USING i_temp_data-belnr
i_temp_data-vbeln.
ENDIF.
AT END OF belnr.
at end of zuonr.
APPEND i_temp_data.
CLEAR i_temp_data.
ENDAT.
ENDLOOP.
PERFORM material_details.
ENDFORM. " Get_Arrear_Days
&----
*& Form FORMAT_FINAL_DATA
&----
text
-
FORM format_final_data.
PERFORM pop_format_grp_curr_detail.
CLEAR: itab_temp, i_total.
REFRESH: itab_temp, i_total.
itab_temp] = itab[.
CLEAR itab.
REFRESH itab.
LOOP AT itab_temp.
CLEAR itab.
itab = itab_temp.
CLEAR: itab-matnr.
IF itab-belnr+0(2) = '14'.
*Adding two 00 for the left alignment.
CONCATENATE '00' itab-xblnr
INTO itab-inv_chk.
CONDENSE itab-inv_chk NO-GAPS.
itab-inv_chk = itab-xblnr.
itab-xblnr = itab-belnr.
ELSE.
itab-inv_chk = itab-belnr.
ENDIF.
COLLECT itab.
ENDLOOP.
CLEAR v_stat.
SORT itab BY days inv_chk total DESCENDING.
LOOP AT itab.
*To display Aging totals in usd (if v_stat ne f) for
*company code 1100,1300,2000.
IF itab-bukrs NE '1100' AND
itab-bukrs NE '1300' AND
itab-bukrs NE '2000'.
v_stat = 'F'.
ENDIF.
CLEAR: i_last-vvtext, tvzbt.
MOVE-CORRESPONDING itab TO i_last.
APPEND i_last.
CLEAR i_last.
ENDLOOP.
ENDFORM. " FORMAT_FINAL_DATA
&----
*& Form POP_FORMAT_grp_CURR_DETAIL
&----
text
-
FORM pop_format_grp_curr_detail.
Populating the Final Internal table for report by Group Currency.
CLEAR x_amt.
SORT i_temp_data.
LOOP AT i_temp_data.
CLEAR: v_count.
IF i_temp_data-sgtxt+0(10) = 'Spcfy in p'.
i_temp_data-sgtxt = i_temp_data-sgtxt+32(18).
MOVE i_temp_data-sgtxt TO i_temp_data-vtext.
MODIFY i_temp_data.
ENDIF.
IF r_comp = 'X'.
IF i_temp_data-days LT 0.
x_amt-amt00_ls = x_amt-amt00_ls + i_temp_data-dmbtr.
If between 1 and 30 Days.
ELSEIF i_temp_data-days GE 0 AND i_temp_data-days LE 30.
x_amt-00_30 = x_amt-00_30 + i_temp_data-dmbtr.
If between 31 and 60 Days.
ELSEIF i_temp_data-days GE 31 AND i_temp_data-days LE 60.
x_amt-31_60 = x_amt-31_60 + i_temp_data-dmbtr.
if between 61 and 90
ELSEIF i_temp_data-days GE 61 AND i_temp_data-days LE 90.
x_amt-61_90 = x_amt-61_90 + i_temp_data-dmbtr.
if between 91 and 120
ELSEIF i_temp_data-days GE 91 AND i_temp_data-days LE 120.
x_amt-91_120 = x_amt-91_120 + i_temp_data-dmbtr.
if > 120
ELSEIF i_temp_data-days GT 120.
x_amt-120pls = x_amt-120pls + i_temp_data-dmbtr.
ENDIF.
ELSE.
if the group currency is selected
IF i_temp_data-days LT 0.
x_amt-amt00_ls = x_amt-amt00_ls + i_temp_data-dmbe2.
If between 1 and 30 Days.
ELSEIF i_temp_data-days GE 0 AND i_temp_data-days LE 30.
x_amt-00_30 = x_amt-00_30 + i_temp_data-dmbe2.
If between 31 and 60 Days.
ELSEIF i_temp_data-days GE 31 AND i_temp_data-days LE 60.
x_amt-31_60 = x_amt-31_60 + i_temp_data-dmbe2.
if between 61 and 90
ELSEIF i_temp_data-days GE 61 AND i_temp_data-days LE 90.
x_amt-61_90 = x_amt-61_90 + i_temp_data-dmbe2.
if between 91 and 120
ELSEIF i_temp_data-days GE 91 AND i_temp_data-days LE 120.
x_amt-91_120 = x_amt-91_120 + i_temp_data-dmbe2.
if > 120
ELSEIF i_temp_data-days GT 120.
x_amt-120pls = x_amt-120pls + i_temp_data-dmbe2.
ENDIF.
ENDIF.
Get Customer Name.
SELECT SINGLE name1
INTO itab-name1
FROM kna1
WHERE kunnr = i_temp_data-kunnr.
Invoice and year
AT END OF rebzg.
READ TABLE i_temp_data INDEX sy-tabix.
itab-zuonr = i_temp_data-zuonr.
itab-bukrs = i_temp_data-bukrs.
itab-kunnr = i_temp_data-kunnr.
itab-belnr = i_temp_data-belnr.
itab-gjahr = i_temp_data-gjahr.
IF r_comp EQ 'X'.
itab-waers = i_temp_data-waers.
ELSE.
itab-waers = 'USD'.
ENDIF.
itab-zfbdt = i_temp_data-zfbdt.
itab-zterm = i_temp_data-zterm.
itab-amt00_30 = x_amt-amt00_ls + x_amt-00_30.
itab-amt31_60 = x_amt-31_60.
itab-amt61_90 = x_amt-61_90.
itab-amt91_120 = x_amt-91_120.
itab-amt120pls = x_amt-120pls.
itab-total = x_amt-amt00_ls + x_amt-00_30 +
x_amt-31_60 + x_amt-61_90 +
x_amt-91_120 + x_amt-120pls.
itab-kunnr_c = i_temp_data-kunnr_c.
itab-name_c = i_temp_data-name_c.
itab-kidno = i_temp_data-kidno.
itab-matnr = i_temp_data-matnr.
itab-inv_date = i_temp_data-inv_date.
itab-rebzg = i_temp_data-rebzg.
itab-xblnr = i_temp_data-xblnr.
itab-vtext = i_temp_data-vtext.
itab-sgtxt = i_temp_data-sgtxt.
itab-days = i_temp_data-days.
itab-bldat = i_temp_data-bldat.
itab-vvtext = i_temp_data-vvtext.
itab-zzihrez_e = i_temp_data-zzihrez_e.
itab-blart = i_temp_data-blart.
itab-plant = i_temp_data-plant.
Populating table.
APPEND: itab.
CLEAR : itab,
x_amt.
v_count = 1.
ENDAT.
IF v_count NE 1.
itab-zuonr = i_temp_data-zuonr.
itab-bukrs = i_temp_data-bukrs.
itab-kunnr = i_temp_data-kunnr.
itab-belnr = i_temp_data-belnr.
itab-gjahr = i_temp_data-gjahr.
itab-bldat = i_temp_data-bldat.
IF r_comp EQ 'X'.
itab-waers = i_temp_data-waers.
ELSE.
itab-waers = 'USD'.
ENDIF.
itab-zfbdt = i_temp_data-zfbdt.
itab-zterm = i_temp_data-zterm.
itab-kunnr_c = i_temp_data-kunnr_c.
itab-name_c = i_temp_data-name_c.
itab-kidno = i_temp_data-kidno.
itab-matnr = i_temp_data-matnr.
itab-inv_date = i_temp_data-inv_date.
itab-rebzg = i_temp_data-rebzg.
itab-xblnr = i_temp_data-xblnr.
itab-vtext = i_temp_data-vtext.
itab-sgtxt = i_temp_data-sgtxt.
itab-days = i_temp_data-days.
itab-zzihrez_e = i_temp_data-zzihrez_e.
itab-plant = i_temp_data-plant.
itab-vvtext = i_temp_data-vvtext.
itab-blart = i_temp_data-blart.
IF itab-matnr NE space.
APPEND itab.
CLEAR itab-plant.
ELSE.
ON CHANGE OF i_temp_data-kidno.
READ TABLE i_temp_data INDEX sy-tabix.
itab-zuonr = i_temp_data-zuonr.
itab-bukrs = i_temp_data-bukrs.
itab-kunnr = i_temp_data-kunnr.
itab-belnr = i_temp_data-belnr.
itab-gjahr = i_temp_data-gjahr.
itab-bldat = i_temp_data-bldat.
IF r_comp EQ 'X'.
itab-waers = i_temp_data-waers.
ELSE.
itab-waers = 'USD'.
ENDIF.
itab-zfbdt = i_temp_data-zfbdt.
itab-zterm = i_temp_data-zterm.
itab-amt00_30 = x_amt-amt00_ls + x_amt-00_30.
itab-amt31_60 = x_amt-31_60.
itab-amt61_90 = x_amt-61_90.
itab-amt91_120 = x_amt-91_120.
itab-amt120pls = x_amt-120pls.
itab-total = x_amt-amt00_ls + x_amt-00_30 +
x_amt-31_60 + x_amt-61_90 +
x_amt-91_120 + x_amt-120pls.
itab-kunnr_c = i_temp_data-kunnr_c.
itab-name_c = i_temp_data-name_c.
itab-kidno = i_temp_data-kidno.
itab-matnr = i_temp_data-matnr.
itab-inv_date = i_temp_data-inv_date.
itab-rebzg = i_temp_data-rebzg.
itab-xblnr = i_temp_data-xblnr.
itab-vtext = i_temp_data-vtext.
itab-sgtxt = i_temp_data-sgtxt.
itab-days = i_temp_data-days.
itab-zzihrez_e = i_temp_data-zzihrez_e.
itab-vvtext = i_temp_data-vvtext.
itab-plant = i_temp_data-plant.
APPEND itab.
CLEAR: x_amt-amt00_ls, x_amt-00_30, x_amt-31_60,
x_amt-61_90, x_amt-91_120 , x_amt-120pls.
ENDON.
ENDIF.
CLEAR: itab.
ENDIF.
ENDLOOP.
ENDFORM. " POP_FORMAT_grp_CURR_DETAIL
&----
*& Form material_details
&----
text
-
--> p1 text
<-- p2 text
-
FORM material_details.
SORT itab_details.
DELETE ADJACENT DUPLICATES FROM itab_details.
LOOP AT itab_details.
CLEAR: v_counter, v_gjahr, v_kunnr, v_prodh, v_vbeln,
v_vvtext, v_vtext.
v_gjahr = itab_details-gjahr.
v_kunnr = itab_details-kunnr.
*Invoice Date/Billing date
SELECT SINGLE fkdat FROM vbrk INTO v_inv_date
WHERE vbeln = itab_details-xblnr.
*material number, description and product hierarchy
SELECT matnr arktx prodh FROM vbrp
INTO (v_matnr, v_arktx, v_prodh)
WHERE vbeln = itab_details-xblnr AND
uepos = '00000'.
CLEAR: v_vdatu, v_posnr, v_auart, v_prctr, v_zzihrez,
v_kunnr_c, v_name1, v_name2, v_vtext, v_vvtext.
*Find the contract/order no
SELECT SINGLE vbelv posnv FROM vbfa INTO (v_vbeln, v_posnr)
WHERE vbeln = itab_details-xblnr
AND vbtyp_v IN ('C','G').
*delivery date, document type, plant and reservation no
SELECT SINGLE vbakvdatu vbakauart vbapprctr vbapzzihrez_e
INTO (v_vdatu, v_auart, v_prctr, v_zzihrez)
FROM vbak INNER JOIN vbap ON vbakvbeln = vbapvbeln
WHERE vbap~vbeln = v_vbeln AND
vbap~posnr = v_posnr AND
vbap~abgru = space.
*billing type
SELECT SINGLE * FROM vbkd WHERE vbeln = v_vbeln.
IF vbkd-bsark NE 'ZG01' OR vbkd-bsark NE 'ZO02'.
SELECT SINGLE vtext FROM t176t INTO v_vvtext
WHERE bsark = vbkd-bsark
AND spras EQ sy-langu.
ELSE.
MOVE 'One Time' TO v_vvtext.
ENDIF.
*getting only the reservation number (no text)
IF vbkd-ihrez_e+0(11) CO
'0123456789'.
ELSE.
v_zzihrez = space.
ENDIF.
*location
CONCATENATE '000000' v_zzihrez+0(4) INTO v_prctr.
*plant name
CLEAR v_plant.
SELECT SINGLE ktext FROM cepct INTO v_plant WHERE
prctr = v_prctr AND
spras = sy-langu.
*client no and name
SELECT SINGLE vbpakunnr kna1name1 kna1~name2
INTO (v_kunnr_c, v_name1, v_name2)
FROM vbpa INNER JOIN kna1 ON
vbpakunnr = kna1kunnr
WHERE vbpa~vbeln = v_vbeln AND
vbpa~parvw = 'Z3'.
CONCATENATE v_name1 v_name2 INTO v_name_c
SEPARATED BY space.
READ TABLE i_temp_data WITH KEY bukrs = itab_details-bukrs
belnr = itab_details-belnr
gjahr = itab_details-gjahr.
IF sy-subrc = 0.
CLEAR: v_tabix.
v_tabix = sy-tabix.
IF v_counter IS INITIAL.
MOVE v_plant TO i_temp_data-plant.
MOVE v_zzihrez TO i_temp_data-zzihrez_e.
MOVE v_kunnr_c TO i_temp_data-kunnr_c.
MOVE v_name_c TO i_temp_data-name_c.
MOVE v_gjahr TO i_temp_data-gjahr.
MOVE v_kunnr TO i_temp_data-kunnr.
IF v_auart EQ 'ZOTO' AND i_temp_data-inv_date IS INITIAL.
MOVE v_inv_date TO i_temp_data-inv_date.
ELSEIF i_temp_data-inv_date IS INITIAL.
MOVE v_vdatu TO i_temp_data-inv_date.
ENDIF.
IF i_temp_data-vtext IS INITIAL.
MOVE v_arktx TO i_temp_data-vtext.
ENDIF.
IF i_temp_data-vvtext IS INITIAL.
MOVE v_vvtext TO i_temp_data-vvtext.
ENDIF.
MODIFY i_temp_data INDEX v_tabix.
CLEAR i_temp_data.
v_counter = 'T'.
CLEAR: v_matnr,v_arktx,v_vbeln,v_name_c,v_vtext, v_prodh,
v_kunnr_c, v_name1,v_name2, v_vdatu, v_vvtext.
ELSE.
CLEAR:i_temp_data-dmbe2, i_temp_data-dmbtr. " i_temp_data-wrbtr
MOVE v_matnr TO i_temp_data-matnr.
MOVE v_plant TO i_temp_data-plant.
MOVE v_zzihrez TO i_temp_data-zzihrez_e.
MOVE v_kunnr_c TO i_temp_data-kunnr_c.
MOVE v_name_c TO i_temp_data-name_c.
MOVE v_gjahr TO i_temp_data-gjahr.
MOVE v_kunnr TO i_temp_data-kunnr.
IF v_auart EQ 'ZOTO' AND i_temp_data-inv_date IS INITIAL.
MOVE v_inv_date TO i_temp_data-inv_date.
ELSEIF i_temp_data-inv_date IS INITIAL.
MOVE v_vdatu TO i_temp_data-inv_date.
ENDIF.
MOVE v_arktx TO i_temp_data-vtext.
APPEND i_temp_data.
CLEAR i_temp_data.
ENDIF.
ENDIF.
ENDSELECT.
CLEAR:
i_temp_data-kunnr_c,
i_temp_data-name_c,i_temp_data-inv_date,
i_temp_data-vtext.
CLEAR: v_matnr,v_arktx,v_vbeln,v_name_c,
v_kunnr_c, v_name1,v_name2,v_inv_date, v_vdatu,
v_vtext, v_prodh.
ENDLOOP.
ENDFORM. " material_details
&----
*& Form get_address
&----
text
-
FORM get_address.
Get Address
CLEAR: kna1, x_kna1, first_name, last_name,pafkt, lang, v_land.
SELECT SINGLE * FROM kna1 INTO kna1 WHERE kunnr = i_last-kunnr.
SELECT SINGLE name1 namev pafkt parla FROM knvk
INTO (last_name, first_name, pafkt, lang)
WHERE kunnr = i_last-kunnr
AND abtnr = '0003'. "financial department
IF sy-subrc NE 0.
SELECT SINGLE name1 namev pafkt parla FROM knvk
INTO (last_name, first_name, pafkt, lang)
WHERE kunnr = i_last-kunnr.
ENDIF.
IF lang = ' '.
lang = 'E'.
ENDIF.
SELECT SINGLE vtext FROM tpfkt INTO x_kna1-ptext
WHERE pafkt = pafkt
AND spras = lang.
SELECT SINGLE name1 name2 street country FROM
adrc INTO (x_kna1-name1, x_kna1-name2,
x_kna1-street, v_land)
WHERE addrnumber = kna1-adrnr.
SELECT SINGLE landx FROM t005t INTO x_kna1-landx WHERE land1 = v_land
AND spras = lang.
TRANSLATE x_kna1-landx TO UPPER CASE. "#EC SYNTCHAR added by sony
MOVE kna1-kunnr TO x_kna1-kunnr.
MOVE kna1-ort01 TO x_kna1-ort01.
MOVE kna1-regio TO x_kna1-regio.
MOVE kna1-pstlz TO x_kna1-pstlz.
MOVE p_bdate TO x_kna1-agdate.
APPEND x_kna1.
CLEAR: x_kna1.
ENDFORM. " get_addres
&----
*& Form fetch_data_vender
&----
text
-
--> p1 text
<-- p2 text
-
FORM fetch_data_vender.
SELECT lifnr FROM kna1 INTO TABLE itab_vender
WHERE kunnr IN s_kunnr.
LOOP AT itab_vender.
Fetch data from BSIK into Internal table I_BSIK.
SELECT *
FROM bsik
APPENDING TABLE i_bsik
WHERE bukrs IN s_bukrs AND
lifnr EQ itab_vender-vender AND
budat LE p_bdate AND
blart IN ('KA', 'KG', 'KR', 'KZ', 'KF').
Fetch data from BSAK into Internal table I_BSAK.
SELECT *
FROM bsak "#EC ENHOK "added by sony 06/05/08
APPENDING TABLE i_bsik
WHERE bukrs IN s_bukrs AND
lifnr EQ itab_vender-vender AND
budat LE p_bdate AND
augdt GT p_bdate AND
blart IN ('KA', 'KG', 'KR', 'KZ', 'KF').
ENDLOOP.
DELETE i_bsik WHERE ( bukrs = '1500' OR bukrs = '3000' ) AND
( umsks = 'E' OR umskz = 'E' ).
ENDFORM. " fetch_data_vender
&----
*& Form GET_ARREAR_DAYS_vender
&----
text
-
--> p1 text
<-- p2 text
-
FORM get_arrear_days_vender.
SORT i_bsik BY mandt bukrs belnr.
CLEAR: v_tabix.
LOOP AT i_bsik.
v_tabix = sy-tabix.
SELECT SINGLE * FROM kna1 WHERE lifnr = i_bsik-lifnr.
MOVE i_bsik-bukrs TO itab_details-bukrs.
MOVE i_bsik-xblnr TO itab_details-xblnr.
MOVE i_bsik-belnr TO itab_details-belnr.
MOVE i_bsik-gjahr TO itab_details-gjahr.
MOVE kna1-kunnr TO itab_details-kunnr.
APPEND itab_details.
CLEAR itab_details.
CLEAR x_item.
AT NEW bukrs.
*company code details
READ TABLE i_bsik INDEX sy-tabix.
CLEAR x_t001.
SELECT SINGLE * FROM t001
INTO x_t001
WHERE bukrs = i_bsik-bukrs.
ENDAT.
MOVE-CORRESPONDING i_bsik TO x_item.
x_item-koart = 'D'. " Debitor - Customer Indicator
x_item-konto = kna1-kunnr. " Debitor - Customer Number
x_item-dmshb = bsik-dmbtr.
x_item-wrshb = bsik-wrbtr.
Function module to get ARREAR days.
CALL FUNCTION 'ITEM_DERIVE_FIELDS'
EXPORTING
s_t001 = x_t001
s_bsegp = x_bsegp
key_date = p_bdate
CHANGING
s_item = x_item
EXCEPTIONS
bad_input = 1
OTHERS = 2.
IF sy-subrc = 0.
Populate I_TEMP_DATA for further processing.
i_temp_data-bukrs = i_bsik-bukrs.
i_temp_data-kunnr = kna1-kunnr.
i_temp_data-belnr = i_bsik-belnr.
i_temp_data-bldat = i_bsik-bldat. "Document date in document
i_temp_data-shkzg = i_bsik-shkzg.
i_temp_data-zfbdt = i_bsik-zfbdt. " Base line date
i_temp_data-zterm = i_bsik-zterm. "Terms of payment key
i_temp_data-waers = i_bsik-waers.
i_temp_data-days = x_item-verzn. " days in arrs
i_temp_data-gjahr = i_bsik-gjahr. " year
i_temp_data-kidno = i_bsik-kidno. " Payment Reference
i_temp_data-rebzg = i_bsik-rebzg. " Number of the Invoice the
"Transaction Belongs to
i_temp_data-xblnr = i_bsik-xblnr.
i_temp_data-sgtxt = i_bsik-sgtxt. " Item Text
Changing the Sign
IF i_bsik-shkzg = 'H'.
i_temp_data-dmbe2 = -1 * i_bsik-dmbe2.
i_temp_data-dmbtr = -1 * i_bsik-dmbtr.
ELSE.
i_temp_data-dmbe2 = i_bsik-dmbe2.
i_temp_data-dmbtr = i_bsik-dmbtr.
ENDIF.
ENDIF.
APPEND i_temp_data.
CLEAR i_temp_data.
ENDLOOP.
PERFORM material_details.
ENDFORM. " Get_Arrear_DaysENDFORM.
" GET_ARREAR_DAYS_vender
&----
*& Form convert_pdf
&----
text
-
--> p1 text
<-- p2 text
-
FORM convert_pdf.
CLEAR: tsp01.
CLEAR: mtab_pdf, mi_bytecount.
REFRESH mtab_pdf.
FREE mtab_pdf.
***convert to PDF format
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = mi_bytecount
TABLES
otf = i_otf_final
lines = mtab_pdf
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.
IF sy-subrc 0.
ENDIF.
CONDENSE itab-kunnr NO-GAPS.
CONCATENATE 'C:\' itab-kunnr '_' sy-datum '.pdf' INTO downfile.
IF ch_down = 'X'.
PERFORM download_pdf.
ENDIF.
IF ch_email = 'X'.
PERFORM send_email.
ENDIF.
ENDFORM. " convert_pdf
&----
*& Form download_pdf
&----
text
-
--> p1 text
<-- p2 text
-
FORM download_pdf.
DATA: i_downfile TYPE string.
i_downfile = downfile.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = mi_bytecount
filename = i_downfile
filetype = 'BIN'
IMPORTING
FILELENGTH =
TABLES
data_tab = mtab_pdf[]
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.
ENDIF.
ENDFORM. " download_pdf
&----
*& Form send_email
&----
text
-
--> p1 text
<-- p2 text
-
FORM send_email.
CLEAR: packing_list[],
pdf[],
contents_txt[],
contents_hex[],
receivers[],
att_pos,
document_data,
esubject,emsgs[],
w_contents_hex.
PERFORM packing_list.
PERFORM set_data.
IF v_check NE 'X'.
PERFORM send_email_message.
ENDIF.
ENDFORM. " send_email
&----
*& Form packing_list
&----
text
-
--> p1 text
<-- p2 text
-
FORM packing_list.
Concatenate the PDF material into the attachments table.
PERFORM append_pdf_to_attachments USING mi_bytecount.
Describe the attachment
CLEAR packing_list.
REFRESH packing_list.
packing_list-transf_bin = 'X'.
ADD 1 TO att_pos.
packing_list-body_start = att_pos.
DESCRIBE TABLE contents_hex LINES att_pos.
packing_list-body_num = att_pos.
packing_list-doc_type = 'PDF'.
CONCATENATE 'Statement Date'
sy-datum4(2) '/' sy-datum6(2) '/'
sy-datum+2(2) '-' 'Customer no -' itab-kunnr
INTO packing_list-obj_descr.
packing_list-obj_langu = 'E'.
packing_list-doc_size = mi_bytecount.
APPEND packing_list.
ENDFORM. " packing_list
&----
*& Form set_data
&----
text
-
--> p1 text
<-- p2 text
-
FORM set_data.
CLEAR: sy-tfill.
DESCRIBE TABLE contents_hex LINES sy-tfill.
IF sy-tfill GT 0.
DATA: lines TYPE TABLE OF tline WITH HEADER LINE.
By this point, the attachments have been created. Now we supply body
text and set up the recipients.
CONCATENATE 'Customer Statement for Customer - '
itab-kunnr esubject INTO esubject.
The message header information
CLEAR document_data.
document_data-obj_name = 'ZWRAPPER'.
document_data-obj_descr = esubject.
document_data-obj_langu = 'E'.
document_data-obj_prio = '1'.
CLEAR: contents_txt, contents_txt], itext[, itext.
IF sy-sysid NE 'R3P'.
CONCATENATE 'Please ignore this mail. This is part of testing from '
sy-sysid INTO contents_txt SEPARATED BY space.
APPEND contents_txt.
CLEAR: contents_txt.
APPEND contents_txt.
ENDIF.
CLEAR vv_text.
CONCATENATE 'Enter Body of the Email and SAVE it for customer '
itab-kunnr itab-name1 INTO vv_text SEPARATED BY space.
EDITOR-CALL FOR itext TITLE vv_text.
LOOP AT itext.
contents_txt = itext-text.
APPEND contents_txt.
ENDLOOP.
Describe the body data. This descriptor has to be the first, in front
of all the attachments.
CLEAR packing_list.
packing_list-transf_bin = space.
packing_list-body_start = 1.
DESCRIBE TABLE contents_txt LINES packing_list-body_num.
packing_list-doc_type = 'RAW'.
packing_list-obj_langu = 'E'.
INSERT packing_list INDEX 1.
Set up the recipients.
CLEAR: receivers, receivers[], sy-tfill.
CLEAR: usr21, adr6.
*find email address.
IF sy-sysid = 'R3P'.
SELECT prsnr FROM knvk INTO knvk-prsnr WHERE kunnr = itab-kunnr.
SELECT SINGLE adrnr name1 name2 FROM kna1 INTO
(kna1-adrnr, kna1-name1, kna1-name2)
WHERE kunnr = itab-kunnr.
SELECT SINGLE smtp_addr INTO v_email FROM adr6
WHERE addrnumber EQ kna1-adrnr.
IF sy-subrc NE 0.
CLEAR: v_email.
ELSE.
EXIT.
ENDIF.
ENDSELECT.
ENDIF.
*find the user email address.
CLEAR: usr21, adr6.
SELECT SINGLE * FROM usr21 WHERE bname = sy-uname.
CLEAR adr6.
SELECT SINGLE * FROM adr6 WHERE addrnumber = usr21-addrnumber AND
persnumber = usr21-persnumber.
v_ccemail = adr6-smtp_addr.
CLEAR:i_fields.
REFRESH:i_fields.
i_fields-tabname = 'COMPMSG'.
i_fields-fieldname = 'TEXT'.
i_fields-fieldtext = 'Email'.
i_fields-value = v_email.
APPEND i_fields.
CLEAR i_fields.
i_fields-tabname = 'T100'.
i_fields-fieldname = 'TEXT'.
i_fields-fieldtext = 'CC to'.
i_fields-value = v_ccemail.
APPEND i_fields.
CLEAR i_fields.
CLEAR v_returncode.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = 'Email Address.'
start_column = '25'
start_row = '2'
IMPORTING
returncode = v_returncode
TABLES
fields = i_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF sy-subrc 0.
ENDIF.
IF v_returncode NE 'A'.
*find the new condition value (table name and filed name took itfor char
LOOP AT i_fields WHERE tabname = 'COMPMSG' AND fieldname = 'TEXT'.
v_email = i_fields-value.
ENDLOOP.
LOOP AT i_fields WHERE tabname = 'T100'
AND fieldname = 'TEXT'.
v_ccemail = i_fields-value.
ENDLOOP.
ENDIF.
receivers-receiver = v_email.
receivers-rec_type = 'U'. "..assume it's an internet address
APPEND receivers.
receivers-receiver = v_ccemail.
receivers-rec_type = 'U'.
receivers-copy = 'X'.
APPEND receivers.
SORT receivers BY receiver.
DELETE ADJACENT DUPLICATES FROM receivers COMPARING receiver.
ENDIF.
CLEAR: v_check.
IF v_email = space.
v_check = 'X'.
MOVE itab-kunnr TO ioutput-kunnr.
MOVE v_kname TO ioutput-kname.
MOVE v_email TO ioutput-email.
MOVE 'X' TO ioutput-error.
APPEND ioutput.
CLEAR ioutput.
ENDIF.
ENDFORM. " set_data
&----
*& Form SEND_EMAIL_MESSAGE
&----
text
-
--> p1 text
<-- p2 text
-
FORM send_email_message.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = document_data
TABLES
packing_list = packing_list
contents_txt = contents_txt
contents_hex = contents_hex
receivers = receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc 0.
MOVE itab-kunnr TO ioutput-kunnr.
MOVE v_kname TO ioutput-kname.
MOVE v_email TO ioutput-email.
MOVE 'X' TO ioutput-error.
APPEND ioutput.
CLEAR ioutput.
IF sy-msgv1 = 'ADDR_PERS_COMP_COMM_GET'.
MESSAGE i999 WITH 'Please Contact Help Desk. '
'You Must Have An E-mail-ID In The SAP System'.
STOP.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
STOP. "exit prematurely
ENDIF.
ELSE.
MOVE itab-kunnr TO ioutput-kunnr.
MOVE v_kname TO ioutput-kname.
MOVE v_email TO ioutput-email.
MOVE ' ' TO ioutput-error.
APPEND ioutput.
CLEAR ioutput.
ENDIF.
ENDFORM. " SEND_EMAIL_MESSAGE
&----
*& Form APPEND_PDF_TO_ATTACHMENTS
&----
text
-
-->P_MI_BYTECOUNT text
-
FORM append_pdf_to_attachments USING bytecount.
DATA: src_len TYPE i,
dst_len TYPE i.
DATA: src_off TYPE i,
dst_off TYPE i.
DATA: tot_off TYPE i.
REFRESH pdf.
CLEAR pdf.
pdf] = mtab_pdf[.
DESCRIBE FIELD pdf LENGTH src_len IN CHARACTER MODE.
DESCRIBE FIELD w_contents_hex LENGTH dst_len IN BYTE MODE.
CLEAR: dst_off, tot_off.
CLEAR: w_contents_hex WITH NULL.
LOOP AT pdf.
CLEAR src_off.
DO.
WHILE src_off LT src_len AND
dst_off LT dst_len AND
tot_off LT bytecount.
w_contents_hex-linedst_off = pdfsrc_off. "copy one byte at a time
ADD 1 TO: src_off, dst_off, tot_off. "..until a boundary reached
ENDWHILE.
IF dst_off GE dst_len. "we've completely filled an output line
APPEND w_contents_hex TO contents_hex. "write it out
CLEAR w_contents_hex WITH NULL. "re-initialize the output line
CLEAR dst_off.
ENDIF.
IF src_off GE src_len. "we've completely exhausted an input line
EXIT. "cause a new input line to be read
ENDIF.
IF tot_off GE bytecount. "we've completely exhausted input stream
EXIT.
ENDIF.
ENDDO.
IF tot_off GE bytecount. "exit loop when byte stream exhausted
EXIT.
ENDIF.
ENDLOOP.
IF dst_off GT 0. "write out the last partial line
APPEND w_contents_hex TO contents_hex.
ENDIF.
ENDFORM. " APPEND_PDF_TO_ATTACHMENTS
&----
*& Form display_output
&----
text
-
--> p1 text
<-- p2 text
-
FORM display_output.
DATA: v_count TYPE i.
CLEAR: v_count.
LOOP AT ioutput WHERE error EQ space.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
WRITE:/10
'Customer Statement Email sent to the following email address'.
SKIP 2.
WRITE:/10 'Customer No' COLOR 5 INVERSE,
25 'Customer Name' COLOR 5 INVERSE,
60 'Enail ' COLOR 5 INVERSE.
SKIP 1.
LOOP AT ioutput WHERE error EQ space.
v_count = v_count + 1.
WRITE:/10 ioutput-kunnr COLOR 5 INVERSE,
25 ioutput-kname COLOR 5 INVERSE,
60 ioutput-email COLOR 5 INVERSE.
ENDLOOP.
SKIP.
WRITE:/10 'Total Number for Customers' COLOR 5 INVERSE,
v_count COLOR 5 INVERSE.
ENDIF.
CLEAR: v_count.
LOOP AT ioutput WHERE error EQ 'X'.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
SKIP 2.
WRITE:/10
'Customer Statement Email did not send - Error'.
SKIP 2.
WRITE:/10 'Customer No' COLOR 7 INVERSE,
25 'Customer Name' COLOR 7 INVERSE,
60 'Enail ' COLOR 7 INVERSE.
SKIP 1.
LOOP AT ioutput WHERE error EQ 'X'.
v_count = v_count + 1.
WRITE:/10 ioutput-kunnr COLOR 7 INVERSE,
25 ioutput-kname COLOR 7 INVERSE,
60 ioutput-email COLOR 7 INVERSE.
ENDLOOP.
SKIP.
WRITE:/10 'Total Number for Customers' COLOR 7 INVERSE,
v_count COLOR 7 INVERSE.
ENDIF.
ENDFORM. " display_output
&----
*& Form smart_from
&----
text
-
--> p1 text
<-- p2 text
-
FORM smart_from.
DATA: i_ssfcompop TYPE ssfcompop." OCCURS 0 WITH HEADER LINE.
DATA: i_ssfctrlop TYPE ssfctrlop." occurs 0 with header line.
p_form = 'ZDFI_CUSTOMER_STATEMENT_NEW'.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = p_form
IMPORTING
fm_name = fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
CLEAR: i_ssfcompop.
SELECT SINGLE padest FROM tsp03l INTO v_print
WHERE lname EQ p_print.
i_ssfcompop-tddest = v_print.
IF v_print EQ space.
i_ssfcompop-tddest = 'LOCL'.
ENDIF.
i_ssfctrlop-no_dialog = 'X'.
i_ssfctrlop-preview = space.
IF ch_down = 'X' OR ch_email = 'X'.
IF ch_email ='X' OR v_immed = space.
i_ssfctrlop-getotf = 'X'.
ENDIF.
i_ssfcompop-tdnewid = 'X'.
i_ssfcompop-tdimmed = v_immed.
i_ssfcompop-tddelete = v_dele.
CALL FUNCTION fm_name
EXPORTING
control_parameters = i_ssfctrlop
output_options = i_ssfcompop
user_settings = space
r_comp = r_comp
v_stat = v_stat
IMPORTING
job_output_info = i_ssfcrescl
TABLES
zaddress = x_kna1
ztotal = i_total
zmain = i_final
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
.
IF sy-subrc 0.
MESSAGE i999 WITH
'Forms did not create,': ' Please contact Business System'.
STOP.
ENDIF.
*for email selection
IF ch_email = 'X'.
i_otf_final] = i_ssfcrescl-otfdata[.
PERFORM convert_pdf.
ENDIF.
*to display if no value in the print Immediately
IF v_immed = space.
CALL FUNCTION 'HR_EFI_SHOW_PDF_FORM'
EXPORTING
top_edge = 0
left_edge = 0
TABLES
otf_table = i_ssfcrescl-otfdata.
ENDIF.
ENDFORM. " smart_from
&----
*& Form VALIDATE_SELECTION_SCREEN
&----
text
-
--> p1 text
<-- p2 text
-
FORM validate_selection_screen.
IF r_comp = 'X'.
SELECT bukrs waers FROM t001 INTO TABLE i_bukrs WHERE
bukrs IN s_bukrs.
*only one compnay code/Currency for company code
SORT i_bukrs BY waers.
DELETE ADJACENT DUPLICATES FROM i_bukrs.
CLEAR sy-tfill.
DESCRIBE TABLE i_bukrs LINES sy-tfill.
IF sy-tfill GT 1.
MESSAGE i999 WITH 'Only one company code at a time':
' for group currency'.
STOP.
ENDIF.
DELETE i_bukrs WHERE bukrs EQ '1400' OR
bukrs EQ '1500' OR
bukrs EQ '1600' OR
bukrs EQ '3000' OR
bukrs EQ '4530'.
CLEAR sy-tfill.
DESCRIBE TABLE i_bukrs LINES sy-tfill.
IF sy-tfill GT 0.
MESSAGE i999 WITH 'All North America Companies Codes ' :
' can not print in Group Currency. ':
' Please select Company Currency'.
STOP.
ENDIF.
ENDIF.
ENDFORM. " VALIDATE_SELECTION_SCREEN
&----
*& Form get_total
&----
text
-
--> p1 text
<-- p2 text
-
FORM get_total.
CLEAR: i_total.
REFRESH: i_total.
LOOP AT itab_temp WHERE kunnr = i_last-kunnr.
i_total-00_30 = itab_temp-amt00_30.
i_total-31_60 = itab_temp-amt31_60.
i_total-61_90 = itab_temp-amt61_90.
i_total-91_120 = itab_temp-amt91_120.
i_total-120pls = itab_temp-amt120pls.
i_total-total = itab_temp-total.
i_total-waers = itab_temp-waers.
COLLECT i_total.
CLEAR: i_total.
ENDLOOP.
ENDFORM. " get_total
&----
*& Form billing_period
&----
text
-
-->P_BELNR text
-->P_VBELN text
-
FORM billing_period USING p_belnr
p_vbeln.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " invoice no
EXPORTING
input = p_belnr
IMPORTING
output = p_belnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' " order/contract no
EXPORTING
input = p_vbeln
IMPORTING
output = p_vbeln.
DATA: v_count(2) TYPE p VALUE 0,
v_count1(2).
DATA: v_vbeln(10) TYPE n,
v_sdate LIKE vbrk-fkdat,
v_edate LIKE vbrk-fkdat,
v_order(10) TYPE n.
DATA: v_eddate(10), v_stdate(10).
DATA: BEGIN OF itab_bill OCCURS 0,
vbeln LIKE vbfa-vbeln,
fplnr LIKE vbfa-fplnr,
fpltr LIKE vbfa-fpltr,
END OF itab_bill.
DATA: v_flag,
v_afdat LIKE fplt-afdat,
v_bdate LIKE fplt-nfdat.
CLEAR: itab_bill, itab_bill[].
CLEAR: v_sdate ,itab_bill, v_count.
*select the billing period from vbfa
SELECT vbeln fplnr fpltr FROM vbfa INTO TABLE itab_bill
WHERE vbeln = p_belnr.
SORT itab_bill BY vbeln fpltr.
delete duplicate records.
DELETE ADJACENT DUPLICATES FROM itab_bill COMPARING vbeln fpltr.
LOOP AT itab_bill.
SELECT SINGLE * FROM fplt
WHERE fplnr = itab_bill-fplnr AND
fpltr = itab_bill-fpltr.
IF sy-subrc EQ 0.
AT NEW vbeln.
move first starting date to starting date
IF fplt-nfdat+0(2) NE '00'.
MOVE fplt-fkdat TO i_temp_data-inv_date.
ELSE.
MOVE fplt-afdat TO i_temp_data-inv_date.
ENDIF.
ENDAT.
EXIT.
ENDIF.
ENDLOOP.
ENDFORM. " billing_period
2008 Sep 12 5:35 AM
Hi
Looks like BASIS issue.
Pls check the OSS Note - Note 787418 - Sent documents are not readable after upgrade
Pls contact your BASIS person
Regards
MD
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |