Showing posts with label SELECTION SCREEN. Show all posts
Showing posts with label SELECTION SCREEN. Show all posts

Friday, February 7, 2020

Default Value in Selection Screen in ALV Report in SAP

Default Value in Selection Screen in ALV Report in SAP.

 

Sometimes there are requirement that we need some default value at selection  Screen .
Ex : In this screen there no default value in screen .
Now simply make altittle change add code in Initisation Event in sap report.
it will be first loaded then other events will be loaded in report.


After writing code , we can see the difference, there will be some default value at selection screen.

 

Monday, September 17, 2018

Changing the value of one Field Dynamically based on the value of other field.



SCENARIO:-Sometimes you need to change the value of one field based upon the value of another fields.
for example:if  you want to search for some product or material based upon the plant number , then as the user selects the particular plant number , you get the rest of detail based upon that plant number .
it will change dynamically .



*&---------------------------------------------------------------------*
*& Report  ZDYNAMICFIELDVAL2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZDYNAMICFIELDVAL2.
TYPESBEGIN OF ty_matnr,
       werks TYPE marc-werks,
       matnr TYPE makt-matnr,
       maktx TYPE makt-maktx,
       END OF ty_matnr.
*--------------------------------------------------------------*
*Data Declaration
*--------------------------------------------------------------*
DATAgwa_matnr      TYPE ty_matnr,
      gt_matnr       TYPE TABLE OF ty_matnr.
DATAgt_return      TYPE TABLE OF ddshretval,
      gwa_return     TYPE ddshretval.
DATAgwa_dynpfields TYPE dynpread,
      gt_dynpfields  TYPE TABLE OF dynpread.
DATAgv_werks       TYPE marc-werks.
*--------------------------------------------------------------*
*Selection-Screen
*--------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERSp_werks TYPE marc-werks OBLIGATORY.
PARAMETERSp_matnr TYPE mara-matnr.
SELECTION-SCREEN END OF BLOCK B1.
*--------------------------------------------------------------*
*Selection-Screen on Value-Request
*--------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr.

  REFRESH gt_dynpfields.

  gwa_dynpfields-fieldname 'P_WERKS'.
  APPEND gwa_dynpfields TO gt_dynpfields.

*Get plant value on the selection screen
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               sy-repid
      dynumb               sy-dynnr
    TABLES
      dynpfields           gt_dynpfields
    EXCEPTIONS
      invalid_abapworkarea 1
      invalid_dynprofield  2
      invalid_dynproname   3
      invalid_dynpronummer 4
      invalid_request      5
      no_fielddescription  6
      invalid_parameter    7
      undefind_error       8
      double_conversion    9
      stepl_not_found      10
      OTHERS               11.

  READ TABLE gt_dynpfields INTO gwa_dynpfields
         WITH KEY fieldname 'P_WERKS'.
  IF sy-subrc 0.
    gv_werks gwa_dynpfields-fieldvalue.
  ENDIF.

*Get values from the database based on plant
  SELECT a~werks
         a~matnr
         b~maktx
         UP TO 10 ROWS
         INTO TABLE gt_matnr
         FROM marc AS a
         INNER JOIN makt AS b
         ON a~matnr b~matnr
         WHERE a~werks gv_werks
           AND b~spras 'EN'.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        'MATNR'
      value_org       'S'
    TABLES
      value_tab       gt_matnr
      return_tab      gt_return
    EXCEPTIONS
      parameter_error 1
      no_values_found 2
      OTHERS          3.

  READ TABLE gt_return INTO gwa_return INDEX 1.
  IF sy-subrc 0.
    p_matnr gwa_return-fieldval.
  ENDIF.

Saturday, September 15, 2018

Call Screen using Radio button in selection screen


                           CALL SCREEN USING RADIO CONTROL BUTTONS.

Simple program to understand how call screen can be used within action of radio buttons.
we have 2 radio buttons , if you select header , you will have dialog screen with  10,100, 10, 10. with an select-option i have not made it OBLIGATORY,but you can make it.
then you enter the values you could see the header table data.
same in case of line item .



&---------------------------------------------------------------------*
*& Report  ZSCREENCREATE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSCREENCREATE.
******************HEADER DATA
TYPESBEGIN OF ty_vbak,
       VBELN TYPE VBELN ,
       ERDAT TYPE ERDAT,
       ERNAM TYPE ERNAM,
       NETWR TYPE NETWR,
        END OF TY_VBAK.
