cancel
Showing results for 
Search instead for 
Did you mean: 

Subroutine Pool Program

Former Member
0 Kudos

i am doing the SAP Script for US Check, i am copying the standard program RFFOUS_C to Z program and standard form F110_PRENUM_CHCK to Z form. To populate new data into the form , i am creating a subroutine pool program and i am writing the logic inside that, but i am not getting the output,

So if any body have the answers, u can replay to this in SDN

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi ,

Go through this ,This is subroutine pool for check printing

PROGRAM zfir_check_printing.

TYPES : typ_tab TYPE STANDARD TABLE OF itcsy.

&----


*& Form get_vend_name

&----


FORM get_amount TABLES intab TYPE typ_tab

outab TYPE typ_tab. "#EC CALLED

  • BREAK-POINT.

****************Type Declaration**************

TYPES : BEGIN OF typ_bsak,

lifnr TYPE lifnr,

augbl TYPE augbl,

gjahr TYPE gjahr,

belnr TYPE belnr_d,

buzei TYPE buzei,

blart TYPE blart,

dmbtr TYPE dmbtr,

hkont TYPE hkont,

qbshb TYPE qbshb,

END OF typ_bsak.

TYPES : BEGIN OF typ_bsis_ld,

lifnr TYPE lifnr,

gjahr TYPE gjahr,

belnr TYPE belnr_d,

dmbtr TYPE dmbtr,

END OF typ_bsis_ld.

TYPES : BEGIN OF typ_bsis_oth,

hkont TYPE hkont,

gjahr TYPE gjahr,

belnr TYPE belnr_d,

dmbtr TYPE dmbtr,

END OF typ_bsis_oth.

****************Internal Declaration**************

DATA : gt_bsis_ld TYPE STANDARD TABLE OF typ_bsis_ld.

DATA : gt_bsak_tds TYPE STANDARD TABLE OF typ_bsak.

DATA : gt_bsis_oth TYPE STANDARD TABLE OF typ_bsis_oth.

****************Structure Declaration**************

DATA : gw_bsis_ld TYPE typ_bsis_ld.

DATA : gw_bsak_tds TYPE typ_bsak.

DATA : gw_bsis_oth TYPE typ_bsis_oth.

****************STATICS Declaration**************

STATICS : lv_srno(3) TYPE n,

lv_ld_et1 TYPE dmbtr, "LD

lv_tds_et1 TYPE dmbtr, "TDS

lv_others_et1 TYPE dmbtr, "OTHERS

lv_bamt_et1 TYPE dmbtr, "BILL AMOUNt

lv_npay_et1 TYPE dmbtr. "net payable

****************Variable Declaration**************

DATA : lw_outab TYPE itcsy,

lw_intab TYPE itcsy.

DATA : lv_ccode_i(3) TYPE c, "Country Code

lv_dmbtr_i TYPE dmbtr, "ITEM WISE AMOUNT

lv_vblnr_i TYPE vblnr,

lv_gjahr_i TYPE gjahr,

lv_belnr_i TYPE belnr_d,

lv_lifnr_i TYPE lifnr,

lv_region_i(3) TYPE c, "State code

lv_waers_i TYPE waers, "Currency.

  • lv_rbetr_i TYPE rbetr, "Ceck about

lv_rbetr_i LIKE konv-kawrt,

lv_rbetr_is(21) TYPE c, "CHECK AMOUNT for star

lv_umskz_i TYPE c, "Special G/L Indicator

lv_qbshh_i TYPE QBSHH, "Withholding Tax Amount (in Local Currency)

*

lv_bukrs_i TYPE bukrs.

*

DATA : lv_ld_e(16) TYPE c, "LD

lv_tds_e(16) TYPE c, "TDS

lv_others_e(16) TYPE c, "OTHERS

lv_rmark_e(27) TYPE c, "remark

lv_bamt_e(16) TYPE c, "BILL AMOUNt

lv_pan_e TYPE j_1ipanno, "pan no

lv_cntry_e TYPE landx, "Country

lv_state_e TYPE bezei20, "State.

lv_rbetr_e(25) TYPE c, "CHECK AMOUNT

lv_uname_e TYPE usnam,

lv_ld_et(16) TYPE c, "LD

