Application Development and Automation 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: 
Read only

Selection Screen multiple field validation

Former Member
0 Likes
5,718

Hello Friends,

I am new to abap, I am writing an ALV program for which on selection screen has 2 parameters and 2 select options. Among which one field is mandatory.

I have written the code and when I am executing the program, it is fetching all the records with default parameter and ignoring the data I provide on all other fields at selection screen. How could I correct the error so that when I provide the value in those fields, they fetch relative records with the mandatory field as well..

Thanks and regards,

Bharath

9 REPLIES 9
Read only

Former Member
0 Likes
2,407

Hi,

Could you please share your code. Need to check on selection screen definition and select logic.

Best Regards,

Abirami

Read only

hemanth_kumar21
Contributor
0 Likes
2,407

Hi bharath,

Can you paste your code?

or before printing the output, you can loop the internal table and check with the parameter values (entered in the selection screen). delete the values which not are matching with the parameter values.

As per the performance it is not a good idea.

We need to take care while you are fetching the data itself.

In queries, when you are using both parameters and select-options better to put a AND condition.

Read only

RaymondGiuseppi
Active Contributor
0 Likes
2,407

I hope you used AND between WHERE criteria

SELECT * INTO TABLE itab FROM table

  WHERE field1 IN range1 AND field2 IN range2. AND field3 EQ parameter1 AND field4 EQ parameter2.

Regards,

Raymond

Read only

0 Likes
2,407

