Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Sub Routines

Former Member
0 Kudos

Hi,

I had done the validations for the following. when iam doing syntax check it is giving me correct. plz let me know whether it is correct order or not.

PERFORM VALIDATE_MINDK.

PERFORM VALIDATE_EKGRP.

PERFORM VALIDATE_LIFNR.

FORM VALIDATE_MINDK .

DATA:

LW_MINDK TYPE T059M-MINDK,

W_INPUT TYPE C.

IF SMINDK NE 'EX'.

SELECT MINDK FROM T059M INTO LW_MINDK

WHERE MINDK IN SMINDK.

ENDSELECT.

ENDIF.

IF SY-SUBRC NE 0.

MESSAGE E000(0) WITH 'NO MINORITY INDICATOR FOR THIS CUSTOMER'.

ELSE.

W_INPUT = 'X'.

ENDIF.

ENDFORM. " VALIDATE_MINDK

&----


*& Form VALIDATE_EKGRP

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM VALIDATE_EKGRP .

DATA:

LW_EKGRP TYPE T024-EKGRP,

W_INPUT TYPE C.

IF SAEDAT IS NOT INITIAL.

SELECT EKGRP FROM T024 INTO LW_EKGRP

WHERE EKGRP IN SEKGRP.

ENDSELECT.

ENDIF.

IF SY-SUBRC NE 0.

MESSAGE E000(0) WITH 'INVALID PURCHASE GROUP RANGE'.

ELSE.

W_INPUT = 'X'.

ENDIF.

ENDFORM. " VALIDATE_EKGRP

&----


*& Form VALIDATE_LIFNR

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM VALIDATE_LIFNR .

DATA:

LW_LIFNR TYPE EKKO-LIFNR,

W_INPUT TYPE C.

IF SLIFNR IS NOT INITIAL.

SELECT LIFNR FROM EKKO INTO LW_LIFNR

WHERE LIFNR IN SLIFNR.

ENDSELECT.

ENDIF.

IF SY-SUBRC NE 0.

MESSAGE E000(0) WITH 'INVALID VENDOR GROUP RANGE'.

ELSE.

W_INPUT = 'X'.

ENDIF.

ENDFORM. " VALIDATE_LIFNR

1 ACCEPTED SOLUTION

Former Member
0 Kudos

the code written is perfectly correct. U can procced with the rest of the code.

Award points.

7 REPLIES 7

Former Member
0 Kudos

the code written is perfectly correct. U can procced with the rest of the code.

Award points.

Former Member
0 Kudos

it seems to be correct but plz avoid using select and end select

instead try to use into table

0 Kudos

Hi,

plz tell me how to use into tables

Former Member
0 Kudos

hi rams

ur code seems to be absolutely fine

is there any error u are encountering. please do let us know

regards

ravish

<b>plz dont forget to reward points if useful</b>

Former Member
0 Kudos

no need of using into tables... ur just trying to validate the data... if u want to store data then u need to use the table concept...

instead of select...endselect try using

select single field into <variable> .......

or else

select field into <variable> up to 1 rows ......

endselect

this minimizes the database selection...

Reward points

Former Member
0 Kudos

Hi Ram,

See this sample report code and do accordingly

report zesdr001

line-size 215

line-count 65

no standard page heading

message-id zv.

***********************************************************************

  • Tables Declaration

***********************************************************************

tables:vbrk, " Sales Document: Billing Header Data

mara, " Material Master Data

mbew, " Material Valuation data

mbewh, " Material Valuation: History Data

t001, " Company Codes

t001w, " Plants/Branches

konv, " Pricing Conditions Data

t179t, " Materials: Product hierarchies: Texts

tcurx, " Currency Conversion Table

vbuk, " Sales Document: Header Status data

tvko, " Organizational Unit: Sales Organizations

tvtw, " Organizational Unit: Dist.Channels

tspa, " Organizational Unit: Divisions

tvfk, " Billing Document Types

kna1. " Customer Master Data

************************************************************************

  • Declaration of Data and Internal Tables

************************************************************************

  • Internal table to store the Billing Details data.(VBRK,VBRP)

data: begin of itab_bill occurs 0,

vbeln like vbrk-vbeln, " Billing Document Number

fktyp like vbrk-fktyp, " Billing Category

vbtyp like vbrk-vbtyp, " Sales Doc Category

fkdat like vbrk-fkdat, " Billing doc date

fkart like vbrk-fkart, " Billing Doc type

bukrs like vbrk-bukrs, " Company Code

kurrf like vbrk-kurrf, " Exchange type

knumv like vbrk-knumv, " Condition Number

waerk like vbrk-waerk, " Currency

kunag like vbrk-kunag, " Sold to Party

vrkme like vbrp-vrkme, " sales Unit

posnr like vbrp-posnr, " Item Number

charg like vbrp-charg, " Batch Number

fkimg like vbrp-fkimg, " Billed quantity

werks like vbrp-werks, " Plant

matnr like vbrp-matnr, " Material Number

netwr like vbrp-netwr, " Net Value of the doc

wavwr like vbrp-wavwr, " Cost in Doc Currency

kdmat like vbap-kdmat, " Customer Material