lv_tds_et(16) TYPE c, "TDS

lv_others_et(16) TYPE c, "OTHERS

lv_bamt_et(16) TYPE c, "BILL AMOUNt

lv_npay_et(16) TYPE c, "net payable total

lv_npay_e(16) TYPE c. "net payable

DATA : lv_ld_p TYPE dmbtr, "LD amount

lv_tds_p TYPE qbshb, "TDS amount

lv_others_p TYPE dmbtr, "OTHERS amount

lv_bamt_p TYPE dmbtr, "aMOUNT

lv_rbetr_p TYPE rbetr. "CHECK AMOUNT

DATA : r_hkont TYPE RANGE OF bsak-hkont,

rw_hkont LIKE LINE OF r_hkont.

rw_hkont-sign = 'I'.

rw_hkont-option = 'BT'.

rw_hkont-low = '0002210100'.

rw_hkont-high = '0002210800'.

APPEND rw_hkont TO r_hkont.

CLEAR: rw_hkont.

  • rw_hkont-sign = 'I'.

  • rw_hkont-option = 'NE'.

  • rw_hkont-low = '2001100'.

  • APPEND rw_hkont TO r_hkont.

  • CLEAR: rw_hkont.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUH-VBLNR'.

IF sy-subrc = 0.

MOVE lw_intab-value TO lv_vblnr_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUP-GJAHR'.

IF sy-subrc = 0.

MOVE lw_intab-value TO lv_gjahr_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUP-BELNR'.

IF sy-subrc = 0.

MOVE lw_intab-value TO lv_belnr_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUH-LAND1'.

IF sy-subrc = 0.

MOVE lw_intab-value TO lv_ccode_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUH-ZREGI'.

IF sy-subrc = 0.

MOVE lw_intab-value TO lv_region_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUD-DMBTR'.

IF sy-subrc = 0.

TRANSLATE lw_intab-value USING ', '.

CONDENSE lw_intab-value NO-GAPS.

MOVE lw_intab-value TO lv_dmbtr_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUH-LIFNR'.

IF sy-subrc = 0.

MOVE lw_intab-value TO lv_lifnr_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUH-RBETR'.

IF sy-subrc = 0.

MOVE lw_intab-value TO lv_rbetr_is.

TRANSLATE lw_intab-value USING ', '.

CONDENSE lw_intab-value NO-GAPS.

MOVE lw_intab-value TO lv_rbetr_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUH-WAERS'.

IF sy-subrc = 0.

MOVE lw_intab-value TO lv_waers_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUP-BUKRS'.

IF sy-subrc = 0.

MOVE lw_intab-value TO lv_bukrs_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUP-UMSKZ'.

IF sy-subrc = 0.

MOVE lw_intab-value TO lv_umskz_i.

ENDIF.

CLEAR : lw_intab.

READ TABLE intab INTO lw_intab WITH KEY name = 'REGUP-QBSHH'.

IF sy-subrc = 0.

TRANSLATE lw_intab-value USING ', '.

CONDENSE lw_intab-value NO-GAPS.

MOVE lw_intab-value TO lv_qbshh_i.

ENDIF.

CLEAR : lw_intab.

*********Get State Name*************

SELECT SINGLE bezei

FROM t005u

INTO lv_state_e

WHERE spras = sy-langu AND

land1 = lv_ccode_i AND

bland = lv_region_i.

********end*************************

********Get Country Name************

SELECT SINGLE landx

FROM t005t

INTO lv_cntry_e

WHERE spras = sy-langu AND

land1 = lv_ccode_i.

***********end**********************

*************Get LD Amount**********

CLEAR : lv_ld_p, lv_ld_e.

SELECT hkont gjahr belnr dmbtr

FROM bsis

INTO CORRESPONDING FIELDS OF TABLE gt_bsis_ld

  • FOR ALL ENTRIES IN gt_bsak_ld

WHERE hkont = '0002001200' AND

gjahr = lv_gjahr_i AND

belnr = lv_belnr_i AND

bschl = '50' .

LOOP AT gt_bsis_ld INTO gw_bsis_ld.

lv_ld_p = lv_ld_p + gw_bsis_ld-dmbtr.

ENDLOOP.

lv_ld_e = lv_ld_p.