**************NOW LINE ITEM DATA******************
TYPESBEGIN OF TY_VBAP,
       VBELN TYPE VBELN,
       POSNR TYPE POSNR,
       MATNR TYPE MATNR,
       MATKL TYPE MATKL,
       END OF TY_VBAP.

*************************************************
DATAIT_VBAP TYPE TABLE OF TY_VBAP,
      WA_VBAP TYPE          TY_VBAP.

DATAIT_VBAK TYPE  TABLE OF TY_VBAK,
      WA_VBAK TYPE           TY_VBAK.
**************************************************

SELECTION-SCREEN BEGIN OF SCREEN 100.
SELECT-OPTIONS S_VBELN FOR WA_VBAK-VBELN.
SELECTION-SCREEN END OF SCREEN 100.


SELECTION-SCREEN BEGIN OF SCREEN 101.
SELECT-OPTIONSK_VBELN FOR  WA_VBAP-VBELN.
SELECTION-SCREEN END OF SCREEN 101.

PARAMETERSHEADER RADIOBUTTON GROUP RG1 ,
            ITEM RADIOBUTTON GROUP RG1.


IF HEADER 'X'.
CALL SELECTION-SCREEN 100 STARTING AT 10 10  ENDING AT 100 10.
PERFORM GET_VBAK.
PERFORM DC_DISPLAY.

ELSE.
CALL SELECTION-SCREEN 101 STARTING AT 10 10 ENDING AT 100 10.
PERFORM GET_VBELN.
PERFORM ITEM_DISPLAY.
ENDIF.
*&---------------------------------------------------------------------*
*&      Form  GET_VBAK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_VBAK .
SELECT  VBELN
        ERDAT
        ERNAM
        NETWR
        FROM VBAK INTO TABLE IT_VBAK WHERE VBELN IN S_VBELN.

ENDFORM.                    " GET_VBAK
*&---------------------------------------------------------------------*
*&      Form  DC_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DC_DISPLAY .
LOOP AT IT_VBAK INTO  WA_VBAK.
AT FIRST.
WRITE:10 'SALES DOC NO',
      15 'DATE OF PURS',
      25 'EMPL NAME ',
      35 ' TOTAL'.
ENDAT.
WRITE10 WA_VBAK-VBELN,
       15 WA_VBAK-ERDAT,
       25 WA_VBAK-ERNAM,
       35 WA_VBAK-NETWR.
AT LAST.
WRITE:'header table display'.
ENDAT.
ENDLOOP.
ENDFORM.                    " DC_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  GET_VBELN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_VBELN .
SELECT  VBELN
        POSNR
        MATNR
        MATKL
        FROM VBAP INTO TABLE IT_VBAP where vblen in k_vbeln.
ENDFORM.                    " GET_VBELN
*&---------------------------------------------------------------------*
*&      Form  ITEM_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ITEM_DISPLAY .
LOOP AT IT_VBAP INTO WA_VBAP.
AT FIRST .
 WRITE10 'SALE DOC NO',
        25 'ITEM NUM',
        35 'MATERIAL ',
        45 'TEST'.
ENDAT.
WRITE10 WA_VBAP-VBELN,
       25 WA_VBAP-POSNR,
       35 WA_VBAP-MATNR,
       45 WA_VBAP-MATKL.
ENDLOOP.

ENDFORM.                    " ITEM_DISPLAY


if you select any radio button , you will see a dialog screen like this prompting on your screen , just simply enter the values.


 if you enter the value then will get the values like this .
 if you are selecting item then you can see the ouput as following

 

SIMPLE LOG IN SCREEN (AT SELECTION SCREEN EVENT)







*&---------------------------------------------------------------------*
*& Report  ZSR_DRIVER
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSR_DRIVER.
TABLES  SSCRFIELDS.