end of itab_bill.

  • Internal table to write the report output when Customer Mode

  • Radiobutton is selected

data: begin of itab_out occurs 0,

kunag like vbrk-kunag, " Customer No

vbeln like vbrk-vbeln, " Billing Document Number

fkart like vbrk-fkart, " Billing Doc type

fktyp like vbrk-fktyp, " Billing Category

vbtyp like vbrk-vbtyp, " Sales Doc Category

fkdat like vbrk-fkdat, " Billing doc date

kunnr like kna1-kunnr, " Customer

bukrs like vbrk-bukrs, " Company Code

kurrf like vbrk-kurrf, " Exchange Rate

waerk like vbrk-waerk, " Currency

vrkme like vbrp-vrkme, " Sales Unit

posnr like vbrp-posnr, " Item Number

charg like vbrp-charg, " Batch Number

fkimg like vbrp-fkimg, " Billed quantity

werks like vbrp-werks, " Plant

matnr like vbrp-matnr, " Material NUmber

kdmat like vbap-kdmat, " Customer Material

bil_amt(16) type p decimals 2, " Bill Amount

mode(10), " Mode

density(10), " Density

sel_prc(16) type p decimals 2, " Selling Price

mvg_prs like mbew-verpr, " Moving Price

gp_mvp_amt like vbrp-netwr, " GrossProfit Amount(MVP)

gp_mvp_pr(6) type p decimals 2, " ,, percentage

end of itab_out.

  • Internal table to write the report output when Mode

  • Radiobutton is selected

data: begin of itab_out2 occurs 0,

mode(10),

vbeln like vbrk-vbeln, " Billing Document Number

fktyp like vbrk-fktyp, " Billing Category

vbtyp like vbrk-vbtyp, " Sales Doc Category

fkdat like vbrk-fkdat, " Billing doc date

kunag like vbrk-kunag, " Sold to party

kunnr like kna1-kunnr, " Customer

bukrs like vbrk-bukrs, " Company Code

kurrf like vbrk-kurrf, " Exchange Rate

waerk like vbrk-waerk, " Currency

vrkme like vbrp-vrkme, " Sales UNit

posnr like vbrp-posnr, " Item No

charg like vbrp-charg, " Batch Number

fkimg like vbrp-fkimg, " Billed quantity

werks like vbrp-werks, " Plant

matnr like vbrp-matnr, " Material Number

kdmat like vbap-kdmat, " Customer Material No

bil_amt(16) type p decimals 2, " Billing Amount

density(10), " density

sel_prc(16) type p decimals 4, " Selling Price

mvg_prs like mbew-verpr, " Moving Price

gp_mvp_amt like vbrp-netwr, " GrossProfit Amount(MVP)

gp_mvp_pr(6) type p decimals 2, " ,, percentage

end of itab_out2.

  • Internal table to write the report output when Density

  • Radiobutton is selected

data: begin of itab_out3 occurs 0,

mode(10),

density(10),

vbeln like vbrk-vbeln, " Billing Document Number

fktyp like vbrk-fktyp, " Billing Category

vbtyp like vbrk-vbtyp, " Sales Doc Category

fkdat like vbrk-fkdat, " Billing doc date

kunag like vbrk-kunag, " Sold to Party

kunnr like kna1-kunnr, " Customer

bukrs like vbrk-bukrs, " Company Code

kurrf like vbrk-kurrf, " Exchange Rate

waerk like vbrk-waerk, " Currency

vrkme like vbrp-vrkme, " Sales Unit

posnr like vbrp-posnr, " Item Number

charg like vbrp-charg, " Batch Number

fkimg like vbrp-fkimg, " Billed quantity

werks like vbrp-werks, " Plant

matnr like vbrp-matnr, " Material Number

kdmat like vbap-kdmat, " Customer Material

bil_amt(16) type p decimals 2, " Bill Amount

sel_prc(16) type p decimals 4, " Selling Price

mvg_prs like mbew-verpr, " Moving Price

gp_mvp_amt like vbrp-netwr, " GrossProfit Amount(MVP)

gp_mvp_pr(6) type p decimals 2, " ,, percentage

end of itab_out3.

*-Internal Table to Hold data to be downloaded to file

data: begin of itab_out1 occurs 0,

kunag(10), " Customer

vbeln(10), " Billing Doc No

fkdat(10), " Bill Date

posnr(6), " Item No

mode(6), " Mode

density(6), " Density

matnr(18), " Material

charg(10), " Batch Number

fkimg like vbrp-fkimg, " Billed quantity

vrkme(4), " Sales Unit

sel_prc(14), " Selling Price

bil_amt(15) type p decimals 2, " Billing Amount

waerk(4), " Currency

mvg_prs(15), " Moving Price

gp_mvp_amt like vbrp-netwr, " Gross profit Amount(MVP)

gp_mvp_pr(15), " ,, percentage

kdmat(35), " Customer Material

end of itab_out1.

*Internal Table

data: begin of fieldnames occurs 0,

title(25) type c,

table(5) type c,

field(5) type c,

type(1) type c,

end of fieldnames.

  • Declaration Of Variables

data: w_period like bapi0002_4-fiscal_period,