lv_ld_et1 = lv_ld_et1 + lv_ld_p.

lv_ld_et = lv_ld_et1.

****************End*******************

*************Get TDS Amount***********

  • SELECT LIFNR AUGBL GJAHR BELNR BLART

  • DMBTR HKONT QBSHB

  • FROM BSAK

  • INTO CORRESPONDING FIELDS OF TABLE GT_BSAK_TDS

  • WHERE AUGBL = LV_VBLNR_I AND

  • GJAHR = LV_GJAHR_I AND

  • BELNR = LV_BELNR_I AND

  • BSCHL = '31'.

SELECT hkont gjahr belnr dmbtr

FROM bsis

INTO CORRESPONDING FIELDS OF TABLE gt_bsak_tds

WHERE gjahr = lv_gjahr_i AND

belnr = lv_belnr_i AND

bschl = '50' AND

hkont IN r_hkont .

LOOP AT gt_bsak_tds INTO gw_bsak_tds.

lv_tds_p = lv_tds_p + gw_bsak_tds-dmbtr. "QBSHB

CLEAR gw_bsak_tds.

ENDLOOP.

CLEAR : lv_tds_e.

lv_tds_e = lv_tds_p.

*

lv_tds_et1 = lv_tds_et1 + lv_tds_p.

lv_tds_et = lv_tds_et1.

*

*************End*********************

**********Get Other Amount**********

CLEAR : lv_others_p, lv_others_e.

SELECT hkont gjahr belnr dmbtr

FROM bsis

INTO CORRESPONDING FIELDS OF TABLE gt_bsis_oth

WHERE

gjahr = lv_gjahr_i AND

belnr = lv_belnr_i AND

bschl = '50' AND

hkont <> '0002001200' AND

hkont <> '0004401370' AND

hkont NOT BETWEEN '0002210100' AND '0002210800' AND

hkont not between '0004000100' AND '0004007100'.

LOOP AT gt_bsis_oth INTO gw_bsis_oth.

lv_others_p = lv_others_p + gw_bsis_oth-dmbtr.

ENDLOOP.

lv_others_e = lv_others_p.

*

lv_others_et1 = lv_others_et1 + lv_others_p.

lv_others_et = lv_others_et1.

*

*************End********************

********Get LINE NO*****************

IF lv_vblnr_i <> lv_belnr_i.

lv_srno = lv_srno + 1.

ENDIF.

*****END***************************

*********Get Remarks***************

DATA : lv_blart_p TYPE blart.

SELECT SINGLE blart lifnr "#EC *

FROM bsak INTO (lv_blart_p, lv_lifnr_i)

WHERE augbl = lv_vblnr_i AND

gjahr = lv_gjahr_i AND

belnr = lv_belnr_i.

CLEAR : lv_rmark_e.

IF lv_blart_p = 'RE'.

lv_rmark_e = 'Bill Amount after Retention'. "#EC NOTEXT

*Begin of Delete by IBMABAP on 8th DEC DI1K901696

  • ELSEIF lv_blart_p = 'KR'.

  • lv_rmark_e = 'Bill Amount after Retention'. "#EC NOTEXT

*End of Delete by IBMABAP on 8th DEC DI1K901696

ELSEIF lv_blart_p = 'KA'.

lv_rmark_e = 'Advance Payment'. "#EC NOTEXT

ENDIF.

************End***********************

*******Get PAN************************

SELECT SINGLE j_1ipanno FROM j_1imovend

INTO lv_pan_e

WHERE lifnr = lv_lifnr_i.

********end ****************************

*************Get Bill Amount*********

IF lv_blart_p = 'RE' or lv_blart_p = 'KR'.

lv_bamt_p = lv_ld_p + lv_tds_p + lv_others_p + lv_dmbtr_i.

CLEAR : lv_bamt_e.

lv_bamt_e = lv_bamt_p.

lv_bamt_et1 = lv_bamt_et1 + lv_bamt_p.

lv_bamt_et = lv_bamt_et1.

endif.

****************End*******************

**********Get Vendor Address**********

DATA : lv_adrnr_p TYPE adrnr,

lv_add_e TYPE ad_strspp1.

DATA : gs_lfa1 TYPE lfa1.

