Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

Sometimes,there is a unique requirement in the project - we have a report which will call an another report in background.The first report shall transport the data to the called report and after computation ,the second report shall throw back the results to the first report.This can be easily achieved by using ABAP memory and Submit statement.Let us check,how :

The first report shall pass the data to ABAP Memory using Export statement and then call the second report using SUBMIT statement:

   DATA: lv_number           TYPE tbtcjob-jobcount,
       lv_name                    TYPE tbtcjob-jobname VALUE 'JOB_TEST',
       lt_print_parameters    TYPE pri_params ,
       lv_valid_flag(1)           TYPE c.

  DATA : lit_joblist  TYPE TABLE OF tbtcstep,
             wa_joblist TYPE tbtcstep.

  CALL FUNCTION 'JOB_OPEN'
    EXPORTING
      jobname          = lv_name
    IMPORTING
      jobcount         = lv_number
    EXCEPTIONS
      cant_create_job  = 1
      invalid_job_data = 2
      jobname_missing  = 3
      OTHERS           = 4.
  IF sy-subrc = 0 .

    CALL FUNCTION 'GET_PRINT_PARAMETERS'
      EXPORTING
        mode                 = 'BATCH'
        no_dialog            = 'X'
        destination          = 'LOCL'
        new_list_id          = 'X'
      IMPORTING
        out_parameters       = lt_print_parameters
        valid                = lv_valid_flag
      EXCEPTIONS
        invalid_print_params = 2
        OTHERS               = 4.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ENDIF.

    PERFORM export_to_memory.



    SUBMIT zqma_archive_create
    TO SAP-SPOOL
    VIA JOB lv_name NUMBER lv_number
    WITHOUT SPOOL DYNPRO
    SPOOL PARAMETERS lt_print_parameters
    AND RETURN.



    IF sy-subrc = 0.

      CALL FUNCTION 'JOB_CLOSE'
        EXPORTING
          jobcount             = lv_number
          jobname              = lv_name
          strtimmed            = 'X'
        EXCEPTIONS
          cant_start_immediate = 1
          invalid_startdate    = 2
          jobname_missing      = 3
          job_close_failed     = 4
          job_nosteps          = 5
          job_notex            = 6
          lock_failed          = 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.
    ENDIF.
  ENDIF.

===================================================================================================================

   FORM export_to_memory .

  EXPORT gt1_certificate_data[]
         vbak-vbeln
         vbap-posnr
         objk-sernr
         gv_charg
         t001w-werks
         zqma_cert_adm_11-brand
         sy-repid
         g_cpack
         gv_flg
         afpo-aufnr
         gs_crane-sernr
         mara-matnr
         gs_crane-vbeln
         gs_crane-matnr
         gs_crane-ppaufnr TO MEMORY ID 'ZQMA_ARCHIVE'.

ENDFORM.                    " EXPORT_TO_MEMORY

====================================================================================================================

  REPORT  zqma_archive_create.

INITIALIZATION.

* Types decleration
  TYPES: BEGIN OF ty_certificate_data,
         checkbox     TYPE char1,         " for selection.
         certpack     TYPE zqma_certpack, " Certificate Package
         certtype     TYPE zqma_certtype, " Certificate Type
         certdesc     TYPE zqma_certdesc, " Certificate Description
         matnr        TYPE mara-matnr,    " Material number
         maktx        TYPE makt-maktx,    " Material description
         sernr        TYPE gernr,         " serial number
         langkey      TYPE spras,         " Language Key
         quantity     TYPE i,             " no. of copies to be printed.
         langdone     TYPE char1,
         END OF ty_certificate_data.


* Internal Tables decleration
  DATA: gt_cert_data_memory          TYPE STANDARD TABLE OF ty_certificate_data,
        gt1_certificate_data         TYPE STANDARD TABLE OF ty_certificate_data,
        lt_zqma_cert_adm_06          TYPE STANDARD TABLE OF zqma_cert_adm_06,
        ls_zqma_cert_adm_06          TYPE zqma_cert_adm_06,
        lt_tfdir                     TYPE STANDARD TABLE OF tfdir.