w_year like bapi0002_4-fiscal_year,

w_date like bsad-budat,

w_lin type i. "No.of lines in Internal Table

data: t_fkimg like vbrp-fkimg,

t_bil_amt(8) type p decimals 2,

t_gp_mvp_amt(8) type p decimals 2,

t_gr_fkimg like vbrp-fkimg,

t_gr_bil_amt(8) type p decimals 2,

t_gr_gp_mvp_amt(8) type p decimals 2,

t_efkimg like vbrp-fkimg,

t_ebil_amt(8) type p decimals 2,

t_egp_mvp_amt(8) type p decimals 2.

data:f_flg .

************************************************************************

  • Select-Options

************************************************************************

selection-screen: begin of block b with frame.

selection-screen : begin of block b1 with frame title text-001.

select-options:s_bukrs for t001-bukrs no intervals no-extension

obligatory,

s_vkorg for tvko-vkorg no intervals no-extension,

s_vtweg for tvtw-vtweg no intervals no-extension,

s_spart for tspa-spart no intervals no-extension,

s_werks for t001w-werks no intervals no-extension,

s_kunag for kna1-kunnr,

s_vbeln for vbuk-vbeln,

s_fkart for tvfk-fkart,

s_fkdat for vbrk-fkdat obligatory.

selection-screen begin of line.

selection-screen comment 1(20) text-008.

selection-screen end of line.

selection-screen begin of line.

parameters p_cust type c radiobutton group cust.

selection-screen comment 3(20) text-004 for field p_cust.

selection-screen end of line.

selection-screen begin of line.

parameters p_mode type c radiobutton group cust.

selection-screen comment 3(20) text-006 for field p_mode.

selection-screen end of line.

selection-screen begin of line.

parameters p_dens type c radiobutton group cust.

selection-screen comment 3(20) text-007 for field p_dens.

selection-screen end of line.

selection-screen: end of block b1.

selection-screen : begin of block b2 with frame title text-002.

parameters: p_dwnlod as checkbox,

p_file like rlgrap-filename. " default 'C:\zesdr001'.

selection-screen: end of block b2.

selection-screen: end of block b.

*******At Selection Screen********************************************

at selection-screen.

  • At Selection Screen on Value Request

at selection-screen on value-request for p_file.

perform f4_help.

  • Checking for the input values of selection screen.

perform screen_check.

              • Top Of Page***************************************************

top-of-page.

perform rep_headers.

*******Start of Selection*********************************************

start-of-selection.

  • Selecting data from the database tables

perform invoice_selection.

describe table itab_bill lines w_lin.

if w_lin = 0.

message i008. " No Data Found for the Given Selection Criteria

else.

  • Moving the data records into output internal table

perform bill_details.

  • When Customer Radio button is selected

if p_cust eq 'X'.

perform invoice_output_cust.

  • When Mode Radio button is selected

elseif p_mode eq 'X'.

perform invoice_output_mode.

  • When density Radio button is selected

elseif p_dens eq 'X'.

perform invoice_output_dens.

endif.

endif.

*******End of Selection***********************************************

end-of-selection.

perform init_fieldnames.

if p_dwnlod = 'X'.

perform read_data_for_dowlload.

  • perform down_load_to_file using p_file.

perform download_excel using p_file.

endif.

&----


*& Form screen_check

&----


  • Ckecking for Selection Screen fields Validation

----


form screen_check.

  • Validation of Sales Organization

clear tvko.

if not s_vkorg-low is initial.

select vkorg from tvko up to 1 rows

into tvko-vkorg

where vkorg in s_vkorg.

endselect.

if sy-subrc ne 0.

message e009. " Invalid Sales Organization

endif.

endif.

  • Validation of Distribution Channel

clear tvtw.

if not s_vtweg-low is initial.

select vtweg from tvtw up to 1 rows

into tvtw-vtweg

where vtweg in s_vtweg.

endselect.

if sy-subrc ne 0.

message e010. " Invalid Distribution Channel

endif.

endif.

  • Validation of Division

clear tspa.

if not s_spart-low is initial.

select spart from tspa up to 1 rows

into tspa-spart

where spart in s_spart.

endselect.

if sy-subrc ne 0.

message e011. " Invalid Division

endif.

endif.

  • Validation for company code

clear t001.

if not s_bukrs-low is initial.

select single bukrs from t001

into t001-bukrs

where bukrs in s_bukrs.

if sy-subrc <> 0.

message e007. " Enter valid Company Code

endif.

endif.

  • Validation of billing Document Type

clear tvfk.

if not s_fkart is initial.

select fkart from tvfk up to 1 rows

into tvfk-fkart

where fkart in s_fkart.

endselect.

if sy-subrc ne 0.

message e012. " Invalid Billing Document Type

endif.

endif.

  • Validation of Billing Document Number

clear vbuk.

if not s_vbeln is initial.

select vbeln from vbuk up to 1 rows

into vbuk-vbeln

where vbeln in s_vbeln and

vbtyp = 'M'.

endselect.

if sy-subrc ne 0.

message e013. " Invalid Billing Doc Number

endif.

endif.

  • Validation of Customer

clear kna1.

if not s_kunag is initial.

