cancel
Showing results for 
Search instead for 
Did you mean: 

Call 2nd sapscript form from subroutine of 1st sapscript form...

aris_hidalgo
Contributor
0 Kudos

Hello Experts, 

Here is the scenario, standard program RFFOUS_C will call the sapscript FORM1 which in turn has a custom program
that contains the subroutines. In one of those subroutines, I need to call another sapscript form which is FORM2.

Below is a rough logic:

RFFOUS_C->FORM1->SUBROUTINES->FORM2

Here is the code in the subroutine which is called by FORM1. I need to call FORM2.

FORM write_line_items TABLES im_input STRUCTURE itcsy
                             ex_output STRUCTURE itcsy.

  CONSTANTS: lcc_laufd TYPE char11 VALUE 'REGUH-LAUFD',
             lcc_laufi TYPE char11 VALUE 'REGUH-LAUFI',
             lcc_xvorl TYPE char11 VALUE 'REGUH-XVORL',
             lcc_zbukr TYPE char11 VALUE 'REGUH-ZBUKR',
             lcc_lifnr TYPE char11 VALUE 'REGUH-LIFNR',
             lcc_vblnr TYPE char11 VALUE 'REGUH-VBLNR'.

  DATA: ltyd_laufd TYPE reguh-laufd,
        ltyc_laufi TYPE reguh-laufi,
        ltyc_xvorl TYPE reguh-xvorl,
        ltyc_zbukr TYPE reguh-zbukr,
        ltyc_lifnr TYPE reguh-lifnr,
        ltyc_vblnr TYPE reguh-vblnr.

  DATA: ltyc_date TYPE char10.

  LOOP AT im_input INTO gw_input.
    CASE gw_input-name.
      WHEN lcc_laufd.
        ltyc_date = gw_input-value.
        REPLACE ALL OCCURRENCES OF '.' IN ltyc_date WITH space.
        CONCATENATE ltyc_date+4(4) ltyc_date+2(2) ltyc_date+0(2)
               INTO ltyc_date.

        ltyd_laufd = ltyc_date.
      WHEN lcc_laufi.
        ltyc_laufi = gw_input-value.
      WHEN lcc_xvorl.
        ltyc_xvorl = gw_input-value.
      WHEN lcc_zbukr.
        ltyc_zbukr = gw_input-value.
      WHEN lcc_lifnr.
        ltyc_lifnr = gw_input-value.
      WHEN lcc_vblnr.
        ltyc_vblnr = gw_input-value.
    ENDCASE.
  ENDLOOP.

  SELECT *
    FROM regup
    INTO TABLE gt_regup
   WHERE laufd = ltyd_laufd
     AND laufi = ltyc_laufi
     AND xvorl = ltyc_xvorl
     AND zbukr = ltyc_zbukr
     AND lifnr = ltyc_lifnr
     AND vblnr = ltyc_vblnr.

  IF gt_regup[] IS NOT INITIAL.
    CALL FUNCTION 'OPEN_FORM'
     EXPORTING
*       APPLICATION                       = 'TX'
*       ARCHIVE_INDEX                     =
*       ARCHIVE_PARAMS                    =
*       DEVICE                            = 'PRINTER'
*       DIALOG                            = 'X'
       form                              = 'Z2574FFI_RA_CIMB'
*       LANGUAGE                          = SY-LANGU
*       OPTIONS                           =
*       MAIL_SENDER                       =
*       MAIL_RECIPIENT                    =
*       MAIL_APPL_OBJECT                  =
*       RAW_DATA_INTERFACE                = '*'
*       SPONUMIV                          =
*     IMPORTING
*       LANGUAGE                          =
*       NEW_ARCHIVE_PARAMS                =
*       RESULT                            =
     EXCEPTIONS
       canceled                          = 1
       device                            = 2
       form                              = 3
       OPTIONS                           = 4
       unclosed                          = 5
       mail_options                      = 6
       archive_error                     = 7
       invalid_fax_number                = 8
       more_params_needed_in_batch       = 9
       spool_error                       = 10
       codepage                          = 11
       OTHERS                            = 12.

    IF sy-subrc <> 0.
*      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    CALL FUNCTION 'START_FORM'
     EXPORTING
*       ARCHIVE_INDEX          =
       form                   = 'Z2574FFI_RA_CIMB'
*       LANGUAGE               = ' '
*       STARTPAGE              = ' '
*       PROGRAM                = ' '
*       MAIL_APPL_OBJECT       =
*     IMPORTING
*       LANGUAGE               =
     EXCEPTIONS
       form                   = 1
       format                 = 2
       unended                = 3
       unopened               = 4
       unused                 = 5
       spool_error            = 6
       codepage               = 7
       OTHERS                 = 8.

    IF sy-subrc <> 0.
*      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    LOOP AT gt_regup INTO regup.
      CALL FUNCTION 'WRITE_FORM'
       EXPORTING
         element                        = 'LINE_ITEMS'
         function                       = 'APPEND'
         type                           = 'BODY'
         window                         = 'MAIN'
*     IMPORTING
*       PENDING_LINES                  =
       EXCEPTIONS
         element                        = 1
         function                       = 2
         type                           = 3
         unopened                       = 4
         unstarted                      = 5
         window                         = 6
         bad_pageformat_for_print       = 7
         spool_error                    = 8
         codepage                       = 9
         OTHERS                         = 10.

      IF sy-subrc <> 0.
*      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDLOOP.

    CALL FUNCTION 'END_FORM'
*     IMPORTING
*       RESULT                         =
     EXCEPTIONS
       unopened                       = 1
       bad_pageformat_for_print       = 2
       spool_error                    = 3
       codepage                       = 4
       OTHERS                         = 5.

    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    CALL FUNCTION 'CLOSE_FORM'
*     IMPORTING
*       RESULT                         =
*       RDI_RESULT                     =
*     TABLES
*       OTFDATA                        =
     EXCEPTIONS
       unopened                       = 1
       bad_pageformat_for_print       = 2
       send_error                     = 3
       spool_error                    = 4
       codepage                       = 5
       OTHERS                         = 6.

    IF sy-subrc <> 0.
*      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

  ENDIF.
ENDFORM.                    "write_line_items

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi,

Understood your requirement and providing pseudo code as folows:

perform main_form_open. "Main subroutine

form main_form_open.

perform get_data.

perform data_validations.

perform open_form. "calling FORM1

perform call_windows. "calling differen windows in FORM1

perform special_data_print. "calling FORM2

perform close_form. "closing FORM1

endform.

form open_form.

call function 'OPEN_FORM'

exporting

form = 'FORM1'.

endform.

form special_data_print. "Special data to be printed using FORM2

call function 'START_FORM'

exporting

form = 'FORM2'.

  • print the data to be printed in FORM2

call function 'END_FORM'. "FORM2 will be closed

endform.

from close_form.

call function 'CLOSE_FORM'. "FORM1 will be closed

endform.

Hope it might clarifies your doubts.

Regards,

Prasanth

former_member188843
Participant
0 Kudos

Does your logical will also work in standard diver?

I mean in a standard driver I can set subroutine in a form then in the routine can the new form.

Waiting for your reply!

Answers (0)