*Local Data
  DATA:  lv_okay                     TYPE         char1,
         l_report                    LIKE         sy-repid,
         wa_cert_data_memory         LIKE LINE OF gt_cert_data_memory,
         lv_count                    TYPE         i,
         lv_langkey                  TYPE         zqma_cert_adm_14-lang,
         lt_cert_data_memory_temp    LIKE         gt_cert_data_memory,
         lv_message                  TYPE         string,
         gv_total                    TYPE         i,
         gv_curr                     TYPE         i.


*Local Data
  DATA: l_vbeln                      TYPE        vbak-vbeln,
        l_posnr                      TYPE        vbap-posnr,
        l_sernr                      TYPE        gernr,
        l_charg                      TYPE        charg_d,
        l_werks                      TYPE        t001w-werks,
        l_brand                      TYPE        zqma_cert_adm_11-brand,
        l_repid                      TYPE        sy-repid,
        l_aufnr                      TYPE        afpo-aufnr,
        l_crane_sernr                TYPE        gernr,
        l_matnr                      TYPE        mara-matnr,
        l_crane_vbeln                TYPE        vbeln_va,
        l_crane_matnr                TYPE        matnr,
        l_crane-ppaufnr              TYPE        afpo-aufnr.

  DATA: l_cpack                      TYPE        zqma_certpack,
        l_flg                        TYPE        c.

*Constants
  CONSTANTS:
     lc_x                            TYPE c      VALUE  'X',
     lc_a                            TYPE c      VALUE  'A'.

* Importing required Data
IMPORT
       gt1_certificate_data[]
       vbak-vbeln             = l_vbeln
       vbap-posnr             = l_posnr
       objk-sernr             = l_sernr
       gv_charg               = l_charg
       t001w-werks            = l_werks
       zqma_cert_adm_11-brand = l_brand
       sy-repid               = l_repid
       g_cpack                = l_cpack
       gv_flg                 = l_flg
       afpo-aufnr             = l_aufnr
       gs_crane-sernr         = l_crane_sernr
       mara-matnr             = l_matnr
       gs_crane-vbeln         = l_crane_vbeln
       gs_crane-matnr         = l_crane_matnr
       gs_crane-ppaufnr       = l_crane-ppaufnr

       from memory id 'ZQMA_ARCHIVE'.


  IF gt1_certificate_data[] IS NOT INITIAL.

* may be no lines are selected.
    CLEAR: lv_okay.
    LOOP AT gt1_certificate_data TRANSPORTING NO FIELDS WHERE checkbox = lc_x.
      lv_okay = lc_x.
    ENDLOOP.

    IF lv_okay <> lc_x.
    ELSE.
      CLEAR: gt_cert_data_memory.
      gt_cert_data_memory[] = gt1_certificate_data[].
      DELETE gt_cert_data_memory WHERE checkbox NElc_x.