select kunnr from kna1 up to 1 rows

into kna1-kunnr

where kunnr in s_kunag.

endselect.

if sy-subrc ne 0.

message e014. " Invalid Customer Number

endif.

endif.

  • Validation of Plant

clear t001w.

if not s_werks is initial.

select werks from t001w up to 1 rows

into t001w-werks

where werks in s_werks.

endselect.

if sy-subrc ne 0.

message e004. " Invalid Plant Number

endif.

endif.

  • Validation for File path to download

if p_dwnlod = 'X'.

if p_file is initial.

message e006. " Enter the Valid file path to Download

endif.

endif.

endform. "screen_check

----


  • FORM invoice_selection *

----


  • Selecting data from the database tables

----


form invoice_selection.

select

a~vbeln " Billing Doc Number

a~fktyp " Billing Category

a~vbtyp " Sales Doc category

a~fkdat " Billing doc date

a~fkart " Billing doc type

a~bukrs " Company code

a~kurrf " Exchange rate

a~knumv " Condition record Number

a~waerk " Currency

a~kunag " Sold to Party

b~vrkme " Sales Unit

b~posnr " Item Number

b~charg " Batch Number

b~fkimg " Billed quantity

b~werks " Plant

b~matnr " Material Number

b~netwr " Net Value of Bill Doc

b~wavwr " Cost in Doc Currency

c~kdmat " Customer Material

into table itab_bill

from vbrk as a join vbrp as b

on bvbeln = avbeln

join vbap as c

on baubel = cvbeln and

baupos = cposnr

where a~vbeln in s_vbeln and

a~fkdat in s_fkdat and

a~bukrs in s_bukrs and

a~vtweg in s_vtweg and

a~vkorg in s_vkorg and

a~spart in s_spart and

a~fkart in s_fkart and

b~werks in s_werks and

a~kunag in s_kunag and

a~sfakn eq ' ' and

a~fksto eq ' ' .

endform .

----


  • FORM bill_details *

----


  • appending data into itab_out internal table

----


form bill_details.

sort itab_bill by vbeln.

select single waers from t001 into t001-waers

where bukrs in s_bukrs.

data:f_txt1(10),f_txt2(10),f_txt3(10).

loop at itab_bill.

itab_out-vbeln = itab_bill-vbeln.

itab_out-fktyp = itab_bill-fktyp.

itab_out-vbtyp = itab_bill-vbtyp.

itab_out-fkdat = itab_bill-fkdat.

itab_out-fkart = itab_bill-fkart.

itab_out-bukrs = itab_bill-bukrs.

itab_out-kurrf = itab_bill-kurrf.

itab_out-waerk = itab_bill-waerk.

itab_out-kunag = itab_bill-kunag.

itab_out-vrkme = itab_bill-vrkme.

itab_out-posnr = itab_bill-posnr.

itab_out-charg = itab_bill-charg.

itab_out-fkimg = itab_bill-fkimg.

itab_out-werks = itab_bill-werks.

itab_out-matnr = itab_bill-matnr.

itab_out-kdmat = itab_bill-kdmat.

select single currdec from tcurx into tcurx-currdec

where currkey eq itab_out-waerk.

if sy-subrc eq '0' .

if tcurx-currdec eq '0'.

itab_bill-netwr = itab_bill-netwr * 100.

itab_bill-wavwr = itab_bill-wavwr * 100.

endif.

endif.

itab_out-bil_amt = itab_bill-netwr.

clear : konv.

  • Pricing data from KONV table

select single kbetr kwert kpein from konv into

(konv-kbetr,konv-kwert,konv-kpein)

where knumv = itab_bill-knumv and

kposn = itab_bill-posnr and

kschl eq 'ZSP1' and

krech eq 'C' and

kinak eq ' '.

  • Currency conversion

select single currdec from tcurx into tcurx-currdec

where currkey eq itab_out-waerk.

if sy-subrc eq '0' .

if tcurx-currdec eq '0'.

konv-kbetr = konv-kbetr * 100.

endif.

endif.

  • Unit Price

itab_out-sel_prc = konv-kbetr.

  • Unit Price Calculation

if not konv-kpein is initial.

itab_out-sel_prc = itab_out-sel_prc / konv-kpein .

endif.

  • Call Function to get the Period for the given Billing date

  • and Company Code

perform get_period.

  • Selecting Material Valuation Data

clear:mbew.

if itab_out-fktyp eq 'L'.

select single

lfmon lfgja verpr stprs vmver vmstp

from mbew

into (mbew-lfmon,mbew-lfgja,mbew-verpr,

mbew-stprs,mbew-vmver,mbew-vmstp)

where matnr = itab_out-matnr

and bwkey = itab_out-werks.

if mbew-lfmon = w_period and mbew-lfgja = w_year.

select single currdec from tcurx into tcurx-currdec

where currkey eq t001-waers.

if sy-subrc eq '0' .

if tcurx-currdec eq '0'.

mbew-stprs = mbew-stprs * 100.

mbew-verpr = mbew-verpr * 100.

endif.

endif.

if itab_out-waerk eq t001-waers.

itab_out-mvg_prs = mbew-verpr ."/ itab_out-kurrf.

