ALV Grid in back ground
Hi friends, i got some problem in alv grid while i am running it in back ground.
my report contains some currency(amount) field in out put. when i am removing the amount field it is good result in back ground. but when it consist of amount field it is giving error. it indicating some string length problem. and error analysis as follows.
Error analysis
In statement
"STRLEN( obj )..."
the argument "obj" can only take a character-type data object.
In this case, the operand "obj" has the non-character type "P".
pls tell me can't we run amount field in back ground. if s how to solve my error. pls give me some ideas.
Kumar.
Hi
Many a times there is a requirement to display ALV Grid (not ALV List) in the background Job. I have checked the SDN Forum for the same and it has been mentioned that ALV Grid cannot be displayed in Background, but the list output of ALV is possible. So user wont have the actual Grid interface but the List interface.
There is a workaround to display ALV Grid in Background Job. The only restriction is you cant schedule the job through SM36. You need to execute the transaction of the report program, fill in the selection screen data and hit Execute.
The job would be executed in background. User will be able to see the Job Log and Job Status after executing the program. User doesnt have to go to SM37 to view the job status/log. Once the Job Status is changed to COMPLETED, user can click on DISPLAY SPOOL to view the ALV Grid.
/people/prashant.patil12/blog/2007/02/20/displaying-alv-grid-in-background-job
Similar Messages
-
Hi All,
Can we run alv report in back ground,if yes how?
Thanks&Regards.
Srikanth.Vhi Ramu,
Run in Background but make sure it is alv list, not alv Grid FM. if you are uisng alv list not problem , but if you are using alv grid then you can code like this..
if sy-batch = ' '.
call 'REUSE_ALV_GRID_DISPLAY'.
else.
call 'REUSE_ALV_LIST_DISPLAY'.
endif.
if you are using OO alv then write this code..
CALL METHOD cl_gui_alv_grid=>offline
RECEIVING e_offline = off.
IF off IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING container_name = g_container.
ENDIF. -
Reduce out put field length of alv output in back ground
Hi all,
Is there a way to reduce the output length of the field in back groundfor ALV out put
Its back ground
I have thsi things in my field catalog
wa_fieldcat-outputlen = 10.
wa_fieldcat-ddic_outputlen = 10.
If the field has value of length 10 characters its ok
but when the field has lenth of more than 10 characters
(say 20 char). in fore ground it displays 10 characters and then we can move the column to see full thing , but in back ground it displays 20 char.
In fact that is what i have to see because in background you cannot drag the column to see entire thing , but i want to cut short to 12 char even if i don't see the remaining thing its ok
ThanksHi Vasu,
WHAT EXACTLY SY-BATCH DOES .
I tried reducing wa_fieldcat-outputlen = 10. and then i tried
wa_fieldcat-outputlen = 5., but it doesnot really changed anything in back ground but it did in fore ground . I haven't used any called sy-batch
Let me know
This is how my field catalog looks for mATNR
clear wa_fieldcat.
wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-seltext_l = ' Material #'.
wa_fieldcat-seltext_m = 'Material #'.
wa_fieldcat-seltext_s = ' Material #'.
wa_fieldcat-reptext_ddic = 'Material #'.
wa_fieldcat-ddictxt = 'L'.
wa_fieldcat-col_pos = 4.
wa_fieldcat-outputlen = 18.
wa_fieldcat-intlen = 18.
wa_fieldcat-ddic_outputlen = 18.
wa_fieldcat-tabname = '1'.
append wa_fieldcat to fieldcat.
NEXT TIME I COMMENTED THIS AND HAD
wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-seltext_l = ' Material #'.
wa_fieldcat-seltext_m = 'Material #'.
wa_fieldcat-seltext_s = ' Material #'.
wa_fieldcat-reptext_ddic = 'Material #'.
wa_fieldcat-ddictxt = 'L'.
wa_fieldcat-col_pos = 4.
wa_fieldcat-outputlen = 10.
wa_fieldcat-intlen = 10.
wa_fieldcat-ddic_outputlen = 10.
wa_fieldcat-tabname = '1'.
append wa_fieldcat to fieldcat.
BUT I DID SEE DIFFERENCE IN FOREBROUND BUT NOT IN BACK GROUND
Let me know
Thanks -
Download ALV report in back ground in local directry
thanks to all but my porblem is download the ALV report in background in local directry.
sriram.HI ,
Find the small code to download the file in background.
n SAP ABAP you can transfer the contents of the internal table to a file. This is required when you wish to extract data from SAP tables into a flat file. This file can then be used to transfer data to another SAP or NON SAP system. This can also be used for an interfacing when you wish to transfer data on a daily or a weekly basis from R/3 to NON R/3 or SAP. The command used to create a file on the application server is as follows.
OPEN DATASET
Please see example code below.
REPORT ZEX_DATATOFILE .
*& ABAPLOVERS: Data Transfer
Parameters to enter the path
PARAMETERS FILENAME(128) DEFAULT '/usr/tmp/testfile.dat'
LOWER CASE.
Table Declaration
TABLES VBAK.
Data Declaration
DATA D_MSG_TEXT(50).
Get data for file transfer
DATA INT_VBAK LIKE VBAK OCCURS 100
WITH HEADER LINE.
SELECT * FROM VBAK INTO TABLE INT_VBAK.
SORT INT_VBAK BY VBELN.
LOOP AT INT_VBAK.
WRITE: / INT_VBAK-VBELN,
INT_VBAK-KUNNR.
ENDLOOP.
Opening the File
OPEN DATASET FILENAME FOR OUTPUT IN TEXT MODE
MESSAGE D_MSG_TEXT.
IF SY-SUBRC NE 0.
WRITE: 'File cannot be opened. Reason:', D_MSG_TEXT.
EXIT.
ENDIF.
Transferring Data
LOOP AT INT_VBAK.
TRANSFER INT_VBAK-VBELN TO FILENAME.
ENDLOOP.
Closing the File
CLOSE DATASET FILENAME.
Regards,
Rajesh Akarte -
How to Transfer Data from editable ALV grid control to internal table?
Hi,
Can anyone give me a simple example by which I can transfer data from editable alv grid control back to the internal table. The ALV has been created by OO approach.
I would appreciate if the solution is provided without handling any events.
Regards,
AuroHello Auro
You simply need to call method <b>go_grid->check_changed_data</b> at PAI of the dynpro displaying the ALV grid. If data have been changed on the editable ALV grid then this method will raise event DATA_CHANGED. If you do not want or need to handle this event (e.g. for validating the edited values) then you do not define any event handler method.
Regards
Uwe -
GRID ALV - Back ground job - Seperate spool
Hi,
I have a report when executed in the foreground it gives me the output in ALV GRID and then when I click back it gives me classical output this is fine, But when I execute in the background the only 1 spool is generated with Classical output and the ALV output is missing. When I tried by commenting the Classic output code then ALV out put is appearing in the SPOOL.So the ALV spool is overwritten by the classical output in the spool. So pls let me know how to create another Spool for the ALV GRID and I am using the standard FM REUSE_ALV_GRID_DISPLAY for the ALV output.
regards,
PrabhuHi Guys,
Problem solved, using the Import parameter IS_PRINT in the F.M. - REUSE_ALV_GRID_DISPLAY, which creates new spool request for ALV.
Using ls_print-print = 'X'.
ls_print-no_print_selinfos = 'X'.
Regards,
Prabhu -
Back from ALV Grid with multiple refresh
I have a report that from a selection screen shows an editable ALV Grid, and after I save it, it will refresh the grid.
My problem is when I hit the BACK button it returns to the "previous grid" instead of the selection screen
I am using the following:
WHEN 'BACK_C'.
LEAVE to SCREEN '0'.
How can I force it to go back to the selection screen?
sidenote: I have tried using call
selection-screen '1000'
but it adds a new problem as in the selection screen hitting back will return to the grid and I can never exit the report.Neither solution works.
If it helps, I'm refreshing the grid with:
DATA : ref_grid TYPE REF TO cl_gui_alv_grid.
IF ref_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
ENDIF.
CALL METHOD ref_grid->refresh_table_display( ).
It seems when I refresh the grid it generates a completely independent grid screen and there's no way to skip them all and return to the selection screen. -
Problem when printing Alv Tree Report in back ground
Hi,
I am using SUBMIT ...TO SAP-SPOOL WITHOUT SPOOL DYNPRO with GET_PRINT_PARAMETERS FM.Its working fine.
My problem is that my SUBMIT report have TREE STRUCTURE as output so when i am running my program one blank screen is coming with heading DISPLAY LOG TREE because of TREE STRUCTURE.when i click on back button then only further processing happens.
How to avoid this TREE STRUCTURE SCREEN ???
Is there any other way to pass your list o/p to SPOOL other than .....TO SAP-SPOOL..?
Thanks in advance.in foreground when u run ALV report it holds maximum fields and displays in 1 single row, but the case is not in back ground...When any report is run in background, the default size for a line is 255 chars...So, if it more it gets splitted into 2 line item....This is how back ground job works for a report though it is a normal report or alv report.
-
Problem with ALV Grid Display screen Back Button
Dear Friends ,
I have an ALV Grid Display,Here am facing a problem for my 'Back' button,i haven't defined any PF Status and is using the standard one.But after the Display when i press Back Button a blank Screen is appearing n then again i have to press back button to go to my Selection Screen.
Please Suggest if i have to take care of something else.
I want my Selection Screen when i press Back on my Display Screen.
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
FIELDCAT TYPE SLIS_FIELDCAT_ALV.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE =
I_INTERFACE_CHECK = ' '
I_CALLBACK_PROGRAM = 'ZRMMPD01A'
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 = I_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
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_FINAL
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
Thanks and Regards,
AshwiniHi Vijay ,
No i dont have any write statement in my proggram.
Here it is
REPORT ZRMMPD01A NO STANDARD PAGE HEADING.
TABLES : EQUI,SER03,MKPF,OBJK.
TYPE-POOLS : SLIS.
DATA IT_EQUI LIKE EQUI OCCURS 0 WITH HEADER LINE.
DATA IT_OBJK LIKE OBJK OCCURS 0 WITH HEADER LINE..
DATA IT_SER03 LIKE SER03 OCCURS 0 WITH HEADER LINE.
DATA IT_MKPF LIKE MKPF OCCURS 0 WITH HEADER LINE .
DATA : BEGIN OF IT_DISPLAY OCCURS 0,
MATNR LIKE EQUI-MATNR,
SERNR LIKE EQUI-SERNR,
BWART LIKE SER03-BWART,
WERK LIKE SER03-WERK,
CHARGE LIKE SER03-CHARGE,
LAGERORT LIKE SER03-LAGERORT,
MBLNR LIKE SER03-MBLNR,
MJAHR LIKE SER03-MJAHR,
ZEILE LIKE SER03-ZEILE,
BUDAT LIKE MKPF-BUDAT,
BKTXT LIKE MKPF-BKTXT,
USNAM LIKE MKPF-USNAM,
XBLNR LIKE MKPF-XBLNR,
END OF IT_DISPLAY.
DATA : WA_DISPLAY LIKE IT_DISPLAY.
DATA IT_FINAL LIKE IT_DISPLAY OCCURS 0 WITH HEADER LINE.
DATA IT_TEMP LIKE IT_DISPLAY OCCURS 0 WITH HEADER LINE.
DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DATA :I_LAYOUT TYPE SLIS_LAYOUT_ALV,
I_EVENTS TYPE SLIS_T_EVENT.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_MATNR FOR EQUI-MATNR MATCHCODE OBJECT MCD,"OBLIGATORY
S_SERNR FOR EQUI-SERNR, "MATCHCODE OBJECT MCD OBLIGATORY
S_MBLNR FOR SER03-MBLNR MATCHCODE OBJECT MCD,
S_BWART FOR SER03-BWART MATCHCODE OBJECT MCD,
S_WERK FOR SER03-WERK MATCHCODE OBJECT MCD,
S_LAGET FOR SER03-LAGERORT MATCHCODE OBJECT MCD,
S_BUDAT FOR MKPF-BUDAT MATCHCODE OBJECT MCD,
S_XBLNR FOR MKPF-XBLNR MATCHCODE OBJECT MCD.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS : R1 RADIOBUTTON GROUP G1 DEFAULT 'X',
R2 RADIOBUTTON GROUP G1.
SELECTION-SCREEN END OF BLOCK B2.
START-OF-SELECTION.
*Fetch Data.
PERFORM GET_DATA.
*Fill Display Fields.
PERFORM FILL_TABLE.
*Segregate data according to radio button selection.
PERFORM SELECT_CONDITION.
*Fill The Feild catalog.
PERFORM FIELD_CATALOG.
*Display Output.
PERFORM OUTPUT_DISPLAY..
*& Form GET_DATA
text
--> p1 text
<-- p2 text
FORM GET_DATA.
SELECT * FROM EQUI INTO TABLE IT_EQUI
WHERE MATNR IN S_MATNR
AND SERNR IN S_SERNR.
SELECT * FROM OBJK INTO TABLE IT_OBJK
FOR ALL ENTRIES IN IT_EQUI
WHERE EQUNR = IT_EQUI-EQUNR.
SELECT * FROM SER03 INTO TABLE IT_SER03
FOR ALL ENTRIES IN IT_OBJK
WHERE OBKNR = IT_OBJK-OBKNR
AND MBLNR IN S_MBLNR
AND BWART IN S_BWART
AND WERK IN S_WERK
AND LAGERORT IN S_LAGET.
SELECT * FROM MKPF INTO TABLE IT_MKPF
FOR ALL ENTRIES IN IT_SER03
WHERE MBLNR = IT_SER03-MBLNR
AND BUDAT IN S_BUDAT
AND XBLNR IN S_XBLNR.
ENDFORM. " GET_DATA
*& Form FILL_TABLE
text
--> p1 text
<-- p2 text
FORM FILL_TABLE.
LOOP AT IT_EQUI.
LOOP AT IT_OBJK.
IF IT_OBJK-EQUNR <> IT_EQUI-EQUNR.
SKIP.
ELSE.
READ TABLE IT_SER03 WITH KEY OBKNR = IT_OBJK-OBKNR.
IF SY-SUBRC = 0.
WA_DISPLAY-MATNR = IT_EQUI-MATNR.
WA_DISPLAY-SERNR = IT_EQUI-SERNR.
WA_DISPLAY-BWART = IT_SER03-BWART.
WA_DISPLAY-WERK = IT_SER03-WERK.
WA_DISPLAY-CHARGE = IT_SER03-CHARGE.
WA_DISPLAY-LAGERORT = IT_SER03-LAGERORT.
WA_DISPLAY-MBLNR = IT_SER03-MBLNR.
WA_DISPLAY-MJAHR = IT_SER03-MJAHR.
WA_DISPLAY-ZEILE = IT_SER03-ZEILE.
READ TABLE IT_MKPF WITH KEY MBLNR = IT_SER03-MBLNR.
IF SY-SUBRC = 0.
WA_DISPLAY-BUDAT = IT_MKPF-BUDAT.
WA_DISPLAY-BKTXT = IT_MKPF-BKTXT.
WA_DISPLAY-USNAM = IT_MKPF-USNAM.
WA_DISPLAY-XBLNR = IT_MKPF-XBLNR.
ENDIF.
ENDIF.
ENDIF.
IF NOT WA_DISPLAY IS INITIAL.
APPEND WA_DISPLAY TO IT_DISPLAY.
CLEAR WA_DISPLAY.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " FILL_TABLE
*& Form FIELD_CATALOG
text
--> p1 text
<-- p2 text
FORM FIELD_CATALOG.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'MATNR'.
FIELDCAT-SELTEXT_M = 'Material Number'.
FIELDCAT-OUTPUTLEN = 18.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'SERNR'.
FIELDCAT-SELTEXT_M = 'Serial number'.
FIELDCAT-OUTPUTLEN = 18.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'MBLNR'.
FIELDCAT-SELTEXT_L = 'Number of material document'.
FIELDCAT-OUTPUTLEN = 18.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'BWART'.
FIELDCAT-SELTEXT_M = 'Movement type'.
FIELDCAT-OUTPUTLEN = 18.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'WERK'.
FIELDCAT-SELTEXT_M = 'Plant'.
FIELDCAT-OUTPUTLEN = 5.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'CHARGE'.
FIELDCAT-SELTEXT_M = 'Batch number'.
FIELDCAT-OUTPUTLEN = 18.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'LAGERORT'.
FIELDCAT-SELTEXT_M = 'Storage Location'.
FIELDCAT-OUTPUTLEN = 18.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'MJAHR'.
FIELDCAT-SELTEXT_M = 'Material doc. year'.
FIELDCAT-OUTPUTLEN = 18.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'ZEILE'.
FIELDCAT-SELTEXT_L = 'Item in material document'.
FIELDCAT-OUTPUTLEN = 18.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'BUDAT'.
FIELDCAT-SELTEXT_L = 'Posting date in the document'.
FIELDCAT-OUTPUTLEN = 10.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'BKTXT'.
FIELDCAT-SELTEXT_L = 'Document header text'.
FIELDCAT-OUTPUTLEN = 25.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'USNAM'.
FIELDCAT-SELTEXT_M = 'User name'.
FIELDCAT-OUTPUTLEN = 15.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
FIELDCAT-TABNAME = 'IT_DISPLAY'.
FIELDCAT-FIELDNAME = 'XBLNR'.
FIELDCAT-SELTEXT_L = 'Reference document number'.
FIELDCAT-OUTPUTLEN = 25.
APPEND FIELDCAT TO IT_FIELDCAT.
CLEAR FIELDCAT.
ENDFORM. " FIELD_CATALOG
*& Form DISPLAY_OUTPUT
text
--> p1 text
<-- p2 text
FORM OUTPUT_DISPLAY.
IF R1 = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = 'ZRMMPD01A'
IS_LAYOUT = I_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
TABLES
T_OUTTAB = IT_DISPLAY
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH IT_DISPLAY.
CLEAR IT_DISPLAY.
ELSEIF R2 = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = 'ZRMMPD01A'
IS_LAYOUT = I_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
TABLES
T_OUTTAB = IT_FINAL
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH IT_DISPLAY.
CLEAR IT_DISPLAY.
ENDIF.
ENDFORM. " DISPLAY_OUTPUT
*& Form SELECT_CONDITION
text
--> p1 text
<-- p2 text
FORM SELECT_CONDITION.
IF R2 = 'X'.
CLEAR WA_DISPLAY.
SORT IT_DISPLAY BY MATNR SERNR MBLNR ZEILE.
DELETE ADJACENT DUPLICATES FROM IT_DISPLAY.
LOOP AT IT_DISPLAY WHERE ZEILE = '0002'.
READ TABLE IT_DISPLAY WITH KEY MATNR = IT_DISPLAY-MATNR
SERNR = IT_DISPLAY-SERNR ZEILE = '0001'.
IF SY-SUBRC = 0.
DELETE IT_DISPLAY.
ENDIF.
ENDLOOP.
SORT IT_DISPLAY BY MATNR SERNR BWART MBLNR.
DELETE ADJACENT DUPLICATES FROM IT_DISPLAY.
LOOP AT IT_DISPLAY.
IF WA_DISPLAY IS INITIAL.
WA_DISPLAY = IT_DISPLAY.
ENDIF.
LOOP AT IT_DISPLAY WHERE MATNR = WA_DISPLAY-MATNR
AND SERNR = WA_DISPLAY-SERNR.
IF IT_DISPLAY-BUDAT > WA_DISPLAY-BUDAT.
WA_DISPLAY = IT_DISPLAY.
ELSE.
DELETE IT_DISPLAY.
ENDIF.
ENDLOOP.
APPEND WA_DISPLAY TO IT_TEMP.
CLEAR WA_DISPLAY.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM IT_TEMP.
IF NOT IT_TEMP[] IS INITIAL.
IT_FINAL[] = IT_TEMP[].
ENDIF.
ENDIF.
ENDFORM. " SELECT_CONDITION
Regards,
Ashwini -
How to provide Menu Options like BACK in ALV Grid display?
Hi Guys,
My problem is after displaying Multiple ALV grids using OO .I was not able to provide Back option and all those are Deactivated onj the Menu bar.So,How to provide those options.?We have a GreenButton with Symbol Correct on that Menu Bar.I was not able to see Back button and it is Deactivated.How to activate that Button.so that after displaying i can click on Back button and go to selection options.
Thanks,
Gopi.Hi Rich,
I changed likie what u told.But still not working.I was not able to go to the Selection screen even after clicking F3 or F5 or back button.
Standard Toolbar
Icon Function Key Function Code Function Text
F3 F3 Back
Alt-Arrow < F3 Back
Function Key Setting
Function Key Icon Function Code Function Text
F5 F3 Back
Ctrl-N F3 Back
These are all the things which i kept in se41 tr code.
Thanks,
gopi. -
Execute in Back ground when push button clicked on alv output
Hi Friends,
I have a alv list display report with check boxes and a 'Detail' Push button in output
when i check the check boxes and click on the 'Detail' Push button detail report is
displayed using 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'. My requirement is if I click on 'Detail'
push button the code should also execute in back ground creating the spool. Request you
to help with sample code. I tried with below but not working.
WHEN 'DETAIL'.
call function 'START_OF_BACKGROUNDTASK'
exporting
startdate = sy-datum
starttime = sy-uzeit
exceptions
others = 1.
if sy-subrc = 1.
exit.
ELSE.
PERFORM determine_table_from_output CHANGING rs_selfield.
PERFORM call_alv_detail.
endif.
commit work.
Thanks,
Neetha.You could encapsulate the detail display in a separate report and call it in your 'DETAIL'-section like this:
DATA: lv_number TYPE tbtcjob-jobcount,
lv_name TYPE tbtcjob-jobname,
ls_rsparams TYPE rsparams,
lt_rsparams LIKE STANDARD TABLE OF ls_rsparams.
* Get free job number
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.
SUBMIT 'ZDISPLAY_DETAIL'
VIA JOB lv_name NUMBER lv_number
WITH SELECTION-TABLE lt_rsparams
AND RETURN.
IF sy-subrc = 0.
* Submit
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.
ENDIF.
Regards,
Ulrich -
Getting data back from ALV grid
This looks like a topic discussed before but i still need some clearifications. I display an internal table in ALV grid, in editable format. user changes the data and presses A BUTTON. On doing that I need to re-capture the changes made in a internal table.
I have used method "check_changed_data' but it doesnt seem to work. It keeps appending data in the internal table if the user changes it multiple times. please suggest me some ideas on how to go about it.
Thanks.
shivHi then i will give another code with OO that fits your requirement check...
REPORT ZTEST NO STANDARD PAGE HEADING
LINE-SIZE 200
LINE-COUNT 58
MESSAGE-ID ZZ.
* Include for Data Declarations
INCLUDE ZSDR0057_DEL_HOLD_TOP.
INCLUDE <ICON>.
**Tables to Compare Before after the Data Change
DATA: IT_VEKP_TMP LIKE IT_VEKP OCCURS 0 WITH HEADER LINE,
IT_VEKP1 LIKE IT_VEKP OCCURS 0 WITH HEADER LINE,
IT_VEKP1_TMP LIKE IT_VEKP OCCURS 0 WITH HEADER LINE,
IT_FINAL_TMP LIKE IT_FINAL OCCURS 0 WITH HEADER LINE,
IT_OCRC TYPE TABLE OF ZSD_OC_HOLD.
DATA: L_VALID TYPE C,
L_VALID1 TYPE C,
V_FLAG,
V_DATA_CHANGE.
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.
* CLASS lcl_event_handler DEFINITION
CLASS LCL_EVENT_HANDLER DEFINITION .
PUBLIC SECTION .
METHODS:
**Hot spot Handler
HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO,
**User Command Handler
HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM,
**Double Click Handler
HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN,
**Handler to Check the Data Change
HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED
OF CL_GUI_ALV_GRID
IMPORTING ER_DATA_CHANGED
E_ONF4
E_ONF4_BEFORE
E_ONF4_AFTER,
HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE.
ENDCLASS. "lcl_event_handler DEFINITION
* CLASS lcl_event_handler DEFINITION for second screen
CLASS LCL_EVENT_HANDLER1 DEFINITION .
PUBLIC SECTION .
METHODS:
**User Command Handler
HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM,
HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE.
ENDCLASS. "lcl_event_handler1 DEFINITION
* CLASS lcl_event_handler IMPLEMENTATION
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
*Handle Hotspot Click
METHOD HANDLE_HOTSPOT_CLICK .
PERFORM HANDLE_HOTSPOT_CLICK USING E_ROW_ID E_COLUMN_ID ES_ROW_NO .
ENDMETHOD. "lcl_event_handler
*Handle User Command
METHOD HANDLE_USER_COMMAND.
PERFORM EVENT_UCOMM USING E_UCOMM.
ENDMETHOD. "user_command
*Handle Double Click
METHOD HANDLE_DOUBLE_CLICK.
DATA X_FINAL TYPE T_FINAL.
IF V_DATA_CHANGE IS INITIAL.
IF E_COLUMN = 'ZZPROMDT' OR E_COLUMN = 'ZZOCHOLDRC'.
READ TABLE IT_FINAL INDEX E_ROW INTO X_FINAL
TRANSPORTING
VBELN
VGBEL
VGPOS
ZZPROMDT
ZZOCHOLDRC.
IF SY-SUBRC = 0.
PERFORM GET_HU_DATA USING X_FINAL.
PERFORM POPULATE_FIELDCAT2.
ENDIF.
CALL SCREEN 200.
ENDIF.
ELSE.
MESSAGE I002 WITH 'Please save the data first and then double click'.
ENDIF.
ENDMETHOD. "handle_double_click
**Handle Data Change
METHOD HANDLE_DATA_CHANGED.
DATA: X_CHANGE TYPE LVC_S_MODI,
X_FINAL TYPE T_FINAL,
X_OCRC TYPE ZSD_OC_HOLD,
L_FLAG.
LOOP AT ER_DATA_CHANGED->MT_GOOD_CELLS INTO X_CHANGE.
IF X_CHANGE-FIELDNAME = 'ZZOCHOLDRC'.
READ TABLE IT_FINAL INTO X_FINAL INDEX X_CHANGE-ROW_ID.
IF SY-SUBRC = 0.
READ TABLE IT_OCRC INTO X_OCRC WITH KEY
ZZOCHOLDRC = X_CHANGE-VALUE
TRANSPORTING ZZRCDESC.
IF SY-SUBRC = 0.
X_FINAL-ZZRCDESC = X_OCRC-ZZRCDESC.
MODIFY IT_FINAL FROM X_FINAL INDEX X_CHANGE-ROW_ID
TRANSPORTING ZZRCDESC.
L_FLAG = 'X'.
ENDIF.
ENDIF.
ENDIF.
IF X_CHANGE-FIELDNAME = 'ZZPROMDT'.
READ TABLE IT_FINAL INTO X_FINAL INDEX X_CHANGE-ROW_ID.
IF SY-SUBRC = 0.
X_FINAL-ZZPROMDT = X_CHANGE-VALUE.
MODIFY IT_FINAL FROM X_FINAL INDEX X_CHANGE-ROW_ID
TRANSPORTING ZZPROMDT.
L_FLAG = 'X'.
ENDIF.
ENDIF.
ENDLOOP.
IF L_FLAG = 'X'.
CLEAR V_DATA_CHANGE.
V_DATA_CHANGE = 'X'.
ENDIF.
ENDMETHOD. "data_changed
METHOD HANDLE_TOOLBAR.
DATA: LS_TOOLBAR TYPE STB_BUTTON.
* append a separator to normal toolbar
CLEAR LS_TOOLBAR.
MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
* append SAVE icon
CLEAR LS_TOOLBAR.
MOVE 'SAVE' TO LS_TOOLBAR-FUNCTION.
MOVE ICON_SYSTEM_SAVE TO LS_TOOLBAR-ICON.
MOVE 'Save' TO LS_TOOLBAR-QUICKINFO.
MOVE ' Save ' TO LS_TOOLBAR-TEXT.
MOVE ' ' TO LS_TOOLBAR-DISABLED.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
* append a separator to normal toolbar
CLEAR LS_TOOLBAR.
MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
* append BACK icon
CLEAR LS_TOOLBAR.
MOVE 'BACK' TO LS_TOOLBAR-FUNCTION.
MOVE ICON_SYSTEM_BACK TO LS_TOOLBAR-ICON.
MOVE 'Back' TO LS_TOOLBAR-QUICKINFO.
MOVE ' Back ' TO LS_TOOLBAR-TEXT.
MOVE ' ' TO LS_TOOLBAR-DISABLED.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
ENDMETHOD. "handle_toolbar
ENDCLASS. "lcl_event_handler IMPLEMENTATION
* CLASS lcl_event_handler1 IMPLEMENTATION
CLASS LCL_EVENT_HANDLER1 IMPLEMENTATION.
*Handle User Command
METHOD HANDLE_USER_COMMAND.
PERFORM EVENT_UCOMM1 USING E_UCOMM.
ENDMETHOD. "user_command
METHOD HANDLE_TOOLBAR.
DATA: LS_TOOLBAR TYPE STB_BUTTON.
* append a separator to normal toolbar
CLEAR LS_TOOLBAR.
MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
* append SAVE icon
CLEAR LS_TOOLBAR.
MOVE 'SAVE' TO LS_TOOLBAR-FUNCTION.
MOVE ICON_SYSTEM_SAVE TO LS_TOOLBAR-ICON.
MOVE 'Save' TO LS_TOOLBAR-QUICKINFO.
MOVE ' Save ' TO LS_TOOLBAR-TEXT.
MOVE ' ' TO LS_TOOLBAR-DISABLED.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
* append a separator to normal toolbar
CLEAR LS_TOOLBAR.
MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
* append an Back icon
CLEAR LS_TOOLBAR.
MOVE 'BACK' TO LS_TOOLBAR-FUNCTION.
MOVE ICON_SYSTEM_BACK TO LS_TOOLBAR-ICON.
MOVE 'Back' TO LS_TOOLBAR-QUICKINFO.
MOVE ' Back ' TO LS_TOOLBAR-TEXT.
MOVE ' ' TO LS_TOOLBAR-DISABLED.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
ENDMETHOD. "handle_toolbar
ENDCLASS. "lcl_event_handler1 IMPLEMENTATION
*& Global Definitions
DATA: "G_GRID TYPE REF TO CL_GUI_ALV_GRID, "Grid for first report
G_GRID1 TYPE REF TO CL_GUI_ALV_GRID, "grid for second report
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,"Container1
G_CUSTOM_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,"container
G_HANDLER TYPE REF TO LCL_EVENT_HANDLER, "handler
G_HANDLER1 TYPE REF TO LCL_EVENT_HANDLER1. "handler
DATA: OK_CODE LIKE SY-UCOMM,
SAVE_OK LIKE SY-UCOMM,
G_CONTAINER1 TYPE SCRFNAME VALUE 'ZSDR0057_DEL_HOLD_CONT1',
G_CONTAINER2 TYPE SCRFNAME VALUE 'ZSDR0057_DEL_HOLD_CONT2',
GS_LAYOUT TYPE LVC_S_LAYO,
GS_LAYOUT1 TYPE LVC_S_LAYO.
*- Fieldcatalog for First and second Report
DATA: IT_FIELDCAT TYPE LVC_T_FCAT,
X_FIELDCAT TYPE LVC_S_FCAT,
IT_FIELDCAT1 TYPE LVC_T_FCAT,
X_FIELDCAT1 TYPE LVC_S_FCAT,
LS_VARI TYPE DISVARIANT.
* Selection screen
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_VBELN FOR V_LIKP-VBELN, "Delivery
S_VSTEL FOR V_LIKP-VSTEL, "Shipping Point
S_WERKS FOR V_LIPS-WERKS, "Plant
S_WADAT FOR V_VBEP-WADAT, "Pgi Date
S_TRSPG FOR V_LIKP-TRSPG OBLIGATORY,"Shp bolck Reason
S_OCHRC FOR V_VEKP-ZZOCHOLDRC MATCHCODE OBJECT
ZZOCHOLDRC, "OC Reason Code
S_USERID FOR V_VBAK-ZZREP_USERID1."Rep User ID
SELECTION-SCREEN END OF BLOCK B1.
* START-OF_SELECTION
START-OF-SELECTION.
CLEAR IT_LIKP.
REFRESH IT_LIKP.
SELECT VBELN
VSTEL
LFDAT
KUNNR
FROM LIKP
INTO TABLE IT_LIKP
WHERE VBELN IN S_VBELN
AND VSTEL IN S_VSTEL
AND WADAT IN S_WADAT
AND WADAT_IST = '00000000'
AND TRSPG IN S_TRSPG.
IF SY-SUBRC <> 0.
CLEAR V_FLAG.
V_FLAG = 'X'.
ENDIF.
IF V_FLAG = ' '.
**Populating the Delivery Item Data
PERFORM GET_DEL_ITEM_DATA.
**Getting the PGI DATE & USERID
PERFORM GET_USERID.
**Getting the Promise DATE & OC HOLD RC
PERFORM GET_VEKP_DATA.
**get the Reason codes
PERFORM SELECT_OCHOLDRC.
IF NOT IT_LIPS[] IS INITIAL
AND NOT IT_VBAK[] IS INITIAL
AND NOT IT_VEKP_TMP[] IS INITIAL.
** Populating the Final Internaltable
PERFORM POPULATE_FINAL_TABLE.
ENDIF.
ENDIF.
* END-OF-SELECTION.
END-OF-SELECTION.
IF NOT IT_FINAL[] IS INITIAL.
CALL SCREEN 100. "Calling the First Screen
ELSE.
MESSAGE I002 WITH 'NO DATA FOR THE SELECTION'(004).
ENDIF.
* MODULE PBO OUTPUT *
MODULE PBO OUTPUT.
DATA: LS_EDIT TYPE LVC_S_STYL, "to find the edit in output
LT_EDIT TYPE LVC_T_STYL, "to find the edit in output
V_INDEX LIKE SY-TABIX,
LS_OUTTAB TYPE T_FINAL.
SET PF-STATUS 'MAIN100'.
SET TITLEBAR 'MAIN100'.
IF G_CUSTOM_CONTAINER IS INITIAL.
**Initializing the grid and calling the fm to Display the O/P
PERFORM CREATE_AND_INIT_ALV.
ENDIF.
ENDMODULE. "PBO OUTPUT
* MODULE PAI INPUT *
MODULE PAI INPUT.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'CANC'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
* do nothing
ENDCASE.
ENDMODULE. "pai INPUT
*& Form GET_DEL_ITEM_DATA
* Populating the Delivery Item Data
FORM GET_DEL_ITEM_DATA .
IF NOT IT_LIKP[] IS INITIAL.
**-Getting the name of Ship-to-party
SELECT KUNNR
NAME1
INTO TABLE IT_KNA1
FROM KNA1
FOR ALL ENTRIES IN IT_LIKP[]
WHERE KUNNR = IT_LIKP-KUNNR.
**-Getting Delivery Item Data
SELECT VBELN
POSNR
MATNR
WERKS
ARKTX
VGBEL
VGPOS
ZZCONPATH
INTO TABLE IT_LIPS
FROM LIPS
FOR ALL ENTRIES IN IT_LIKP[]
WHERE VBELN = IT_LIKP-VBELN
AND WERKS IN S_WERKS.
ENDIF.
ENDFORM. " GET_DEL_ITEM_DATA
*& Form get_userid
* Getting the USERID
FORM GET_USERID .
IF NOT IT_LIPS[] IS INITIAL.
**-Getting the USERID
SELECT VBELN
ZZREP_USERID1
INTO TABLE IT_VBAK
FROM VBAK
FOR ALL ENTRIES IN IT_LIPS[]
WHERE VBELN = IT_LIPS-VGBEL
AND ZZREP_USERID1 IN S_USERID.
ENDIF.
ENDFORM. " get_userid
*& Form populate_final_table
* Populating the Final Internaltable
FORM POPULATE_FINAL_TABLE .
DATA: L_TABIX LIKE SY-TABIX.
CLEAR IT_FINAL.
REFRESH IT_FINAL.
SORT IT_VEKP_TMP BY ZZPROMDT ZZSONUM ZZOCHOLDRC.
DATA IT_TMP LIKE IT_VEKP OCCURS 0 WITH HEADER LINE.
DATA IT_VEKP_TMP1 LIKE IT_VEKP OCCURS 0 WITH HEADER LINE.
CLEAR IT_VEKP_TMP1[].
IT_VEKP_TMP1[] = IT_VEKP_TMP[].
LOOP AT IT_VEKP_TMP.
MOVE IT_VEKP_TMP TO IT_TMP.
CLEAR IT_TMP-EXIDV.
COLLECT IT_TMP.
ENDLOOP.
CLEAR IT_VEKP_TMP[].
IT_VEKP_TMP[] = IT_TMP[] .
LOOP AT IT_VEKP_TMP.
L_TABIX = SY-TABIX.
READ TABLE IT_VEKP_TMP1 WITH KEY INHALT = IT_VEKP_TMP-INHALT
ZZSONUM = IT_VEKP_TMP-ZZSONUM
ZZPROMDT = IT_VEKP_TMP-ZZPROMDT
ZZOCHOLDRC = IT_VEKP_TMP-ZZOCHOLDRC
VEMNG = IT_VEKP_TMP-VEMNG.
IF SY-SUBRC = 0.
IT_VEKP_TMP-EXIDV = IT_VEKP_TMP1-EXIDV.
MODIFY IT_VEKP_TMP INDEX L_TABIX.
ENDIF.
ENDLOOP.
LOOP AT IT_LIPS.
MOVE-CORRESPONDING IT_LIPS TO IT_FINAL.
READ TABLE IT_LIKP WITH KEY VBELN = IT_LIPS-VBELN.
IF SY-SUBRC = 0.
IT_FINAL-VSTEL = IT_LIKP-VSTEL.
IT_FINAL-LFDAT = IT_LIKP-LFDAT.
ENDIF.
READ TABLE IT_KNA1 WITH KEY KUNNR = IT_LIKP-KUNNR.
IF SY-SUBRC = 0.
IT_FINAL-NAME1 = IT_KNA1-NAME1.
ENDIF.
READ TABLE IT_VBAK WITH KEY VBELN = IT_LIPS-VGBEL.
IF SY-SUBRC = 0.
IT_FINAL-ZZREP_USERID1 = IT_VBAK-ZZREP_USERID1.
ENDIF.
READ TABLE IT_SONUM WITH KEY VGBEL = IT_LIPS-VGBEL
VGPOS = IT_LIPS-VGPOS.
IF SY-SUBRC = 0.
LOOP AT IT_VEKP_TMP WHERE ZZSONUM = IT_SONUM-ZZSONUM
AND INHALT = IT_LIPS-VBELN.
IF NOT IT_VEKP_TMP-ZZPROMDT+0(4) = '0000'.
IT_FINAL-ZZPROMDT = IT_VEKP_TMP-ZZPROMDT.
ELSE.
IT_FINAL-ZZPROMDT = '00000000'.
ENDIF.
IT_FINAL-ZZOCHOLDRC = IT_VEKP_TMP-ZZOCHOLDRC.
IT_FINAL-VEMNG = IT_VEKP_TMP-VEMNG.
IT_FINAL-ZZSONUM = IT_VEKP_TMP-ZZSONUM.
IT_FINAL-EXIDV = IT_VEKP_TMP-EXIDV.
APPEND IT_FINAL.
ENDLOOP.
IF SY-SUBRC <> 0.
IT_FINAL-ZZPROMDT = '00000000'.
IT_FINAL-ZZOCHOLDRC = ' '.
IT_FINAL-VEMNG = ' '.
IT_FINAL-FLAG = 'X'.
APPEND IT_FINAL.
CLEAR IT_FINAL.
ENDIF.
ENDIF.
ENDLOOP.
DELETE IT_FINAL WHERE ZZOCHOLDRC NOT IN S_OCHRC[].
DELETE IT_FINAL WHERE ZZREP_USERID1 NOT IN S_USERID[].
DELETE IT_FINAL WHERE WERKS NOT IN S_WERKS[].
IF NOT IT_ZSDOCHOLD[] IS INITIAL.
LOOP AT IT_FINAL.
READ TABLE IT_ZSDOCHOLD WITH KEY ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC.
IF SY-SUBRC = 0.
IT_FINAL-ZZRCDESC = IT_ZSDOCHOLD-ZZRCDESC.
MODIFY IT_FINAL.
ENDIF.
ENDLOOP.
ENDIF.
IT_FINAL_TMP[] = IT_FINAL[].
CLEAR IT_FINAL.
ENDFORM. " populate_final_table
*& Form get_vekp_data
* Populating Promise Date and Order Control Hold Reason Code
FORM GET_VEKP_DATA .
CLEAR: IT_SONUM,IT_VEKP,IT_VEKP_TMP.
REFRESH: IT_SONUM,IT_VEKP,IT_VEKP_TMP.
LOOP AT IT_LIPS.
MOVE-CORRESPONDING IT_LIPS TO IT_SONUM.
CONCATENATE IT_LIPS-VGBEL IT_LIPS-VGPOS INTO IT_SONUM-ZZSONUM.
APPEND IT_SONUM.
CLEAR IT_SONUM.
ENDLOOP.
IF NOT IT_SONUM[] IS INITIAL.
SELECT EXIDV
INHALT
ZZSONUM
ZZPROMDT
ZZOCHOLDRC
INTO TABLE IT_VEKP
FROM VEKP
FOR ALL ENTRIES IN IT_SONUM[]
WHERE ZZSONUM = IT_SONUM-ZZSONUM
AND ZZOCHOLDRC IN S_OCHRC.
SELECT EXIDV INHALT VEMNG
ZZSONUM
INTO TABLE IT_QUANT
FROM ZVEKPO
FOR ALL ENTRIES IN IT_SONUM[]
WHERE ZZSONUM = IT_SONUM-ZZSONUM.
IF SY-SUBRC = 0.
LOOP AT IT_VEKP.
READ TABLE IT_QUANT WITH KEY EXIDV = IT_VEKP-EXIDV
INHALT = IT_VEKP-INHALT
ZZSONUM = IT_VEKP-ZZSONUM.
IF SY-SUBRC = 0.
IT_VEKP-VEMNG = IT_QUANT-VEMNG.
MODIFY IT_VEKP.
ENDIF.
ENDLOOP.
IT_VEKP_TMP[] = IT_VEKP[].
SELECT ZZOCHOLDRC
ZZRCDESC
INTO TABLE IT_ZSDOCHOLD
FROM ZSD_OC_HOLD
FOR ALL ENTRIES IN IT_VEKP[]
WHERE ZZOCHOLDRC = IT_VEKP-ZZOCHOLDRC.
ENDIF.
ENDIF.
ENDFORM. " get_vekp_data
*& Form SELECT_OCHOLDRC
* Selecting the Reason Codes and Descriptions
FORM SELECT_OCHOLDRC .
SELECT *
FROM ZSD_OC_HOLD
INTO TABLE IT_OCRC.
ENDFORM. " select_OCHOLDRC
*& Form CREATE_AND_INIT_ALV
* Creating the ALV grid and initializing
FORM CREATE_AND_INIT_ALV .
DATA: LT_EXCLUDE TYPE UI_FUNCTIONS.
CREATE OBJECT G_CUSTOM_CONTAINER
EXPORTING CONTAINER_NAME = G_CONTAINER1.
CREATE OBJECT G_GRID
EXPORTING I_PARENT = G_CUSTOM_CONTAINER.
* Set a titlebar for the grid control
GS_LAYOUT-STYLEFNAME = 'HANDLE_STYLE'.
GS_LAYOUT-GRID_TITLE = TEXT-003.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-NO_ROWMARK = 'X'.
GS_LAYOUT-ZEBRA = SPACE."'X'.
GS_LAYOUT-INFO_FNAME = SPACE.
GS_LAYOUT-CTAB_FNAME = SPACE.
CALL METHOD G_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
CREATE OBJECT G_HANDLER.
SET HANDLER G_HANDLER->HANDLE_USER_COMMAND FOR G_GRID.
SET HANDLER G_HANDLER->HANDLE_DOUBLE_CLICK FOR G_GRID.
SET HANDLER G_HANDLER->HANDLE_HOTSPOT_CLICK FOR G_GRID.
SET HANDLER G_HANDLER->HANDLE_DATA_CHANGED FOR G_GRID.
SET HANDLER G_HANDLER->HANDLE_TOOLBAR FOR G_GRID.
* setting focus for created grid control
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING
CONTROL = G_GRID.
* Build fieldcat and set editable for date and reason code
* edit enabled. Assign a handle for the dropdown listbox.
PERFORM BUILD_FIELDCAT.
* Optionally restrict generic functions to 'change only'.
* (The user shall not be able to add new lines).
PERFORM EXCLUDE_TB_FUNCTIONS CHANGING LT_EXCLUDE.
PERFORM DISABLE_EDIT_FIELDS.
**Vaiant to save the layout
LS_VARI-REPORT = SY-REPID.
LS_VARI-HANDLE = SPACE.
LS_VARI-LOG_GROUP = SPACE.
LS_VARI-USERNAME = SPACE.
LS_VARI-VARIANT = SPACE.
LS_VARI-TEXT = SPACE.
LS_VARI-DEPENDVARS = SPACE.
* Define a drop down table.
PERFORM SET_DRDN_TABLE.
**Calling the Method for ALV output
CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IT_TOOLBAR_EXCLUDING = LT_EXCLUDE
IS_VARIANT = LS_VARI
IS_LAYOUT = GS_LAYOUT
I_SAVE = 'A'
CHANGING
IT_FIELDCATALOG = IT_FIELDCAT
IT_OUTTAB = IT_FINAL[].
* Set editable cells to ready for input initially
CALL METHOD G_GRID->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = 1.
CALL METHOD G_GRID->SET_TOOLBAR_INTERACTIVE.
ENDFORM. "CREATE_AND_INIT_ALV
*& Form EXCLUDE_TB_FUNCTIONS
* Excluding the ALV functions
FORM EXCLUDE_TB_FUNCTIONS CHANGING PT_EXCLUDE TYPE UI_FUNCTIONS.
* Only allow to change data not to create new entries (exclude
* generic functions).
DATA LS_EXCLUDE TYPE UI_FUNC.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
ENDFORM. " EXCLUDE_TB_FUNCTIONS
*& Form build_fieldcat
* Fieldcatalog
FORM BUILD_FIELDCAT .
DATA:L_POS TYPE I VALUE 1.
CLEAR: L_POS.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Shpt'(012).
X_FIELDCAT-FIELDNAME = 'VSTEL'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '4'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Con Path'(013).
X_FIELDCAT-FIELDNAME = 'ZZCONPATH'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '8'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Plant'(014).
X_FIELDCAT-FIELDNAME = 'WERKS'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '5'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Del Date'(015).
X_FIELDCAT-FIELDNAME = 'LFDAT'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '10'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-COLTEXT = 'Prom Date'(016).
* X_FIELDCAT-SCRTEXT_M = 'Prom Date'(016).
X_FIELDCAT-FIELDNAME = 'ZZPROMDT'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '10'.
X_FIELDCAT-EMPHASIZE = ' '.
X_FIELDCAT-EDIT = 'X'.
* X_FIELDCAT-HOTSPOT = 'X'.
X_FIELDCAT-DATATYPE = 'DATS'.
X_FIELDCAT-INTTYPE = 'D'.
X_FIELDCAT-REF_TABLE = 'VEKP'.
X_FIELDCAT-REF_FIELD = 'ZZPROMDT'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Ship-To-Name'(017).
X_FIELDCAT-FIELDNAME = 'NAME1'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '40'.
X_FIELDCAT-EMPHASIZE = ' '.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'SalesOrder#'(018).
X_FIELDCAT-FIELDNAME = 'VGBEL'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '10'.
X_FIELDCAT-EMPHASIZE = ' '.
X_FIELDCAT-HOTSPOT = 'X'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Item'(019).
X_FIELDCAT-FIELDNAME = 'VGPOS'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-EMPHASIZE = ' '.
X_FIELDCAT-OUTPUTLEN = '5'.
X_FIELDCAT-HOTSPOT = ' '.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Material'(020).
X_FIELDCAT-FIELDNAME = 'MATNR'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '18'.
X_FIELDCAT-EMPHASIZE = ' '.
X_FIELDCAT-HOTSPOT = ' '.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Materal Desc'(021).
X_FIELDCAT-FIELDNAME = 'ARKTX'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '40'.
X_FIELDCAT-EMPHASIZE = ' '.
X_FIELDCAT-HOTSPOT = ' '.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'D.O.Item Qty'(022).
X_FIELDCAT-FIELDNAME = 'VEMNG'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '13'.
X_FIELDCAT-EMPHASIZE = ' '.
X_FIELDCAT-HOTSPOT = ' '.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'RC'(023).
X_FIELDCAT-FIELDNAME = 'ZZOCHOLDRC'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '3'.
X_FIELDCAT-EDIT = 'X'.
X_FIELDCAT-DRDN_HNDL = '1'.
X_FIELDCAT-DRDN_ALIAS = 'X'.
* X_FIELDCAT-DRDN_FIELD = 'DROP_DOWN_HANDLE'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
* X_FIELDCAT-SCRTEXT_M = 'OC HOLD RC Desc'.
* X_FIELDCAT-FIELDNAME = 'ZZRCDESC'.
* X_FIELDCAT-TABNAME = 'IT_FINAL'.
* X_FIELDCAT-COL_POS = L_POS.
* X_FIELDCAT-OUTPUTLEN = '20'.
* X_FIELDCAT-EDIT = 'X'.
* X_FIELDCAT-HOTSPOT = ' '.
* APPEND X_FIELDCAT TO IT_FIELDCAT.
* CLEAR X_FIELDCAT.
* L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Delivery'(024).
X_FIELDCAT-FIELDNAME = 'VBELN'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '10'.
X_FIELDCAT-EMPHASIZE = ' '.
X_FIELDCAT-HOTSPOT = 'X'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Item'(025).
X_FIELDCAT-FIELDNAME = 'POSNR'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '5'.
X_FIELDCAT-EMPHASIZE = ' '.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SCRTEXT_M = 'Rep User Id'(026).
X_FIELDCAT-FIELDNAME = 'ZZREP_USERID1'.
X_FIELDCAT-TABNAME = 'IT_FINAL'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-OUTPUTLEN = '11'.
X_FIELDCAT-EMPHASIZE = ' '.
X_FIELDCAT-HOTSPOT = ' '.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
ENDFORM. " build_fieldcat
*& Form set_drdn_table
* Setting the Drop down for the Reason code
FORM SET_DRDN_TABLE.
DATA: X_OCRC LIKE LINE OF IT_OCRC.
DATA:LT_DRAL TYPE LVC_T_DRAL,
LS_DRAL TYPE LVC_S_DRAL,
L_DRDN(25) TYPE C.
LOOP AT IT_OCRC INTO X_OCRC.
CONCATENATE X_OCRC-ZZOCHOLDRC ' ' ' ' ' ' X_OCRC-ZZRCDESC INTO L_DRDN
SEPARATED BY SPACE.
* First listbox (handle '1').
LS_DRAL-HANDLE = '1'.
LS_DRAL-VALUE = L_DRDN.
LS_DRAL-INT_VALUE = X_OCRC-ZZOCHOLDRC.
APPEND LS_DRAL TO LT_DRAL.
ENDLOOP.
**Setting the Drop down table for Reason Code
CALL METHOD G_GRID->SET_DROP_DOWN_TABLE
EXPORTING
IT_DROP_DOWN_ALIAS = LT_DRAL.
ENDFORM. " set_drdn_table
*& Form handle_hotspot_click
* Handling the Hotspot
FORM HANDLE_HOTSPOT_CLICK USING I_ROW_ID TYPE LVC_S_ROW
I_COLUMN_ID TYPE LVC_S_COL
IS_ROW_NO TYPE LVC_S_ROID.
READ TABLE IT_FINAL INDEX I_ROW_ID .
IF SY-SUBRC = 0.
IF I_COLUMN_ID-FIELDNAME = 'VGBEL'.
PERFORM FORM_REFRESH.
SET PARAMETER ID 'AUN' FIELD IT_FINAL-VGBEL.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
**if user clicks on Delivery
IF I_COLUMN_ID-FIELDNAME = 'VBELN'.
PERFORM FORM_REFRESH.
SET PARAMETER ID 'VL' FIELD IT_FINAL-VBELN.
CALL TRANSACTION 'VL02N' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
ENDFORM . "handle_hotspot_click
*& Form FORM_REFRESH for first list
FORM FORM_REFRESH .
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY
EXCEPTIONS
FINISHED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM . "FORM_REFRESH
*& Form event_ucomm
* Handling User Commands
FORM EVENT_UCOMM USING E_UCOMM TYPE SY-UCOMM.
SORT IT_FINAL.
SORT IT_FINAL_TMP.
CASE E_UCOMM.
WHEN 'BACK'.
CALL METHOD G_GRID->CHECK_CHANGED_DATA
IMPORTING
E_VALID = L_VALID.
CALL METHOD CL_GUI_CFW=>FLUSH.
PERFORM BACK_OPERATION.
WHEN 'SAVE'.
CALL METHOD G_GRID->CHECK_CHANGED_DATA
IMPORTING
E_VALID = L_VALID.
CALL METHOD CL_GUI_CFW=>FLUSH.
PERFORM SAVE_OPERATION.
ENDCASE.
ENDFORM. " event_ucomm
*& Form back_operation
* When User do Back operation
FORM BACK_OPERATION .
**When User Press back Button
* WHEN 'BACK'.
DATA: L_ANS TYPE C,
L_TABIX TYPE SY-TABIX,
L_SONUM TYPE VEKP-ZZSONUM,
X_OCRC LIKE LINE OF IT_OCRC.
**Checking for the Data Change
IF IT_FINAL_TMP[] <> IT_FINAL[].
PERFORM CONFIRM_BEFORE_LEAVE CHANGING L_ANS.
IF L_ANS = '1' .
LOOP AT IT_FINAL.
L_TABIX = SY-TABIX.
READ TABLE IT_FINAL_TMP INDEX L_TABIX.
IF SY-SUBRC = 0.
IF IT_FINAL <> IT_FINAL_TMP.
*-Validate Date Field.
PERFORM VALIDATE_AND_CONVERT_DATE.
**Modifying the VEKP table based on changes
IF NOT IT_FINAL_TMP-EXIDV IS INITIAL.
UPDATE VEKP SET ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC
ZZPROMDT = IT_FINAL-ZZPROMDT
WHERE EXIDV = IT_FINAL_TMP-EXIDV
AND INHALT = IT_FINAL-VBELN.
IF SY-SUBRC = 0.
COMMIT WORK AND WAIT.
ENDIF.
ELSE.
UPDATE VEKP SET ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC
ZZPROMDT = IT_FINAL-ZZPROMDT
WHERE INHALT = IT_FINAL-VBELN
AND ZZSONUM = IT_FINAL_TMP-ZZSONUM
AND ZZPROMDT = IT_FINAL_TMP-ZZPROMDT
AND ZZOCHOLDRC = IT_FINAL_TMP-ZZOCHOLDRC.
IF SY-SUBRC = 0.
COMMIT WORK AND WAIT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
LEAVE TO SCREEN 0.
ELSEIF L_ANS = '2'.
LEAVE TO SCREEN 0.
ENDIF.
ELSE.
LEAVE TO SCREEN 0.
ENDIF.
ENDFORM. " back_operation
*& Form CONFIRM_BEFORE_LEAVE
* Popup for Confirm
FORM CONFIRM_BEFORE_LEAVE CHANGING P_ANS TYPE C.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Confirm'(007)
TEXT_QUESTION = 'Do you wish to save your data first?'(006)
TEXT_BUTTON_1 = 'Yes'(008)
ICON_BUTTON_1 = 'ICON_OKAY'
TEXT_BUTTON_2 = 'No'(010)
ICON_BUTTON_2 = 'ICON_CANCEL'
DEFAULT_BUTTON = '1'
DISPLAY_CANCEL_BUTTON = 'X'
START_COLUMN = 25
START_ROW = 6
IMPORTING
ANSWER = P_ANS
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " CONFIRM_BEFORE_LEAVE
*& Form VALIDATE_AND_CONVERT_DATE
* Validating and Converting the date
FORM VALIDATE_AND_CONVERT_DATE .
DATA : L_DATE LIKE SY-DATUM.
CALL FUNCTION 'CONVERT_DATE_INPUT'
EXPORTING
INPUT = IT_FINAL-ZZPROMDT
IMPORTING
OUTPUT = L_DATE
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
WRONG_FORMAT_IN_INPUT = 2
OTHERS = 3.
IF SY-SUBRC = 0.
WRITE L_DATE TO IT_FINAL-ZZPROMDT.
MODIFY IT_FINAL.
ENDIF.
ENDFORM. " VALIDATE_AND_CONVERT_DATE
*& Module STATUS_0200 OUTPUT
* PBO of Second List
MODULE STATUS_0200 OUTPUT.
SET PF-STATUS 'MAIN100'.
SET TITLEBAR 'MAIN100'.
IF G_CUSTOM_CONTAINER1 IS INITIAL.
**Initializing the second Grid
PERFORM CREATE_AND_INIT_ALV1.
ENDIF.
ENDMODULE. " STATUS_0200 OUTPUT
*& Module USER_COMMAND_0200 INPUT
* PAI of Second list
MODULE USER_COMMAND_0200 INPUT.
DATA: L_ANS.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'CANC'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
* do nothing
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
*& Form CREATE_AND_INIT_ALV1
* Creating the Grid for Second List
FORM CREATE_AND_INIT_ALV1 .
DATA: LT_EXCLUDE TYPE UI_FUNCTIONS.
CREATE OBJECT G_CUSTOM_CONTAINER1
EXPORTING CONTAINER_NAME = G_CONTAINER2.
CREATE OBJECT G_GRID1
EXPORTING I_PARENT = G_CUSTOM_CONTAINER1.
CALL METHOD G_GRID1->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
CREATE OBJECT G_HANDLER1.
SET HANDLER G_HANDLER1->HANDLE_USER_COMMAND FOR G_GRID1.
SET HANDLER G_HANDLER1->HANDLE_TOOLBAR FOR G_GRID1.
GS_LAYOUT1-GRID_TITLE = TEXT-003.
GS_LAYOUT1-CWIDTH_OPT = 'X'.
GS_LAYOUT1-NO_ROWMARK = 'X'.
GS_LAYOUT1-ZEBRA = SPACE."'X'.
GS_LAYOUT1-INFO_FNAME = SPACE.
GS_LAYOUT1-CTAB_FNAME = SPACE.
**Vaiant to save the layout
LS_VARI-REPORT = SY-REPID.
LS_VARI-HANDLE = SPACE.
LS_VARI-LOG_GROUP = SPACE.
LS_VARI-USERNAME = SPACE.
LS_VARI-VARIANT = SPACE.
LS_VARI-TEXT = SPACE.
LS_VARI-DEPENDVARS = SPACE.
* setting focus for created grid control
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING
CONTROL = G_GRID1.
PERFORM EXCLUDE_TB_FUNCTIONS CHANGING LT_EXCLUDE.
* Define a drop down table.
PERFORM SET_DRDN_TABLE1.
PERFORM FORM_REFRESH.
CALL METHOD G_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IT_TOOLBAR_EXCLUDING = LT_EXCLUDE
IS_VARIANT = LS_VARI
I_SAVE = 'A'
IS_LAYOUT = GS_LAYOUT1
CHANGING
IT_FIELDCATALOG = IT_FIELDCAT1
IT_OUTTAB = IT_VEKP1[].
** Set editable cells to ready for input initially
CALL METHOD G_GRID1->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = 1.
CALL METHOD G_GRID1->SET_TOOLBAR_INTERACTIVE.
ENDFORM. "CREATE_AND_INIT_ALV1
*& Form GET_HU_DATA
* Get Handling Units Data
FORM GET_HU_DATA USING X_FINAL TYPE T_FINAL.
CLEAR IT_VEKP1.
REFRESH IT_VEKP1.
READ TABLE IT_SONUM WITH KEY VGBEL = X_FINAL-VGBEL
VGPOS = X_FINAL-VGPOS.
IF SY-SUBRC = 0.
LOOP AT IT_VEKP WHERE INHALT = X_FINAL-VBELN
AND ZZSONUM = IT_SONUM-ZZSONUM
AND ZZPROMDT = X_FINAL-ZZPROMDT
AND ZZOCHOLDRC = X_FINAL-ZZOCHOLDRC.
IT_VEKP1-EXIDV = IT_VEKP-EXIDV.
IT_VEKP1-ZZSONUM = IT_VEKP-ZZSONUM.
IF NOT IT_VEKP-ZZPROMDT+0(4) = '0000'.
IT_VEKP1-ZZPROMDT = IT_VEKP-ZZPROMDT.
ELSE.
IT_VEKP1-ZZPROMDT = '00000000'.
ENDIF.
IT_VEKP1-ZZOCHOLDRC = IT_VEKP-ZZOCHOLDRC.
APPEND IT_VEKP1.
ENDLOOP.
ENDIF.
IT_VEKP1_TMP[] = IT_VEKP1[].
ENDFORM. " GET_HU_DATA
*& Form POPULATE_FIELDCAT2
* Populating the Field Catalog for Second list
FORM POPULATE_FIELDCAT2 .
CLEAR: IT_FIELDCAT1,X_FIELDCAT1.
REFRESH IT_FIELDCAT1.
DATA:L_POS TYPE I VALUE 1.
CLEAR: L_POS.
L_POS = L_POS + 1.
X_FIELDCAT1-SCRTEXT_M = 'External Handling Unit Identification'(027).
X_FIELDCAT1-FIELDNAME = 'EXIDV'.
X_FIELDCAT1-TABNAME = 'IT_VEKP1'.
X_FIELDCAT1-COL_POS = L_POS.
X_FIELDCAT1-EDIT = ' '.
APPEND X_FIELDCAT1 TO IT_FIELDCAT1.
CLEAR X_FIELDCAT1.
L_POS = L_POS + 1.
* X_FIELDCAT1-SCRTEXT_M = 'Prom Date'(016).
X_FIELDCAT1-COLTEXT = 'Promise Date'(033).
X_FIELDCAT1-FIELDNAME = 'ZZPROMDT'.
X_FIELDCAT1-TABNAME = 'IT_VEKP1'.
X_FIELDCAT1-COL_POS = L_POS.
X_FIELDCAT1-OUTPUTLEN = '12'.
X_FIELDCAT1-EMPHASIZE = ' '.
X_FIELDCAT1-EDIT = 'X'.
X_FIELDCAT1-DATATYPE = 'DATS'.
X_FIELDCAT1-INTTYPE = 'D'.
X_FIELDCAT1-REF_TABLE = 'VEKP'.
X_FIELDCAT1-REF_FIELD = 'ZZPROMDT'.
APPEND X_FIELDCAT1 TO IT_FIELDCAT1.
CLEAR X_FIELDCAT1.
L_POS = L_POS + 1.
X_FIELDCAT1-SCRTEXT_M = 'Order Control Hold Reason Code'(029).
X_FIELDCAT1-FIELDNAME = 'ZZOCHOLDRC'.
X_FIELDCAT1-TABNAME = 'IT_VEKP1'.
X_FIELDCAT1-COL_POS = L_POS.
X_FIELDCAT1-DRDN_HNDL = '1'.
X_FIELDCAT1-DRDN_ALIAS = 'X'.
X_FIELDCAT1-EDIT = 'X'.
APPEND X_FIELDCAT1 TO IT_FIELDCAT1.
CLEAR X_FIELDCAT1.
ENDFORM. " POPULATE_FIELDCAT2
*& Form set_drdn_table
* Drop Down for second report
FORM SET_DRDN_TABLE1.
DATA:X_OCRC LIKE LINE OF IT_OCRC.
DATA:LT_DRAL TYPE LVC_T_DRAL,
LS_DRAL TYPE LVC_S_DRAL,
L_DRDN(25) TYPE C.
LOOP AT IT_OCRC INTO X_OCRC.
CONCATENATE X_OCRC-ZZOCHOLDRC ' ' ' ' ' ' X_OCRC-ZZRCDESC INTO
L_DRDN
SEPARATED BY SPACE.
* First listbox (handle '1').
LS_DRAL-HANDLE = '1'.
LS_DRAL-VALUE = L_DRDN.
LS_DRAL-INT_VALUE = X_OCRC-ZZOCHOLDRC.
APPEND LS_DRAL TO LT_DRAL.
ENDLOOP.
CALL METHOD G_GRID1->SET_DROP_DOWN_TABLE
EXPORTING
IT_DROP_DOWN_ALIAS = LT_DRAL.
ENDFORM. " set_drdn_table
*& Form save_operation
* Saving the changes
FORM SAVE_OPERATION .
DATA: L_TABIX LIKE SY-TABIX.
**CHECKING FOR THE DATA CHANGE
IF IT_FINAL_TMP[] <> IT_FINAL[].
LOOP AT IT_FINAL.
L_TABIX = SY-TABIX.
READ TABLE IT_FINAL_TMP INDEX L_TABIX.
IF SY-SUBRC = 0.
IF IT_FINAL <> IT_FINAL_TMP.
*-Validate Date Field.
PERFORM VALIDATE_AND_CONVERT_DATE.
**Modifying the VEKP table based on changes
IF NOT IT_FINAL_TMP-EXIDV IS INITIAL.
UPDATE VEKP SET ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC
ZZPROMDT = IT_FINAL-ZZPROMDT
WHERE EXIDV = IT_FINAL_TMP-EXIDV
AND INHALT = IT_FINAL-VBELN.
IF SY-SUBRC = 0.
V_DATA_CHANGE = ' '.
COMMIT WORK AND WAIT.
ENDIF.
ELSE.
UPDATE VEKP SET ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC
ZZPROMDT = IT_FINAL-ZZPROMDT
WHERE INHALT = IT_FINAL-VBELN
AND ZZSONUM = IT_FINAL_TMP-ZZSONUM
AND ZZPROMDT = IT_FINAL_TMP-ZZPROMDT
AND ZZOCHOLDRC = IT_FINAL_TMP-ZZOCHOLDRC.
IF SY-SUBRC = 0.
V_DATA_CHANGE = ' '.
COMMIT WORK AND WAIT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
PERFORM GET_VEKP_DATA .
PERFORM POPULATE_FINAL_TABLE.
PERFORM DISABLE_EDIT_FIELDS.
PERFORM FORM_REFRESH.
MESSAGE S002 WITH 'Data Saved'(011).
ENDIF.
ENDFORM. " save_operation
*& Form BACK_SECOND_LIST
* When User Press Back in Second list
FORM BACK_SECOND_LIST .
DATA:X_OCRC LIKE LINE OF IT_OCRC.
**Checking for the Change in the data
IF IT_VEKP1_TMP[] <> IT_VEKP1[].
PERFORM CONFIRM_BEFORE_LEAVE CHANGING L_ANS.
IF L_ANS = '1'.
LOOP AT IT_VEKP1.
READ TABLE IT_VEKP1_TMP WITH KEY EXIDV = IT_VEKP1-EXIDV.
IF SY-SUBRC = 0.
IF IT_VEKP1_TMP <> IT_VEKP1.
UPDATE VEKP SET ZZPROMDT = IT_VEKP1-ZZPROMDT
ZZOCHOLDRC = IT_VEKP1-ZZOCHOLDRC
WHERE EXIDV = IT_VEKP1-EXIDV.
IF SY-SUBRC = 0.
COMMIT WORK.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
PERFORM GET_VEKP_DATA .
CLEAR IT_VEKP1_TMP.
REFRESH IT_VEKP1_TMP.
IT_VEKP1_TMP[] = IT_VEKP1[].
PERFORM POPULATE_FINAL_TABLE.
PERFORM DISABLE_EDIT_FIELDS.
PERFORM FORM_REFRESH.
MESSAGE S002 WITH 'Data Saved'(011).
PERFORM CLEAR_GRID_CONTAINER.
ELSEIF L_ANS = '2'.
PERFORM CLEAR_GRID_CONTAINER.
ENDIF.
ELSE.
PERFORM CLEAR_GRID_CONTAINER.
ENDIF.
ENDFORM. " BACK_SECOND_LIST
*& Form clear_grid_container
* Clearing the Grid
FORM CLEAR_GRID_CONTAINER .
CALL METHOD G_GRID1->FREE.
CALL METHOD G_CUSTOM_CONTAINER1->FREE.
CALL METHOD CL_GUI_CFW=>FLUSH.
CLEAR G_CUSTOM_CONTAINER1.
CLEAR G_GRID1.
CLEAR G_HANDLER1.
LEAVE TO SCREEN 0.
ENDFORM. " clear_grid_container
*& Form disable_edit_fields
* Disable edit fields
FORM DISABLE_EDIT_FIELDS .
**Changing the Edit option for the records which they don't have
**Entries in HU level
LOOP AT IT_FINAL INTO LS_OUTTAB WHERE FLAG = 'X'.
V_INDEX = SY-TABIX.
LS_EDIT-FIELDNAME = 'ZZOCHOLDRC'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 = SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 8.
INSERT LS_EDIT INTO TABLE LT_EDIT.
LS_EDIT-FIELDNAME = 'ZZRCDESC'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 = SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 8.
INSERT LS_EDIT INTO TABLE LT_EDIT.
LS_EDIT-FIELDNAME = 'ZZPROMDT'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 = SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 8.
INSERT LS_EDIT INTO TABLE LT_EDIT.
INSERT LINES OF LT_EDIT INTO TABLE LS_OUTTAB-HANDLE_STYLE.
MODIFY IT_FINAL INDEX V_INDEX FROM LS_OUTTAB TRANSPORTING
HANDLE_STYLE DROP_DOWN_HANDLE.
MODIFY IT_FINAL_TMP INDEX V_INDEX FROM LS_OUTTAB TRANSPORTING
HANDLE_STYLE DROP_DOWN_HANDLE.
ENDLOOP.
ENDFORM. " disable_edit_fields
*& Form event_ucomm
* Handling User Commands
FORM EVENT_UCOMM1 USING E_UCOMM TYPE SY-UCOMM.
SORT IT_VEKP1.
SORT IT_VEKP1_TMP.
CASE E_UCOMM.
WHEN'BACK'.
**Checking for the change in the data of the output
CALL METHOD G_GRID1->CHECK_CHANGED_DATA
IMPORTING
E_VALID = L_VALID1.
CALL METHOD CL_GUI_CFW=>FLUSH.
PERFORM BACK_SECOND_LIST.
WHEN 'SAVE'.
CALL METHOD G_GRID1->CHECK_CHANGED_DATA
IMPORTING
E_VALID = L_VALID1.
CALL METHOD CL_GUI_CFW=>FLUSH.
**Checking for the Change in the data
IF IT_VEKP1_TMP[] <> IT_VEKP1[].
LOOP AT IT_VEKP1.
READ TABLE IT_VEKP1_TMP WITH KEY EXIDV = IT_VEKP1-EXIDV.
IF SY-SUBRC = 0.
IF IT_VEKP1_TMP <> IT_VEKP1.
UPDATE VEKP SET ZZPROMDT = IT_VEKP1-ZZPROMDT
ZZOCHOLDRC = IT_VEKP1-ZZOCHOLDRC
WHERE EXIDV = IT_VEKP1-EXIDV.
IF SY-SUBRC = 0.
COMMIT WORK.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
PERFORM GET_VEKP_DATA .
CLEAR IT_VEKP1_TMP.
REFRESH IT_VEKP1_TMP.
IT_VEKP1_TMP[] = IT_VEKP1[].
PERFORM POPULATE_FINAL_TABLE.
PERFORM DISABLE_EDIT_FIELDS.
PERFORM FORM_REFRESH.
MESSAGE S002 WITH 'Data Saved'(011).
ENDIF.
WHEN OTHERS.
* do nothing
ENDCASE.
ENDFORM. " event_ucomm1
check this code , in that i have used and implemented..using classes -
Hi,
I want to run ALV in back ground.
I have two check boxes in selection screen.
One is for back griund execution and another is for direct execution.
There will be data base updation if i run in back groud or direct execution.
So how can i run program in back ground if click the check box.
Rgds,
Sunil.KWhen you are running the program in background, the default value of the checkbox should be X or you should create a varaint by clicking the checkbox. Then you need to schedule a background job with that variant. Database updation will happoen even if you schedule it in background.
I hope it solves your problem, if not please revert.
Best Regards,
Vibha
*Please mark all the helpful answers -
ALV Grid Problem - User command Back Cancel Exit
Hi Guys,
I was trying to use the ALV grid and my problem is, on the grid display, when i try to hit the back button or exit or cancel, then a blank screen appears and i need to hit either back or other buttons one more time to go back to the selection screen.
Is there any thing I am missing here? Please suggest me the solution.
Thanks in advance,
Srinivas.hi srinivas,
we have 2 options in this case.
1) i think ur using EVENTS_GET function module. If u use sometimes we are facing this kind of problem. i think accroding to my knowliege its bug in SAP....
2) See in debug mode what is the user command for this back button everty time USERCOMMAND FOR BACK BUTTON not 'BACK' .If it ios correct plaese add the code for back button in user command event.
if u dont want to face that problem remove that events_get fm and write the code manually. i am not sure abt ur code.
i hope u got the point what i am saying.
Thanks,
Maheedhar -
Hi,
My programs output displays an ALV Grid. Am selecting multiple rows on the grid through multi select button and with the help of a button on tool bar i could delete the rows selected in ALV grid. But when i pressed on back button which is present in the Standard tool bar it is not going to selection screen. it is displaying the sceen which is before deletion of the records that is previous screen is displayed insted of selection screen.
I need to display selection screen when i press back button in the standard tool bar it should not show previous screen it has to show first screen that is selection screen.
Thnaks
<<removed_by_moderator>>
Edited by: Vijay Babu Dudla on Feb 23, 2009 9:38 AMhi
try this,
when 'BACK'.
leave to screen scrnnum.
scrnnum - screen number of your selection screen. you can find your screen num by clicking system->status menu in your selection screen.
feel free to revert back if you still have doubts.
regards
mano
Maybe you are looking for
-
How to use traffic lights concept in alv in webdynpro abap
Hai , How to use traffic lights concept for alv in webdynpro abap. If possible give me some code.
-
I've used Pagemaker for 25 years and am having some issues with InDesign. How do you make a simple white box for masking over items? Thanks.
-
Hi gurus, In the rpd, I have a condition where If (received_date- current_date) < X then .... the received date in the database is numeric. Ex : 20040810 How do I change the date format to match the default current date in the expression builder. Tha
-
Where can I find iPhoto 4.0? My iMac came with iPhoto 2.0 and I foolishly did not keep up with the updates so, now I need 4.0 in order to install 4.0.3 so I can update to 6.0. iMac G4 Mac OS X (10.4.8)
-
Unwanted starting of taskflows
Hi, I have unbelievable problem with taskflows. I am using JD Studio Edition Version 11.1.1.5.0 on Weblogic 11.1.1.5 I have page with 4 popups (new, assign, assume, return). Each popup has dialog and region with taskflow. Popup and region are binded