Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

PDF Attachment Email Opening issue in ECC6

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

Tags:
Former Member
Not what you were looking for? View more on this topic or Ask a question