*****************************************************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERSP_USER TYPE ZUSER_LOGIN-USER_ID.
PARAMETERSp_pass TYPE ZUSER_LOGIN-PASSWORD.
SELECTION-SCREEN END OF BLOCK B1.
***************************************************************************************************************************
DATA COUNT TYPE I.
SELECTION-SCREEN :
 PUSHBUTTON /9(20)  BUTTON1  USER-COMMAND BUT1,
  PUSHBUTTON /9(20button2 USER-COMMAND BUT2.
**PARAMETERS : P1 AS LISTBOX

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-name 'P_PASS'.
      screen-invisible 1.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.


AT SELECTION-SCREEN.
  CASE sscrfields.
    WHEN 'BUT1'.
      IF P_USER 'SOURAV' AND P_PASS 'SHREYA'.
        CLEAR P_PASS.
        clear p_user.
       CALL TRANSACTION 'ZSR'.
       ELSE.
CLEAR P_PASS.
CLEAR P_USER.
        MESSAGE 'WRONG USER ID OR PASSWORD' TYPE 'I'.
        COUNT COUNT 3.
        IF COUNT 3.
           LOOP AT SCREEN .
             SCREEN-INVISIBLE 1.
             MODIFY SCREEN .
*          LOOP AT SCREEN .
*        IF SCREEN-NAME = 'P_PASS' AND SCREEN-NAME = 'P_USER'.
*          SCREEN-INVISIBLE = 1.
*          MODIFY SCREEN .

          ENDLOOP.
         ENDIF.
       ENDIF.
    WHEN 'BUT2'.
      MESSAGE 'Button 2 was clicked' TYPE 'I'.

  ENDCASE.
*--------------------------------------------------------------*
*Initialization
*--------------------------------------------------------------*

INITIALIZATION.
  button1 'LOGIN'.
  button2 'CREATE USER'.

CALL FUNCTION 'ICON_CREATE'
  EXPORTING
    NAME                        icon_okay
   TEXT                        'LOG IN'
   INFO                        'SIGN IN'
*   ADD_STDINF                  = 'X'
 IMPORTING
   RESULT                      button1
* EXCEPTIONS
*   ICON_NOT_FOUND              = 1
*   OUTPUTFIELD_TOO_SHORT       = 2
*   OTHERS                      = 3
          .
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

CALL FUNCTION 'ICON_CREATE'
  EXPORTING
    NAME                        icon_cancel
   TEXT                        'SIGN UP'
   INFO                        'SIGN UP '
*   ADD_STDINF                  = 'X'
 IMPORTING
   RESULT                      BUTTON2
********************OUND              = 1
********************   OUTPUTFIELD_TOO_SHORT       = 2
********************   OTHERS                      = 3 EXCEPTIONS
          .
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

OUTPUT:

                                                LOGIN PAGE


IF YOU ENTER THE RIGHT PASSWORD AND USER NAME THEN YOU CAN LOG IN 
 AND PERFORM ALV , BDC , CREATE SMARTFORM. 

THIS IS SECOND SCREEN CALLED THROUGH CALL TRANSACTION.
NOW IF YOUR PASSWORD IS WRONG THEN YOU WOULD SEE THIS MESSAGE ON SCREEN.

 I HAVE NOT WRITTEN SIGN UP CODE , YOU CAN SIMPLY CREATE IT SAME WAY.
IF YOU WANT TO VALIDATE IT DYNAMICALLY FROM DATABASE THEN SIMPLY MATCH IT WITH VALUES STORED IN DATABASE.




 

Thursday, September 13, 2018

SAP Table Types

SAP Table Types

I. Transparent tables (BKPF, VBAK, VBAP, KNA1, COEP)

  • Allows secondary indexes (SE11->Display Table->Indexes)
  • Can be buffered (SE11->Display Table->technical settings) Heavily updated tables should not be buffered.

II. Pool Tables (match codes, look up tables)

  • Should be accessed via primary key or
  • Should be buffered (SE11->Display Table->technical settings)
  • No secondary indexes
  • Select * is Ok because all columns retrieved anyway

III. Cluster Tables (BSEG,BSEC)

  • Should be accessed via primary key - very fast retrieval otherwise very slow
  • No secondary indexes
  • Select * is Ok because all columns retrieved anyway. Performing an operation on multiple rows is more efficient than single row operations. Therefore you still want to select into an internal table. If many rows are being selected into the internal table, you might still like to retrieve specific columns to cut down on the memory required.
  • Statistical SQL functions (SUM, AVG, MIN, MAX, etc) not supported
  • Can not be buffered

IV. Buffered Tables (includes both Transparent & Pool Tables)

While buffering database tables in program memory (SELECT into internal table) is generally a good idea for performance, it is not always necessary. Some tables are already buffered in memory. These are mostly configuration tables. If a table is already buffered, then a select statement against it is very fast. To determine if a table is buffered, choose the 'technical settings' soft button from the data dictionary display of a table (SE12). Pool tables should all be buffered.