cancel
Showing results for 
Search instead for 
Did you mean: 

subroutine in smartform

Former Member
0 Kudos

how i can use a comman subroutine for different place.

i want to make a common subroutine for these two coding.

1----


data: v_date(2) type c,

v_month(4) type c,

v_year(4) type c.

select single eindt from eket

into w_eindt

where ebeln = is_ekko-ebeln.

v_year = w_eindt+0(4).

v_month = w_eindt+4(2).

v_date = w_eindt+6(2).

case v_month.

WHEN '01'.

v_month = 'JAN'.

WHEN '02'.

v_month = 'FEB'.

WHEN '03'.

v_month = 'MAR'.

WHEN '04'.

v_month = 'APR'.

WHEN '05'.

v_month = 'MAY'.

WHEN '06'.

v_month = 'JUN'.

WHEN '07'.

v_month = 'JUL'.

WHEN '08'.

v_month = 'AUG'.

WHEN '09'.

v_month = 'SEP'.

WHEN '10'.

v_month = 'OCT'.

WHEN '11'.

v_month = 'NOV'.

WHEN '12'.

v_month = 'DEC'.

WHEN OTHERS.

ENDCASE.

concatenate v_date v_month v_year into w_eindt1 SEPARATED BY '-' .

condense w_eindt1.

clear : v_year,

v_month,

v_date.

2----


data: v_date1(2) type c,

v_month1(4) type c,

v_year1(4) type c.

v_year1 = is_ekko-bedat+0(4).

v_month1 = is_ekko-bedat+4(2).

v_date1 = is_ekko-bedat+6(2).

case v_month1.

WHEN '01'.

v_month1 = 'JAN'.

WHEN '02'.

v_month1 = 'FEB'.

WHEN '03'.

v_month1 = 'MAR'.

WHEN '04'.

v_month1 = 'APR'.

WHEN '05'.

v_month1 = 'MAY'.

WHEN '06'.

v_month1 = 'JUN'.

WHEN '07'.

v_month1 = 'JUL'.

WHEN '08'.

v_month1 = 'AUG'.

WHEN '09'.

v_month1 = 'SEP'.

WHEN '10'.

v_month1 = 'OCT'.

WHEN '11'.

v_month1 = 'NOV'.

WHEN '12'.

v_month1 = 'DEC'.

WHEN OTHERS.

ENDCASE.

concatenate v_date1 v_month1 v_year1 into w_bedat SEPARATED BY '-' .

condense w_bedat.

clear : v_year1,

v_month1,

v_date1.

----


for 1st coding

I/P is like 22.10.2207

O/P is coming 22-AUG-2007

same for 2nd.

I/P is like 12.07.2005

O/P is coming 12-JUL-2005

i want a subroutine for these.

Accepted Solutions (0)

Answers (3)

Answers (3)

naimesh_patel
Active Contributor
0 Kudos

In your Smartforms,

Select the node Global Definition.

And than select the Form Routines tab.

Here, create your Subroutine (FORM).


FORM GET_DATE USING P_DATE TYPE D
              CHANGING P_CHAR_DATE TYPE CHAR20.

* Put all your logic here

ENDFORM.

Now, wherever you have to print the date in the character format, create a Program Lines node and call the subroutine:

Like:


L_DATE = SY-DATUM.
PERFORM GET_DATE USING L_DATE CHANGING L_CHAR_DATE.

Regards,

Naimesh Patel

Former Member
0 Kudos

Create the Below Function Module and Call it in your Program Line to convert the date Format.