CLEAR : lv_adrnr_p, lv_add_e.

UNPACK lv_lifnr_i TO lv_lifnr_i.

SELECT SINGLE *

FROM lfa1

INTO gs_lfa1

WHERE lifnr = lv_lifnr_i.

SELECT SINGLE str_suppl1 "#EC *

INTO lv_add_e

FROM adrc

WHERE addrnumber = gs_lfa1-adrnr.

***************End********************

************GeT Check amount with '' **

SHIFT lv_rbetr_is LEFT BY 1 PLACES.

CONDENSE lv_rbetr_is NO-GAPS.

CONCATENATE '**' lv_rbetr_is '' INTO lv_rbetr_is.

************End************************

*************GeT Check amount in word **

DATA : ls_spell TYPE spell.

CLEAR : ls_spell.

DATA : lv_amt_txt LIKE rslinlmsg-message.

DATA : lv_amt_in_word LIKE rslinlmsg-message.

*

DATA : lv_amt1(80) TYPE c,

lv_amt2(80) TYPE c,

lv_amt3(80) TYPE c.

*

CALL FUNCTION 'ZSPELL_AMOUNT'

EXPORTING

amount = lv_rbetr_i

IMPORTING

amount_in_words = lv_amt_in_word.

IF sy-subrc = 0. "#EC *

SHIFT lv_amt_in_word BY 7 PLACES LEFT.

CONCATENATE '**' lv_amt_in_word '**' INTO lv_amt_txt SEPARATED BY space.

*

lv_amt1 = lv_amt_txt+0(80).

lv_amt2 = lv_amt_txt+80(80).

lv_amt3 = lv_amt_txt+160(80).

ENDIF.

************End************************

*************GeT User Name *********** **

*

CLEAR : lv_uname_e.

SELECT SINGLE usnam

FROM bkpf INTO lv_uname_e

WHERE bukrs = lv_bukrs_i AND

belnr = lv_vblnr_i AND

gjahr = lv_gjahr_i.

*

************End************************

***********Get Net payable*************

IF lv_umskz_i = 'A'.

lv_dmbtr_i = lv_dmbtr_i - lv_qbshh_i.

ENDIF.

lv_npay_e = lv_dmbtr_i.

lv_npay_et1 = lv_npay_et1 + lv_dmbtr_i.

lv_npay_et = lv_npay_et1.

****************End*********************

READ TABLE outab INTO lw_outab INDEX 1.

IF sy-subrc = 0.

lw_outab-value = lv_ld_e.

MODIFY outab FROM lw_outab INDEX 1 .

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 2.

IF sy-subrc = 0.

lw_outab-value = lv_tds_e.

MODIFY outab FROM lw_outab INDEX 2 .

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 3.

IF sy-subrc = 0.

lw_outab-value = lv_others_e.

MODIFY outab FROM lw_outab INDEX 3 .

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 4.

IF sy-subrc = 0.

lw_outab-value = lv_srno.

MODIFY outab FROM lw_outab INDEX 4 .

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 5.

IF sy-subrc = 0.

lw_outab-value = lv_rmark_e.

MODIFY outab FROM lw_outab INDEX 5 .

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 6.

IF sy-subrc = 0.

lw_outab-value = lv_pan_e.

MODIFY outab FROM lw_outab INDEX 6 .

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 7.

IF sy-subrc = 0.

lw_outab-value = lv_cntry_e.

MODIFY outab FROM lw_outab INDEX 7 .

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 8.

IF sy-subrc = 0.

lw_outab-value = lv_state_e.

MODIFY outab FROM lw_outab INDEX 8 .

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 9.

IF sy-subrc = 0.

lw_outab-value = lv_bamt_e.

MODIFY outab FROM lw_outab INDEX 9.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 10.

IF sy-subrc = 0.

lw_outab-value = lv_add_e.

MODIFY outab FROM lw_outab INDEX 10.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 11.

IF sy-subrc = 0.

lw_outab-value = lv_rbetr_is.

MODIFY outab FROM lw_outab INDEX 11.

CLEAR : lw_outab.

ENDIF.

  • READ TABLE outab INTO lw_outab INDEX 12.

  • IF sy-subrc = 0.

  • lw_outab-value = lv_amt_txt.

  • MODIFY outab FROM lw_outab INDEX 12.

  • CLEAR : lw_outab.

  • ENDIF.