else.

itab_out-mvg_prs = mbew-verpr / itab_out-kurrf.

endif.

else.

clear:mbewh.

select single

lfmon lfgja verpr stprs

from mbewh

into (mbewh-lfmon,mbewh-lfgja,mbewh-verpr,

mbewh-stprs)

where matnr = itab_out-matnr

and bwkey = itab_out-werks

and lfmon = w_period

and lfgja = w_year.

select single currdec from tcurx into tcurx-currdec

where currkey eq t001-waers.

if sy-subrc eq '0' .

if tcurx-currdec eq '0'.

mbewh-verpr = mbewh-verpr * 100.

endif.

endif.

if itab_out-waerk eq t001-waers.

itab_out-mvg_prs = mbewh-verpr ."/ itab_out-kurrf.

else.

itab_out-mvg_prs = mbewh-verpr / itab_out-kurrf.

endif.

if itab_out-mvg_prs is initial.

select single

lfmon lfgja verpr stprs vmver vmstp

from mbew

into (mbew-lfmon,mbew-lfgja,mbew-verpr,

mbew-stprs,mbew-vmver,mbew-vmstp)

where matnr = itab_out-matnr

and bwkey = itab_out-werks.

select single currdec from tcurx

into tcurx-currdec

where currkey eq t001-waers.

if sy-subrc eq '0' .

if tcurx-currdec eq '0'.

mbew-verpr = mbew-verpr * 100.

endif.

endif.

if itab_out-waerk eq t001-waers.

itab_out-mvg_prs = mbew-verpr ."/ itab_out-kurrf.

else.

itab_out-mvg_prs = mbew-verpr / itab_out-kurrf.

endif.

endif.

endif.

endif.

  • To find Density and Mode from MARA and T179T tables

clear :mara,t179t.

select single prdha from mara

into mara-prdha

where matnr = itab_out-matnr.

select single vtext from t179t

into t179t-vtext

where spras = 'EN' and

prodh = mara-prdha(4).

split t179t-vtext at ' ' into f_txt1 f_txt2 f_txt3.

itab_out-mode = f_txt2.

itab_out-density = f_txt3.

if not itab_out-mvg_prs is initial.

if itab_out-fktyp eq 'L'.

itab_out-gp_mvp_amt = itab_out-bil_amt - itab_out-mvg_prs *

itab_out-fkimg.

else.

itab_out-gp_mvp_amt = '0'.

endif.

endif.

if not itab_out-mvg_prs is initial

and not itab_out-sel_prc is initial.

itab_out-gp_mvp_pr = ( itab_out-sel_prc - itab_out-mvg_prs )

/ itab_out-sel_prc * 100.

endif.

append itab_out.

clear itab_out.

endloop.

loop at itab_out.

if itab_out-vbtyp eq 'N' or itab_out-vbtyp eq 'O'.

itab_out-fkimg = itab_out-fkimg * -1.

itab_out-sel_prc = itab_out-sel_prc * -1.

itab_out-bil_amt = itab_out-bil_amt * -1.

itab_out-mvg_prs = itab_out-mvg_prs * -1.

itab_out-gp_mvp_amt = itab_out-gp_mvp_amt * -1.

itab_out-gp_mvp_pr = itab_out-gp_mvp_pr * -1.

  • If the bill amount is 0 then the quantity should also be 0.

if itab_out-bil_amt = 0.

itab_out-fkimg = 0.

endif.

  • Check if the Bill amount is Credit memo amount, then the gross profit

  • should also be the same bill amount irrespecitve of +ve or -ve.

if itab_out-gp_mvp_amt = 0.

move: itab_out-bil_amt to itab_out-gp_mvp_amt.

endif.

modify itab_out.

clear itab_out.

endif.

endloop.

endform.

&----


*& Form get_period

&----


  • Getting Document Period

----


form get_period.

clear :w_period,w_year,w_date.

concatenate itab_out-fkdat(4)

itab_out-fkdat+4(2)

itab_out-fkdat+6(2)

into w_date.

call function 'BAPI_COMPANYCODE_GET_PERIOD'

exporting

companycodeid = itab_out-bukrs

posting_date = w_date

importing

fiscal_year = w_year

fiscal_period = w_period.

endform. " get_period

&----


*& Form invoice_output_cust

&----


  • Report Output when customer is selected

----


form invoice_output_cust.

write at /1(214) sy-uline.

sort itab_out by kunag vbeln fkart posnr fkdat.

loop at itab_out.

if f_flg = 'X'.

format color col_normal intensified off.

f_flg = ' '.

else.

format color col_normal intensified on.

f_flg = 'X'.

endif.

at new kunag.

read table itab_out index sy-tabix.

endat.

write: /01 sy-vline, 2(10) itab_out-kunag,

12 sy-vline, 13(10) itab_out-vbeln,

23 sy-vline, 24(6) itab_out-posnr,

30 sy-vline, 31(10) itab_out-fkdat,

41 sy-vline, 42(6) itab_out-mode,

48 sy-vline, 49(7) itab_out-density,

56 sy-vline, 57(18) itab_out-matnr,

75 sy-vline, 76(10) itab_out-charg,

86 sy-vline,