FUNCTION Z_DATE_CONVERT_GLOBAL.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IDATE) TYPE  SY-DATUM
*"  EXPORTING
*"     REFERENCE(DAY) TYPE  C
*"     REFERENCE(MONTH) TYPE  C
*"     REFERENCE(YEAR) TYPE  C
*"     REFERENCE(STEXT) TYPE  T247-KTX
*"     REFERENCE(LTEXT) TYPE  T247-LTX
*"     REFERENCE(USERDATE) TYPE  C
*"     REFERENCE(OUT_DATE) TYPE  C
*"  EXCEPTIONS
*"      INPUT_DATE_IS_INITIAL
*"      TEXT_FOR_MONTH_NOT_MAINTAINED
*"----------------------------------------------------------------------
* Date Formats For User Profiles
*    1	DD.MM.YYYY
*    2	MM/DD/YYYY
*    3	MM-DD-YYYY
*    4	YYYY.MM.DD
*    5	YYYY/MM/DD
*    6	YYYY-MM-DD
********************************************************************
  TABLES : USR01, T247.

  DATA: USRTYPE LIKE USR01-DATFM.
  DATA: SEPARATOR(1) TYPE C.

IF IDATE IS INITIAL.
  RAISE INPUT_DATE_IS_INITIAL.
ENDIF.
* GET THE DATE COMPONENTS

  DAY = IDATE+6(2).
  MONTH = IDATE+4(2).
  YEAR = IDATE+0(4).

* READ THE TEXT FOR THE MONTH
  SELECT SINGLE * FROM T247 WHERE SPRAS EQ SY-LANGU
                             AND MNR EQ MONTH.

  IF SY-SUBRC EQ 0.
    MOVE T247-KTX TO STEXT.
    MOVE T247-LTX TO LTEXT.
  ELSE.
    RAISE TEXT_FOR_MONTH_NOT_MAINTAINED.
  ENDIF.

* FOR CONVERTING TO THE DATE FORMAT OF THE USER PROFILE.

  SELECT SINGLE DATFM FROM USR01 INTO USRTYPE
                     WHERE BNAME EQ SY-UNAME.


IF SY-SUBRC EQ 0.

  CASE USRTYPE.

*      when the user profile is****************************
* Date Formats For User Profiles
*    1	DD.MM.YYYY
*    2	MM/DD/YYYY
*    3	MM-DD-YYYY
*    4	YYYY.MM.DD
*    5	YYYY/MM/DD
*    6	YYYY-MM-DD
********************************************************************

    WHEN '1'.

      SEPARATOR = '.'.
      CONCATENATE DAY MONTH YEAR INTO USERDATE SEPARATED BY SEPARATOR.
      CONCATENATE DAY  LTEXT YEAR INTO OUT_DATE SEPARATED BY SPACE.

    WHEN '2'.

      SEPARATOR = '/'.
      CONCATENATE  MONTH DAY YEAR INTO USERDATE SEPARATED BY SEPARATOR.
      CONCATENATE DAY  LTEXT YEAR INTO OUT_DATE SEPARATED BY SPACE.

    WHEN '3'.

      SEPARATOR = '-'.
      CONCATENATE  MONTH DAY YEAR INTO USERDATE SEPARATED BY SEPARATOR.
      CONCATENATE DAY  LTEXT YEAR INTO OUT_DATE SEPARATED BY SPACE.

    WHEN '4'.

      SEPARATOR = '.'.
      CONCATENATE YEAR MONTH DAY INTO USERDATE SEPARATED BY SEPARATOR.
      CONCATENATE DAY  LTEXT YEAR INTO OUT_DATE SEPARATED BY SPACE.

    WHEN '5'.

      SEPARATOR = '/'.
      CONCATENATE YEAR MONTH DAY INTO USERDATE SEPARATED BY SEPARATOR.
      CONCATENATE DAY  LTEXT YEAR INTO OUT_DATE SEPARATED BY SPACE.
   
 WHEN '6'.

      SEPARATOR = '-'.
      CONCATENATE YEAR MONTH DAY INTO USERDATE SEPARATED BY SEPARATOR.
      CONCATENATE DAY  LTEXT YEAR INTO OUT_DATE SEPARATED BY SPACE.

  ENDCASE.

ELSE.

 WRITE IDATE DD/MM/YYYY TO USERDATE.

ENDIF.

ENDFUNCTION.

Former Member
0 Kudos

Hi,

Call your perform from the program lines and in the Global definitions you will find Form Routines go there and write your logic. pass right parameters at each time.

you can call performs in N no. of places.

Thanks,

Sree.