READ TABLE outab INTO lw_outab INDEX 12.

IF sy-subrc = 0.

lw_outab-value = lv_amt1.

MODIFY outab FROM lw_outab INDEX 12.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 13.

IF sy-subrc = 0.

lw_outab-value = lv_amt2.

MODIFY outab FROM lw_outab INDEX 13.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 14.

IF sy-subrc = 0.

lw_outab-value = lv_amt3.

MODIFY outab FROM lw_outab INDEX 14.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 15.

IF sy-subrc = 0.

lw_outab-value = lv_uname_e.

MODIFY outab FROM lw_outab INDEX 15.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 16.

IF sy-subrc = 0.

lw_outab-value = lv_ld_et.

MODIFY outab FROM lw_outab INDEX 16.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 17.

IF sy-subrc = 0.

lw_outab-value = lv_tds_et.

MODIFY outab FROM lw_outab INDEX 17.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 18.

IF sy-subrc = 0.

lw_outab-value = lv_others_et.

MODIFY outab FROM lw_outab INDEX 18.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 19.

IF sy-subrc = 0.

lw_outab-value = lv_bamt_et.

MODIFY outab FROM lw_outab INDEX 19.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 20.

IF sy-subrc = 0.

lw_outab-value = lv_npay_e.

MODIFY outab FROM lw_outab INDEX 20.

CLEAR : lw_outab.

ENDIF.

READ TABLE outab INTO lw_outab INDEX 21.

IF sy-subrc = 0.

lw_outab-value = lv_npay_et.

MODIFY outab FROM lw_outab INDEX 21.

CLEAR : lw_outab.

ENDIF.

ENDFORM. "GET_AMOUNT

Thanks

Ankur Sharma

Edited by: Ankur Sharma on Jun 28, 2008 6:49 AM

Answers (4)

Answers (4)

Former Member
0 Kudos

Hi,

In the SAPSCRIPTS library if you see the control commands you will find command to call a subroutine...

/: PERFORM.....

/: ENDPERFORM

the sample way is as follows...

Definition in the SAPscript form:

/: PERFORM GET_BARCODE IN PROGRAM QCJPERFO
/: USING &PAGE&
/: USING &NEXTPAGE&
/: CHANGING &BARCODE&
/: ENDPERFORM
/

/ &BARCODE&

 

Coding of the calling ABAP program:

REPORT QCJPERFO.

 

FORM GET_BARCODE TABLES IN_PAR STUCTURE ITCSY
OUT_PAR STRUCTURE ITCSY.

DATA: PAGNUM LIKE SY-TABIX, "page number 
NEXTPAGE LIKE SY-TABIX. "number of next page

READ TABLE IN_PAR WITH KEY u2018PAGEu2019.
CHECK SY-SUBRC = 0.
PAGNUM = IN_PAR-VALUE.

READ TABLE IN_PAR WITH KEY u2018NEXTPAGEu2019.
CHECK SY-SUBRC = 0.
NEXTPAGE = IN_PAR-VALUE.

READ TABLE OUT_PAR WITH KEY u2018BARCODEu2019.
CHECK SY-SUBRC = 0.
IF PAGNUM = 1.
OUT_PAR-VALUE = u2018|u2019. "First page 
ELSE.
OUT_PAR-VALUE = u2018||u2019. "Next page 
ENDIF.

IF NEXTPAGE = 0.
OUT_PAR-VALUE+2 = u2018Lu2019. "Flag: last page

ENDIF.

MODIFY OUT_PAR INDEX SY-TABIX.

ENDFORM.

so go through it...

Hope it will help you..

Better go through in library for detail concept...

Regards

Narin Nandivada

Former Member
0 Kudos

Hi,

if you can place your Sub routine program code and its corresponding script code some body can help you to resolve your issue.

Regards

Raj,D

Former Member
0 Kudos

GENERATE SUBROUTINE POOL <itab> NAME <prog> [<options>].

chk with the syntax

Former Member
0 Kudos

The question is tooo vague. Pls specify what are you not getting. It wud help people to solve your problem in a better and efficient way. So tell me what r u not exactly able to print?

Nayan