87(13) itab_out-fkimg unit itab_out-vrkme no-sign,

102(3) itab_out-vrkme,

105 sy-vline,

106(14) itab_out-sel_prc currency konv-waers no-sign,

120 sy-vline,

121(15) itab_out-bil_amt currency vbrk-waerk no-sign,

138(3) itab_out-waerk,

141 sy-vline,

142(15) itab_out-mvg_prs currency vbrk-waerk no-sign,

157 sy-vline,

158(15) itab_out-gp_mvp_amt currency vbrk-waerk no-sign,

173 sy-vline,174(6) itab_out-gp_mvp_pr no-sign ,

180 sy-vline,181(33) itab_out-kdmat,

214 sy-vline.

t_fkimg = t_fkimg + itab_out-fkimg.

t_bil_amt = t_bil_amt + itab_out-bil_amt.

t_gp_mvp_amt = t_gp_mvp_amt + itab_out-gp_mvp_amt.

t_gr_fkimg = t_gr_fkimg + itab_out-fkimg.

t_gr_bil_amt = t_gr_bil_amt + itab_out-bil_amt.

t_gr_gp_mvp_amt = t_gr_gp_mvp_amt + itab_out-gp_mvp_amt.

at end of kunag.

format reset.

format color col_total intensified off.

write:/1(214) sy-uline.

write:/01 sy-vline,

02 'Sub Total of Customer:'(035), itab_out-kunag,

87(13) t_fkimg unit itab_out-vrkme no-sign,

121(15) t_bil_amt no-sign,

158(15) t_gp_mvp_amt no-sign,

214 ' ',

/1(214) sy-uline.

clear: t_fkimg, t_bil_amt, t_gp_mvp_amt.

endat.

at last.

write:/01 sy-vline,

02 'Grand Total :'(032),

87(13) t_gr_fkimg unit itab_out-vrkme no-sign,

121(15) t_gr_bil_amt no-sign,

158(15) t_gr_gp_mvp_amt no-sign,

214 ' '.

endat.

format color off.

endloop.

write at /1(214) sy-uline.

endform. "invoice_output_cust

&----


*& Form invoice_output_mode

&----


  • Report Output

----


form invoice_output_mode.

loop at itab_out.

move-corresponding itab_out to itab_out2.

append itab_out2.

clear: itab_out2.

endloop.

write at /1(214) sy-uline.

sort itab_out2 by mode vbeln posnr fkdat.

loop at itab_out2.

if f_flg = 'X'.

format color col_normal intensified off.

f_flg = ' '.

else.

format color col_normal intensified on.

f_flg = 'X'.

endif.

at new mode.

read table itab_out2 index sy-tabix.

endat.

write: /01 sy-vline, 2(10) itab_out2-kunag,

12 sy-vline, 13(10) itab_out2-vbeln,

23 sy-vline, 24(6) itab_out2-posnr,

30 sy-vline, 31(10) itab_out2-fkdat,

41 sy-vline, 42(6) itab_out2-mode,

48 sy-vline, 49(7) itab_out2-density,

56 sy-vline, 57(18) itab_out2-matnr,

75 sy-vline, 76(10) itab_out2-charg,

86 sy-vline,

87(13) itab_out2-fkimg unit itab_out2-vrkme no-sign,

102(3) itab_out2-vrkme,

105 sy-vline,

106(14) itab_out2-sel_prc currency vbrk-waerk no-sign,

120 sy-vline,

121(15) itab_out2-bil_amt currency vbrk-waerk no-sign,

138(3) itab_out2-waerk,

141 sy-vline,

142(15) itab_out2-mvg_prs currency vbrk-waerk no-sign,

157 sy-vline,

158(15) itab_out2-gp_mvp_amt currency vbrk-waerk no-sign,

173 sy-vline,174(6) itab_out2-gp_mvp_pr no-sign,

180 sy-vline,181(33) itab_out2-kdmat,

214 sy-vline.

t_fkimg = t_fkimg + itab_out2-fkimg.

t_bil_amt = t_bil_amt + itab_out2-bil_amt.

t_gp_mvp_amt = t_gp_mvp_amt + itab_out2-gp_mvp_amt.

t_gr_fkimg = t_gr_fkimg + itab_out2-fkimg.

t_gr_bil_amt = t_gr_bil_amt + itab_out2-bil_amt.

t_gr_gp_mvp_amt = t_gr_gp_mvp_amt + itab_out2-gp_mvp_amt.

at end of mode.

format reset.

format color col_total intensified off.

write:/1(214) sy-uline.

write:/01 sy-vline,

02 'Sub Total of Mode :'(033), itab_out2-mode,

87(13) t_fkimg unit itab_out-vrkme no-sign,

121(15) t_bil_amt no-sign,

158(15) t_gp_mvp_amt no-sign,

214 ' ',

/1(214) sy-uline.

clear: t_fkimg, t_bil_amt, t_gp_mvp_amt.

endat.

at last.

write:/01 sy-vline,

02 'Grand Total :'(032),

87(13) t_gr_fkimg unit itab_out-vrkme no-sign,

121(15) t_gr_bil_amt no-sign,