This is basically your answer, Bharath (Raymond's answer).  You must put your Select-option variables into your where clauses.  Unless you have some very interesting code... that's all you need.

Neal

Read only

Former Member
0 Likes
2,407

Here's my code, I have to fetch the data from 4 tables...

Thanks and regards in advance,

Bharath

*&---------------------------------------------------------------------*

*& Report  ZTEST_ALV

*&

*&---------------------------------------------------------------------*

*&Report to display the data from 4 tables in ALV format

*&

*&---------------------------------------------------------------------*

REPORT ztest_alv.

TYPE-POOLS: slis.

TABLES: crmd_orderadm_h ,crmd_orderadm_i, bbp_pdigp, crm_jest.

*Selection Screeen definition

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS: b_objid FOR crmd_orderadm_h-object_id,

                b_date  FOR crmd_orderadm_h-posting_date.

PARAMETERS:     b_obj TYPE crmt_subobject_category_db OBLIGATORY

                  DEFAULT 'bus2121',

                b_guid TYPE crmt_object_guid.

SELECTION-SCREEN END OF BLOCK b1.

"Structure Declaration

TYPES: BEGIN OF ty_crmd_header,

  objtype   TYPE crmt_subobject_category_db,"business transaction

  protype   TYPE crmt_process_type_db,"business transaction type

  createdby TYPE crmt_created_by,"user that created transaction

  guid      TYPE crmt_object_guid," guid of a crm object

  END OF ty_crmd_header,

  BEGIN OF ty_crmd_item,

  header    TYPE crmt_object_guid, "guid of a crm object

  desc      TYPE crmt_prshtextx_db, "product short text

  itemno    TYPE crmt_item_no, "item number in document

  itemtype  TYPE crmt_item_type_db, "item category

  END OF ty_crmd_item,

BEGIN OF ty_crmd_jest,

  objnr     TYPE crmt_object_guid, "guid of a crm object

  status    TYPE crm_j_status, " object status

  END OF ty_crmd_jest,

BEGIN OF ty_bbp_pdigp,

  guid       TYPE bbp_guid, "guid of a crm object

  categoryid TYPE bbp_category_id," product category id

  quantity   TYPE bbp_mng,"quantity in order unit

  unit       TYPE bbp_unit,"unit of measurement

  grossprice TYPE bbp_gross_price,"gross price

  END OF ty_bbp_pdigp,

BEGIN OF ty_final,

  objtype    TYPE crmt_subobject_category_db, "object type

  protype    TYPE crmt_process_type_db,"business transaction type

  createdby  TYPE crmt_created_by," user that created transaction

  guid       TYPE guid,"guid of crm object

  desc       TYPE crmt_prshtextx_db, "product short text

  itemno     TYPE crmt_item_no, "item number in document

  itemtype   TYPE crmt_item_type_db, "item category

  status     TYPE crm_j_status,"object status

  categoryid TYPE bbp_category_id," product category id

  quantity   TYPE bbp_mng,"quantity in order unit

  unit       TYPE bbp_unit,"unit of measurement

  grossprice TYPE bbp_gross_price,"grossprice

  END OF ty_final.

" Internal table and Work Area creation

DATA: lt_crmd_header  TYPE TABLE OF  crmd_orderadm_h,

      lwa_crmd_header TYPE crmd_orderadm_h,

      lt_crmd_item    TYPE TABLE OF ty_crmd_item,

      lwa_crmd_item   TYPE ty_crmd_item,

      lt_crmd_jest    TYPE TABLE OF ty_crmd_jest,

      lwa_crmd_jest   TYPE ty_crmd_jest,

      lt_bbp_pdigp    TYPE TABLE OF bbp_pdigp,

      lwa_bbp_pdigp   TYPE bbp_pdigp,

      e_item          TYPE TABLE OF bbp_pds_sc_item_d,

      lwa_e_item      TYPE bbp_pds_sc_item_d,

      lt_final        TYPE TABLE OF ty_final,

      lwa_final       TYPE ty_final,

      it_fieldcat     TYPE slis_t_fieldcat_alv,

      lwa_fieldcat    TYPE slis_fieldcat_alv,

      e_header        LIKE  bbp_pds_sc_header_d,

      i_guid          TYPE crmd_orderadm_h-guid.

AT SELECTION-SCREEN.

  IF b_objid IS NOT INITIAL.

    SELECT SINGLE object_id

      FROM crmd_orderadm_h

      INTO lwa_crmd_header

      WHERE object_id IN b_objid.

    IF sy-subrc <> 0.

      MESSAGE e001(00) WITH 'enter valid data'.

    ENDIF.

  ENDIF.

*AT SELECTION-SCREEN ON b_date.

  IF b_date IS NOT INITIAL.

    SELECT SINGLE posting_date

      FROM crmd_orderadm_h

      INTO lwa_crmd_header

     WHERE posting_date IN b_date.

    IF sy-subrc <> 0.

      MESSAGE e001(00) WITH 'enter valid data'.

    ENDIF.

  ENDIF.

*AT SELECTION-SCREEN ON b_obj.

  IF b_obj IS NOT INITIAL.

    SELECT SINGLE object_type

      FROM crmd_orderadm_h

      INTO lwa_crmd_header

      WHERE object_type EQ b_obj.

    IF sy-subrc <> 0.

      MESSAGE e001(00) WITH 'enter valid data'.

    ENDIF.

  ENDIF.

*AT SELECTION-SCREEN ON b_guid.

  IF b_guid IS NOT INITIAL.

    SELECT SINGLE guid

      FROM crmd_orderadm_h

      INTO lwa_crmd_header

      WHERE guid EQ b_guid.

    IF sy-subrc <> 0.

      MESSAGE e001(00) WITH 'enter valid data'.

    ENDIF.

  ENDIF.

START-OF-SELECTION.

a

  SELECT *

    INTO TABLE lt_crmd_header

    FROM crmd_orderadm_h

    WHERE   object_id eq b_objid  .

  IF lt_crmd_header[] IS NOT INITIAL.

    PERFORM select_item.

    PERFORM select_jest.

    PERFORM select_pdigp.

  ENDIF.

*&---------------------------------------------------------------------*

*&      Form  select_item

*&---------------------------------------------------------------------*

*       selection of data from item table

*----------------------------------------------------------------------*

FORM select_item.

  SELECT header description  number_int itm_type

    FROM crmd_orderadm_i

    INTO TABLE lt_crmd_item

    FOR ALL ENTRIES IN lt_crmd_header

    WHERE header EQ lt_crmd_header-guid.

ENDFORM.

*&---------------------------------------------------------------------*

*&      Form  select_jest

*&---------------------------------------------------------------------*

*       selection of data from object status table

*----------------------------------------------------------------------*

FORM select_jest.

  SELECT objnr stat

    FROM crm_jest

    INTO TABLE lt_crmd_jest

    FOR ALL ENTRIES IN lt_crmd_header

    WHERE objnr EQ lt_crmd_header-guid.

ENDFORM.                    "select_jest

*&---------------------------------------------------------------------*

*&      Form  select_pdigp

*&---------------------------------------------------------------------*

* selection of data from Business Transaction Itm-Purchasing Information

*----------------------------------------------------------------------*

FORM select_pdigp.

  LOOP AT lt_crmd_header INTO lwa_crmd_header.

    CALL FUNCTION 'BBP_PD_SC_GETDETAIL'

      EXPORTING

        i_guid                     = lwa_crmd_header-guid

*       I_OBJECT_ID                =

*       I_ATTACH_WITH_DOC          = ' '

*       I_WITH_ITEMDATA            = 'X'

*       I_ITEM_SORTED_BY_HIERARCHY =

*       I_WITHOUT_HEADER_TOTALS    =

*       I_READ_FROM_ARCHIVE        = ' '

      IMPORTING

        e_header                   = e_header

*       EV_IS_PD                   =

*       ET_ATTACH                  =

      TABLES

        e_item                     = e_item

*       E_ACCOUNT                  =

*       E_PARTNER                  =

*       E_CONFIRM                  =

*       E_LONGTEXT                 =

*       E_LIMIT                    =

*       E_ORGDATA                  =

*       E_TAX                      =

*       E_PRIDOC                   =

*       E_HCF                      =        E_ICF

*       =                          =

*       E_MESSAGES                 =

*       E_ACTVAL                   =

*       E_ACC_ACTVAL               =

*       E_HEADER_REL               =

*       E_ITMLIM_REL               =

*       E_STATUS                   =

      .

    SELECT *

   FROM bbp_pdigp

   INTO TABLE lt_bbp_pdigp

   FOR ALL ENTRIES IN e_item

   WHERE guid = e_item-guid.

  ENDLOOP.

ENDFORM.

END-OF-SELECTION.

"Moving data into final internal table

  LOOP AT lt_crmd_header INTO lwa_crmd_header.

    lwa_final-objtype    = lwa_crmd_header-object_type.

    lwa_final-protype    = lwa_crmd_header-process_type.

    lwa_final-createdby  = lwa_crmd_header-created_by.

    lwa_final-guid       = lwa_crmd_header-guid.

    READ TABLE lt_crmd_item INTO lwa_crmd_item WITH KEY header =

lwa_crmd_header-guid.

    lwa_final-desc       = lwa_crmd_item-desc.

    lwa_final-itemno     = lwa_crmd_item-itemno.

    lwa_final-itemtype   = lwa_crmd_item-itemtype.

    READ TABLE lt_crmd_jest INTO lwa_crmd_jest WITH KEY objnr =

lwa_crmd_header-guid.

    lwa_final-status     = lwa_crmd_jest-status.

    READ TABLE lt_bbp_pdigp INTO lwa_bbp_pdigp WITH KEY guid =

lwa_crmd_header-guid.

    lwa_final-categoryid = lwa_bbp_pdigp-category_id.

    lwa_final-quantity   = lwa_bbp_pdigp-quantity.

    lwa_final-unit       = lwa_bbp_pdigp-unit.

    lwa_final-grossprice = lwa_bbp_pdigp-gross_price.

    APPEND lwa_final TO lt_final.

    CLEAR:lwa_final,

          lwa_crmd_header,

          lwa_crmd_item,

          lwa_crmd_jest,

          lwa_bbp_pdigp.

  ENDLOOP.

"Appending data to  ALV

  lwa_fieldcat-fieldname = 'OBJTYPE'.

  lwa_fieldcat-seltext_m = 'Object Type'.

  lwa_fieldcat-tabname   = 'IT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'PROTYPE'.

  lwa_fieldcat-seltext_m = 'Business Transaction Type'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'CREATEDBY'.

  lwa_fieldcat-seltext_m = 'Created by'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'PROTYPE'.

  lwa_fieldcat-seltext_m = 'Business Transaction Type'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'GUID'.

  lwa_fieldcat-seltext_m = 'Global Unique Identifier'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'DESC'.

  lwa_fieldcat-seltext_m = 'Product Short Text'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'ITEMNO'.

  lwa_fieldcat-seltext_m = 'Item No'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'ITEMTYPE'.

  lwa_fieldcat-seltext_m = 'Type of Item'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'STATUS'.

  lwa_fieldcat-seltext_m = 'Object Status'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'CATEGORYID'.

  lwa_fieldcat-seltext_m = 'Product Category ID'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'QUANTITY'.

  lwa_fieldcat-seltext_m = 'Quantity'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'UNIT'.

  lwa_fieldcat-seltext_m = 'Unit of Measure'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  lwa_fieldcat-fieldname = 'GROSSPRICE'.

  lwa_fieldcat-seltext_m = 'Gross Price of product'.

  lwa_fieldcat-tabname   = 'lT_FINAL'.

  APPEND lwa_fieldcat TO it_fieldcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

   EXPORTING

*     I_INTERFACE_CHECK                 = ' '

*     I_BYPASSING_BUFFER                = ' '

*     I_BUFFER_ACTIVE                   = ' '

*     I_CALLBACK_PROGRAM                = ' '

*     I_CALLBACK_PF_STATUS_SET          = ' '

*     I_CALLBACK_USER_COMMAND           = ' '

*     I_CALLBACK_TOP_OF_PAGE            = ' '

*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '

*     I_CALLBACK_HTML_END_OF_LIST       = ' '

*     I_STRUCTURE_NAME                  =

*     I_BACKGROUND_ID                   = ' '

*     I_GRID_TITLE                      =

*     I_GRID_SETTINGS                   =

*     IS_LAYOUT                         =

     it_fieldcat                       = it_fieldcat

*     IT_EXCLUDING                      =

*     IT_SPECIAL_GROUPS                 =

*     IT_SORT                           =

*     IT_FILTER                         =

*     IS_SEL_HIDE                       =

*     I_DEFAULT                         = 'X'

*     I_SAVE                            = ' '

*     IS_VARIANT                        =

*     IT_EVENTS                         =

*     IT_EVENT_EXIT                     =

*     IS_PRINT                          =

*     IS_REPREP_ID                      =

*     I_SCREEN_START_COLUMN             = 0

*     I_SCREEN_START_LINE               = 0

*     I_SCREEN_END_COLUMN               = 0

*     I_SCREEN_END_LINE                 = 0

*     I_HTML_HEIGHT_TOP                 = 0

*     I_HTML_HEIGHT_END                 = 0

*     IT_ALV_GRAPHICS                   =

*     IT_HYPERLINK                      =

*     IT_ADD_FIELDCAT                   =

*     IT_EXCEPT_QINFO                   =

*     IR_SALV_FULLSCREEN_ADAPTER        =

*   IMPORTING

*     E_EXIT_CAUSED_BY_CALLER           =

*     ES_EXIT_CAUSED_BY_USER            =

    TABLES

      t_outtab                          = lt_final

   EXCEPTIONS

     program_error                     = 1

     OTHERS                            = 2

            .

Read only

0 Likes
2,407

Hi Bharath-

Your selection screen consists of:

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS: b_objid FOR crmd_orderadm_h-object_id,

                b_date  FOR crmd_orderadm_h-posting_date.

PARAMETERS:     b_obj TYPE crmt_subobject_category_db OBLIGATORY

                  DEFAULT 'bus2121',

                b_guid TYPE crmt_object_guid.

SELECTION-SCREEN END OF BLOCK b1.

You are validating each and every selection parameter using event 'AT SELECTION SCREEN' this is correct.

But in all your queries you are retrieving data based on internal table lt_crmd_header whose values were retrieved based on selection screen parameter: b_objid.

  SELECT *

    INTO TABLE lt_crmd_header

    FROM crmd_orderadm_h

    WHERE   object_id eq b_objid  .

Hence, in your report as you are not using any of the selection screen parameter except b_objid it will retrieve values based on b_objid only.

-Venkat


Read only

0 Likes
2,407

Dear Venkat,

If I modify the select statement to

 

SELECT

object_type process_type created_by object_id
INTO TABLE lt_crmd_header
FROM crmd_orderadm_h
WHERE object_type EQ b_obj
and ( guid eq b_guid or posting_date in
b_date
or object_id in b_objid ) .

It is throwing a run time error....DBIF_RSQL_INVALID_RSQL..

Read only

0 Likes
2,407

Hello Chandra,

Check the declaration for internal table

lt_crmd_header . There is a mismatch in the number of fields(internal table declaration) you are picking.

It is declared as

DATA: lt_crmd_header  TYPE TABLE OF  crmd_orderadm_h,

      lwa_crmd_header TYPE crmd_orderadm_h,

The type should ty_crmd_header,

DATA: lt_crmd_header  TYPE TABLE OF  ty_crmd_header,

      lwa_crmd_header TYPE ty_crmd_header,

Try this one and check if there is an error.

Thanks.

M M Jaffer.



Read only

0 Likes
2,407

Execute souce code inspector (SCI) on your program, it should raise some errors...

Regards,

Raymond