* filter certificate records as per users wish considering language
* records maintained.
      CLEAR lt_cert_data_memory_temp[].

      LOOP AT gt_cert_data_memory INTO wa_cert_data_memory.

        CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT'
          EXPORTING
            input  = wa_cert_data_memory-langkey
          IMPORTING
            output = lv_langkey.

        SELECT SINGLE COUNT( * ) INTO lv_count
          FROM zqma_cert_adm_14
          WHERE certtype = wa_cert_data_memory-certtype
            AND lang = lv_langkey.                          "#EC WARNOK

        IF sy-subrc = 0.
          APPEND wa_cert_data_memory TO lt_cert_data_memory_temp.
          CONTINUE.
        ELSE.
          APPEND wa_cert_data_memory TO lt_cert_data_memory_temp.
        ENDIF.
      ENDLOOP.

      CLEAR: wa_cert_data_memory,
             gt_cert_data_memory[].

      gt_cert_data_memory[] = lt_cert_data_memory_temp[].

      EXPORT gt_certificate_data
      FROM gt_cert_data_memory TO MEMORY ID 'CERTDATA'.

      DESCRIBE TABLE gt_cert_data_memory LINES gv_total.
      CLEAR:  gv_curr.

      EXPORT gv_total TO MEMORY ID  'TOTAL'.
      EXPORT gv_curr  TO MEMORY ID  'CURR'.

      IF gt_cert_data_memory IS NOT INITIAL.
        SELECT
           certtype
           certtypeprg FROM zqma_cert_adm_06
          INTO CORRESPONDING FIELDS OF TABLE  lt_zqma_cert_adm_06
          FOR ALL ENTRIES IN gt_cert_data_memory
          WHERE certtype = gt_cert_data_memory-certtype
          AND  werks = l_werks.
        IF sy-subrc = 0.

          SORT lt_zqma_cert_adm_06 BY
          certtype
          werks.

          SELECT * FROM tfdir INTO TABLE lt_tfdir
          FOR ALL ENTRIES IN lt_zqma_cert_adm_06
          WHERE  funcname = lt_zqma_cert_adm_06-certtypeprg. "#EC CI_GENBUFF

          IF sy-subrc = 0.
            SORT lt_tfdir BY funcname.
          ENDIF.
        ENDIF.
      ENDIF.

      LOOP AT gt_cert_data_memory INTO wa_cert_data_memory.

        READ TABLE lt_zqma_cert_adm_06
        WITH KEY certtype = wa_cert_data_memory-certtype
        INTO ls_zqma_cert_adm_06
        BINARY SEARCH.

        IF sy-subrc EQ 0.
          l_report = ls_zqma_cert_adm_06-certtypeprg.
        ELSE.
          MESSAGE text-009 TYPE 'E' DISPLAY LIKE 'I'.
        ENDIF.

*check FM maintained exists in the system.
*
        READ TABLE lt_tfdir
        WITH KEY funcname = l_report TRANSPORTING NO FIELDS BINARY SEARCH.
        IF sy-subrc <> 0.
          CONCATENATE text-010 l_report text-011
            INTO lv_message SEPARATED BY space.
          MESSAGE lv_message TYPE 'E' DISPLAY LIKE 'I'.
        ENDIF.

        IMPORT gv_curr_1 TO gv_curr FROM MEMORY ID 'CURR'.
        gv_curr = gv_curr + 1.
        EXPORT gv_curr TO MEMORY ID 'CURR'.

        l_charg = wa_cert_data_memory-sernr.
        l_flg = lc_a.

* calling the driver programs for certificates
        CALL FUNCTION l_report
          EXPORTING
            pp_vbeln           = l_vbeln
            pp_posnr           = l_posnr
            pp_sernr           = l_sernr
            pp_charg           = l_charg
            pp_werks           = l_werks
            pp_matnr           = wa_cert_data_memory-matnr
            pp_brand           = l_brand
            pp_langu           = wa_cert_data_memory-langkey
            pp_callpr          = l_repid
            pp_certty          = wa_cert_data_memory-certtype
            pp_quanty          = wa_cert_data_memory-quantity
            pp_flag            = l_flg
            pp_certpack        = l_cpack
            pp_aufnr           = l_aufnr
            pp_gernr           = wa_cert_data_memory-sernr
            pp_crane_sernr     = l_crane_sernr
            pp_mara_matnr      = l_matnr
            pp_crane_vbeln     = l_crane_vbeln
            pp_crane_matnr     = l_crane_matnr
            pp_syrepid         = l_repid
            pp_assembled_order = l_crane-ppaufnr.

      ENDLOOP.

      FREE MEMORY ID : 'TOTAL', 'CURR', 'TABLE', 'CERTIFICATE_DATA'.

    ENDIF.
  ENDIF.

****Do not forget to place all the code in the called report after the initialization event.

1 Comment