158(15) t_gr_gp_mvp_amt no-sign,

214 ' '.

endat.

format color off.

endloop.

write at /1(214) sy-uline.

endform. "invoice_output_mode

&----


*& Form invoice_output_dens

&----


  • Report Output

----


form invoice_output_dens.

loop at itab_out.

move-corresponding itab_out to itab_out3.

append itab_out3.

clear: itab_out3.

endloop.

write at /1(214) sy-uline.

sort itab_out3 by mode density vbeln posnr fkdat.

loop at itab_out3.

if f_flg = 'X'.

format color col_normal intensified off.

f_flg = ' '.

else.

format color col_normal intensified on.

f_flg = 'X'.

endif.

at new mode.

endat.

at new density.

read table itab_out3 index sy-tabix.

endat.

write: /01 sy-vline, 2(10) itab_out3-kunag,

12 sy-vline, 13(10) itab_out3-vbeln,

23 sy-vline, 24(6) itab_out3-posnr,

30 sy-vline, 31(10) itab_out3-fkdat,

41 sy-vline, 42(6) itab_out3-mode,

48 sy-vline, 49(7) itab_out3-density,

56 sy-vline, 57(18) itab_out3-matnr,

75 sy-vline, 76(10) itab_out3-charg,

86 sy-vline,

87(13) itab_out3-fkimg unit itab_out3-vrkme no-sign,

102(3) itab_out3-vrkme,

105 sy-vline,106(14) itab_out3-sel_prc no-sign,

120 sy-vline,

121(15) itab_out3-bil_amt currency vbrk-waerk no-sign,

138(3) itab_out3-waerk,

141 sy-vline,142(15) itab_out3-mvg_prs no-sign

currency vbrk-waerk,

157 sy-vline,158(15) itab_out3-gp_mvp_amt no-sign

currency vbrk-waerk,

173 sy-vline,174(6) itab_out3-gp_mvp_pr no-sign,

180 sy-vline,181(33) itab_out3-kdmat,

214 sy-vline.

t_efkimg = t_efkimg + itab_out3-fkimg.

t_ebil_amt = t_ebil_amt + itab_out3-bil_amt.

t_egp_mvp_amt = t_egp_mvp_amt + itab_out3-gp_mvp_amt.

t_fkimg = t_fkimg + itab_out3-fkimg.

t_bil_amt = t_bil_amt + itab_out3-bil_amt.

t_gp_mvp_amt = t_gp_mvp_amt + itab_out3-gp_mvp_amt.

t_gr_fkimg = t_gr_fkimg + itab_out3-fkimg.

t_gr_bil_amt = t_gr_bil_amt + itab_out3-bil_amt.

t_gr_gp_mvp_amt = t_gr_gp_mvp_amt + itab_out3-gp_mvp_amt.

at end of density.

format reset.

format color col_total intensified off.

write:/1(214) sy-uline.

write:/01 sy-vline,

02 'Sub Total of Density :'(034), itab_out3-density,

87(13) t_efkimg unit itab_out-vrkme no-sign,

121(15) t_ebil_amt currency vbrk-waerk no-sign,

158(15) t_egp_mvp_amt currency vbrk-waerk no-sign,

214 ' ',

/1(214) sy-uline.

clear: t_efkimg, t_ebil_amt,t_egp_mvp_amt.

endat.

at end of mode.

format reset.

format color col_total intensified off.

write:/01 sy-vline,

02 'Sub Total of Mode :'(033), itab_out3-mode,

87(13) t_fkimg unit itab_out-vrkme no-sign,

121(15) t_bil_amt no-sign,

158(15) t_gp_mvp_amt no-sign,

214 ' ',

/1(214) sy-uline.

clear: t_fkimg, t_bil_amt, t_gp_mvp_amt.

endat.

at last.

write:/01 sy-vline,

02 'Grand Total :'(032),

87(13) t_gr_fkimg unit itab_out-vrkme no-sign,

121(15) t_gr_bil_amt no-sign,

158(15) t_gr_gp_mvp_amt no-sign,

214 ' '.

endat.

format color off.

endloop.

write at /1(214) sy-uline.

endform. "invoice_output_dens

&----


*& Form f4_help

&----


  • To Get F4 Help to Select File Name

----


form f4_help.

call function 'F4_FILENAME'

exporting

program_name = sy-cprog

dynpro_number = syst-dynnr

field_name = 'P_FILE'

importing

file_name = p_file.

endform. " f4_help

&----


*& Form rep_headers

&----


  • Report Header

----


form rep_headers.

format color col_heading on.

format color col_heading on.

select single butxt from t001 into t001-butxt

where bukrs = s_bukrs-low.

skip 2.

write: /2 t001-butxt, 92 'BILLING ANALYSIS'(003),

190 'Date :'(010),sy-datum.

write :/2 'Company Code :'(011), s_bukrs-low ,

85 'Billing Date :'(012) , s_fkdat-low , '-' ,s_fkdat-high ,

190 'Page :'(013), sy-pagno,

214 ' '.

write at /1(214) sy-uline.

write: /1 sy-vline, 2(10) 'Customer'(004) centered,

12 sy-vline, 13(10) 'Billing'(009) centered,

23 sy-vline, 24(6) 'Billing'(009) centered,

30 sy-vline, 31(10) 'Billing'(009) centered,

41 sy-vline, 42(6) 'Mode'(006) centered,

48 sy-vline, 49(7) 'Density'(014) centered,

56 sy-vline, 57(18) 'Material'(015) centered,

75 sy-vline, 76(10) 'Batch'(016) centered,

86 sy-vline, 87(13) 'Quantity'(017) centered,102(3) 'UOM'(027),

105 sy-vline, 106(14) 'Selling'(018) centered ,

120 sy-vline, 121(15) 'Billing'(009) centered,

138(3) 'Cur'(028),

141 sy-vline, 142(15) 'Mvg.Avg.Price'(020) centered,

157 sy-vline, 158(22) 'Gross Profit(MVP)'(022) centered,

180 sy-vline, 181(33) 'Customer Material'(023) centered,

214 sy-vline.

write: /1 sy-vline, 2(10) 'Code'(024) centered,

12 sy-vline, 13(10) 'Document'(025) centered,

23 sy-vline, 24(6) 'Item'(026) centered,

30 sy-vline, 31(10) 'Date'(036) centered,

41 sy-vline,

48 sy-vline,

56 sy-vline,

75 sy-vline,

86 sy-vline,

105 sy-vline, 106(14) 'Price'(030) centered ,

120 sy-vline, 121(15) 'Amount'(031) centered,

141 sy-vline, 142(15) '(per Unit)'(019) centered,

157 sy-vline, 158(15) 'Amount'(031) centered,

173 sy-vline, 174(6) ' % '(029) centered,

180 sy-vline,

214 sy-vline.

format color off.

endform. " rep_headers

&----


*& Form init_fieldnames

&----


  • Initialise all the fields to download in Excel Data File

----


form init_fieldnames.

perform append_fieldname using text-004 'itab_out1'

'KUNAG' 'X'.

perform append_fieldname using text-037 'itab_out1'

'VBELN' 'X'.

perform append_fieldname using text-036 'itab_out1'

'FKDAT' 'X'.

perform append_fieldname using text-038 'itab_out1'

'POSNR' 'X'.

perform append_fieldname using text-006 'itab_out1'

'MODE' 'X'.

perform append_fieldname using text-014 'itab_out1'

'DENSITY' 'X'.

perform append_fieldname using text-015 'itab_out1'

'MATNR' 'X'.

perform append_fieldname using text-016 'itab_out1'

'CHARG' 'X'.

perform append_fieldname using text-017 'itab_out1'

'FKIMG' 'X'.

perform append_fieldname using text-039 'itab_out1'

'VRKME' 'X'.

perform append_fieldname using text-040 'itab_out1'

'SEL_PRC' 'X'.

perform append_fieldname using text-041 'itab_out1'

'BIL_AMT' 'X'.

perform append_fieldname using text-028 'itab_out1'

'WAERK' 'X'.

perform append_fieldname using text-020 'itab_out1'

'MVG_PRS' 'X'.

perform append_fieldname using text-044 'itab_out1'

'GP_MVP_AMT' 'X'.

perform append_fieldname using text-045 'itab_out1'

'GP_MVP_PR' 'X'.

perform append_fieldname using text-023 'itab_out1'

'KDMAT' 'X'.

endform.

&----


*& Form append_fieldname

&----


  • Appending field Names

----


form append_fieldname using p_title p_table p_field p_type.

clear: fieldnames.

fieldnames-title = p_title.

fieldnames-table = p_table.

fieldnames-field = p_field.

fieldnames-type = p_type.

append fieldnames.

endform.

&----


*& Form download_excel

&----


  • Getting Data to Download to File

----


form download_excel using f_file.

call function 'EXCEL_OLE_STANDARD_DAT'

exporting

file_name = f_file

tables

data_tab = itab_out1

fieldnames = fieldnames

exceptions

file_not_exist = 1

filename_expected = 2

communication_error = 3

ole_object_method_error = 4

ole_object_property_error = 5

invalid_filename = 6

invalid_pivot_fields = 7

download_problem = 8

others = 9.

if sy-subrc = 0.

message s005(zv) with p_file. "Download to & Successfully Completed

endif.

endform.

&----


*& Form read_data_for_download

&----


  • Getting Data to Download to File

----


form read_data_for_dowlload.

sort itab_out by vbeln posnr fkdat.

loop at itab_out.

move-corresponding itab_out to itab_out1.

append itab_out1.

clear itab_out1.

endloop.

endform. " read_data_for_dowlload

<b>Reward points for useful Answers</b>

Regards

Anji

Former Member
0 Kudos

Hi,

Are talking about using in a SAPscript? If so, I think that you would pass it via CHANGING. You would use a table type here

You cannot get an internal table or a string. But you can get a number of individual fields

/: PERFORM <form> IN PROGRAM <prog>

/: USING &INVAR1&

/: CHANGING &OUTVAR1&

/: CHANGING &OUTVAR2&

/: CHANGING &OUTVAR2&

/: CHANGING &OUTVAR3&

/: CHANGING &OUTVAR4&

......

/: ENDPERFORM

Reward points

Regards