Processing of code in AT LINE-SELECTION section
Hello,
AT LINE-SELECTION.
PERFORM disp_blkd_bill.
PERFORM start_of_selection.
LEAVE SCREEN.
In the code above the first FORM routine displays an ALV list. The second FORM routine needs to display a WRITE statement. What happens is the first FORM routine is executed successfully. When I hit the BACK button I want the second FORM routine to execute and then the LEAVE SCREEN command, but it never executes the second FORM routine , it directly executes the LEAVE SCREEN command.
Is there a way to execute the second FORM routine before the LEAVE SCREEN command?
Thanks,
ALAM.
Hi Ravi,
Ravi,
Thanks for the response.
The requirement is :
When the START OF SELECTION section is executed a write statement displaying the number of incomplete sales Orders is displayed. When you click on that output statement(as in drill down repoting) the code below comes into picture:
AT LINE-SELECTION.
PERFORM disp_blkd_bill.
PERFORM start_of_selection.
LEAVE SCREEN.
Now the alv list displays incomplete Sales Orders. The user using the HOTSPOT feature completes/processes the sales Order and wants the ALV report to refresh when she hits the back button and returns to the ALV list which I do so. Now when she again hits the back button she wants to view the updated statement displaying the number of incomplete Sales orders which happens when the routine 'start_of_selection' is excuted again. But then If I do not use the LEAVE SCREEN command it takes her back to the old displaing the previous incomplete number of sales orders and then back to the selection screen. We do not want that old statement to be displayed on the way back to the selection screen.
Please let me know if you still need further clarifications.
Thanks,
ALAM.
Similar Messages
-
Using key strokes as command in AT LINE SELECTION section.
Hi all,
I created a small report which do a refresh every X seconds. In every refresh, the form "print_panel" is performed. In this form I used some icons as buttons of my user interface in this way:
..."skipping code that's not relevant w.r.t to the question.
SKIP TO LINE myline.
WRITE AT mycolumn(2) ICON_COLUMN_LEFT AS ICON NO-GAP.
This allows in my report to use such an expression to associate a dbl click on that icon to a certain block of code:
AT LINE-SELECTION.
DATA: FIELD(30).
GET CURSOR FIELD FIELD.
IF FIELD = 'ICON_COLUMN_LEFT'.
PERFORM myformthatdoessomething.
I'm wondering if there's a way to associate this behaviour also to a key stroke. For example, pressing the "A" key is equivalent to do a double click on that icon. How can i manage this ?
Thanks in advanceHi Ravi,
Ravi,
Thanks for the response.
The requirement is :
When the START OF SELECTION section is executed a write statement displaying the number of incomplete sales Orders is displayed. When you click on that output statement(as in drill down repoting) the code below comes into picture:
AT LINE-SELECTION.
PERFORM disp_blkd_bill.
PERFORM start_of_selection.
LEAVE SCREEN.
Now the alv list displays incomplete Sales Orders. The user using the HOTSPOT feature completes/processes the sales Order and wants the ALV report to refresh when she hits the back button and returns to the ALV list which I do so. Now when she again hits the back button she wants to view the updated statement displaying the number of incomplete Sales orders which happens when the routine 'start_of_selection' is excuted again. But then If I do not use the LEAVE SCREEN command it takes her back to the old displaing the previous incomplete number of sales orders and then back to the selection screen. We do not want that old statement to be displayed on the way back to the selection screen.
Please let me know if you still need further clarifications.
Thanks,
ALAM. -
Hello All..
1. I have created one basic list, now if i double click on any record then it should call another transaction... this is to be done using LIST PROCESSING. i need to write code in 'At Line Selection' but where to code this at line selection.
2. Also while designing selection screen i've created execute icon using
SET PF-STATUS.. but this is also appearing when basic list is being displayed.. i dont ant this to appear... no other buttons i.e.., back button, cancel are working...
Regards,
Radhi..Hi
Sample program for At Line-Selection
*& Report ZHC010F_CONFIRMATION_COMPACT *
Module PP - PRODUCTION PLANNING
REPORT ZHC010F_CONFIRMATION_COMPACT LINE-SIZE 275 LINE-COUNT 50 NO STANDARD PAGE HEADING.
TABLES : ZHT010_FORGE,
MARC.
TYPES : BEGIN OF I_CONFIRM,
ZBUDAT TYPE ZHT010_FORGE-ZBUDAT,
MATNR TYPE ZHT010_FORGE-MATNR,
PLWRK TYPE ZHT010_FORGE-PLWRK,
ZSHIFT TYPE ZHT010_FORGE-ZSHIFT,
ZWRKCE TYPE ZHT010_FORGE-ZWRKCE,
ZWIRECD TYPE ZHT010_FORGE-ZWIRECD,
ZACQTY TYPE ZHT010_FORGE-ZACQTY,
ZREQTY TYPE ZHT010_FORGE-ZREQTY,
ZSCQTY TYPE ZHT010_FORGE-ZSCQTY,
ZSEQTY TYPE ZHT010_FORGE-ZSEQTY,
ENDBIT TYPE ZHT010_FORGE-ENDBIT,
ENDBIT2 TYPE ZHT010_FORGE-ENDBIT2,
TIMLO TYPE ZHT010_FORGE-TIMLO,
ZCONFIRM TYPE ZHT010_FORGE-ZCONFIRM,
ZCONFIRMREJ TYPE ZHT010_FORGE-ZCONFIRM,
ZCONFIRMSC TYPE ZHT010_FORGE-ZCONFIRM,
ZCONFIRMSE TYPE ZHT010_FORGE-ZCONFIRM,
ZCONFIRMBIT TYPE ZHT010_FORGE-ZCONFIRM,
ZCONFIRMBIT2 TYPE ZHT010_FORGE-ZCONFIRM,
ZCONFIRMBUR TYPE ZHT010_FORGE-ZCONFIRMBUR,
TOKEN TYPE ZHT010_FORGE-TOKEN,
JONUMBER TYPE ZHT010_FORGE-JONUMBER,
CHARG TYPE ZHT010_FORGE-CHARG,
ZACCISSQTY TYPE ZHT010_FORGE-ZACCISSQTY,
ZREJISSQTY TYPE ZHT010_FORGE-ZREJISSQTY,
ZSCMISSQTY TYPE ZHT010_FORGE-ZSCMISSQTY,
ZSEMISSQTY TYPE ZHT010_FORGE-ZSEMISSQTY,
VERID TYPE ZHT010_FORGE-VERID,
MARK(1),
DELETE(1),
END OF I_CONFIRM.
TYPES: BEGIN OF TAB_TYPE,
FCODE LIKE RSMPE-FUNC,
END OF TAB_TYPE.
TYPES : BEGIN OF STR_BACKFLUSH,
MATNR LIKE ZHT010_FORGE-MATNR,
PLWRK LIKE ZHT010_FORGE-PLWRK,
GSMNG LIKE PLAF-GSMNG,
ZWRKCE LIKE ZHT010_FORGE-ZWRKCE,
ZBUDAT LIKE ZHT010_FORGE-ZBUDAT,
ZSHIFT LIKE ZHT010_FORGE-ZSHIFT,
TIMLO LIKE ZHT010_FORGE-TIMLO,
ZWIRECD LIKE ZHT010_FORGE-ZWIRECD,
ZACQTY LIKE ZHT010_FORGE-ZACQTY,
ZREQTY LIKE ZHT010_FORGE-ZREQTY,
ZSCQTY LIKE ZHT010_FORGE-ZSCQTY,
ZSEQTY LIKE ZHT010_FORGE-ZSEQTY,
ENDBIT LIKE ZHT010_FORGE-ENDBIT,
ENDBIT2 LIKE ZHT010_FORGE-ENDBIT2,
BURSLG LIKE ZHT010_FORGE-BURSLG,
TOKEN LIKE ZHT010_FORGE-TOKEN,
JONUMBER LIKE ZHT010_FORGE-JONUMBER,
CHARG LIKE ZHT010_FORGE-CHARG,
MARK ,
VERID LIKE MKAL-VERID,
END OF STR_BACKFLUSH.
DATA : REM TYPE I,
W_COUNT TYPE I VALUE 4,
WA(200),
W_ZACQTY(15),
W_ZREQTY(15),
W_ZSCQTY(15),
W_ZSEQTY(15),
W_ENDBIT(15),
W_ENDBIT2(15),
W_ACCISSQTY(15),
W_REJISSQTY(15),
W_SCMISSQTY(15),
W_SEMISSQTY(15),
W_CONFIRM,
W_CONFIRMREJ,
W_CONFIRMSC,
W_CONFIRMSE,
W_VERID LIKE ZHT010_FORGE-VERID,
W_START_LINE TYPE I,
W_END_LINE TYPE I,
W_START_COUNT TYPE I,
W_END_COUNT TYPE I,
W_LINES TYPE I ,
W_TAB TYPE TAB_TYPE,
W_MOD TYPE I,
W_SPC(15),
W_MATNR TYPE MARA-MATNR,
W_CHARG TYPE ZHT010_FORGE-CHARG,
W_TIMLO TYPE ZHT010_FORGE-TIMLO,
W_WIRECD TYPE MARA-MATNR,
W_JONO TYPE ZHT010_FORGE-JONUMBER,
W_MACHINE TYPE ZHT010_FORGE-ZWRKCE,
W_LBKUM TYPE MBEW-LBKUM,
ZWCD TYPE ZHT010_FORGE-ZWIRECD,
W_BI TYPE C,
W_LINECOUNT TYPE I,
W_MAKTX LIKE MAKT-MAKTX,
W_STLAL LIKE STKO-STLAL.
TYPES : BEGIN OF I_ST,
MATNR TYPE MARA-MATNR,
WIRECD TYPE MARA-MATNR, "Entered in ZHC018
UOM TYPE MARA-MEINS,
RMCODE TYPE MARA-MATNR, "Actual RM by BOM Explosion
MEINS TYPE MARA-MEINS, "Actual meins of RM by BOM
SPC TYPE MBEW-LBKUM,
END OF I_ST.
TYPES :BEGIN OF STR_BATCH ,
MARK(1),
MATNR LIKE MARA-MATNR,
WIRECD LIKE MARA-MATNR,
CHARG LIKE MCHB-CHARG,
CLABS LIKE MCHB-CLABS,
QTY LIKE MSEG-ERFMG,
UOM LIKE MSEG-ERFME,
SCRPQTY LIKE MSEG-MENGE,
MEINS LIKE MSEG-ERFME,
PENQTY LIKE MCHB-CLABS,
POSSQTY LIKE MCHB-CLABS,
TOPOST LIKE MCHB-CLABS,
REQTY LIKE MCHB-CLABS,
TIMLO LIKE ZHT010_FORGE-TIMLO,
END OF STR_BATCH.
DATA: IT_CONFIRM TYPE STANDARD TABLE OF I_CONFIRM WITH HEADER LINE,
IT_BACKFLUSH TYPE STANDARD TABLE OF STR_BACKFLUSH WITH HEADER LINE
TAB TYPE STANDARD TABLE OF TAB_TYPE WITH NON-UNIQUE DEFAULT KEY
INITIAL SIZE 10,
IT_STBD_SCRP TYPE CSXDOC OCCURS 0 WITH HEADER LINE,
IT_STBE_SCRP TYPE CSXEQUI OCCURS 0 WITH HEADER LINE,
IT_STBK_SCRP TYPE CSXKLA OCCURS 0 WITH HEADER LINE,
IT_STBM_SCRP TYPE CSXMAT OCCURS 0 WITH HEADER LINE,
IT_STBP_SCRP TYPE CSXGEN OCCURS 0 WITH HEADER LINE,
IT_STBT_SCRP TYPE CSXTPL OCCURS 0 WITH HEADER LINE,
IT_BATCH TYPE STANDARD TABLE OF STR_BATCH WITH HEADER LINE,
I_BATCH TYPE STANDARD TABLE OF STR_BATCH WITH HEADER LINE,
IT_STPOX TYPE STPOX OCCURS 0 WITH HEADER LINE,
IT_MAT TYPE CSCMAT OCCURS 0 WITH HEADER LINE,
WA_STPOX LIKE IT_STPOX,
IT_ST TYPE STANDARD TABLE OF I_ST WITH HEADER LINE,
IT_ST1 TYPE STANDARD TABLE OF I_ST WITH HEADER LINE,
IT_STBD TYPE CSXDOC OCCURS 0 WITH HEADER LINE,
IT_STBE TYPE CSXEQUI OCCURS 0 WITH HEADER LINE,
IT_STBK TYPE CSXKLA OCCURS 0 WITH HEADER LINE,
IT_STBM TYPE CSXMAT OCCURS 0 WITH HEADER LINE,
IT_STBP TYPE CSXGEN OCCURS 0 WITH HEADER LINE,
IT_STBT TYPE CSXTPL OCCURS 0 WITH HEADER LINE,
IT_STBD_ACTQTY TYPE CSXDOC OCCURS 0 WITH HEADER LINE,
IT_STBE_ACTQTY TYPE CSXEQUI OCCURS 0 WITH HEADER LINE,
IT_STBK_ACTQTY TYPE CSXKLA OCCURS 0 WITH HEADER LINE,
IT_STBM_ACTQTY TYPE CSXMAT OCCURS 0 WITH HEADER LINE,
IT_STBP_ACTQTY TYPE CSXGEN OCCURS 0 WITH HEADER LINE,
IT_STBT_ACTQTY TYPE CSXTPL OCCURS 0 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS : PR_WERKS LIKE IT_CONFIRM-PLWRK OBLIGATORY,
PR_BUDAT LIKE IT_CONFIRM-ZBUDAT OBLIGATORY.
SELECT-OPTIONS : SO_SHIFT FOR IT_CONFIRM-ZSHIFT NO-EXTENSION NO INTERVALS,
SO_MATNR FOR IT_CONFIRM-MATNR,
SO_WORK FOR IT_CONFIRM-ZWRKCE ,
SO_TOKEN FOR ZHT010_FORGE-TOKEN,
SO_CELL FOR MARC-FEVOR NO-EXTENSION NO INTERVALS.
PARAMETERS : PR_CONFM AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK B1.
**This selection screen gives an option to execute in
**foreground or in the background.
**This is needed to analyse any errors while posting data.
SELECTION-SCREEN BEGIN OF BLOCK RADIO WITH FRAME TITLE TEXT-018 NO
INTERVALS.
PARAMETERS: PR_BIN RADIOBUTTON GROUP BI DEFAULT 'X',
PR_BIA RADIOBUTTON GROUP BI.
SELECTION-SCREEN END OF BLOCK RADIO.
DATA W_WERKS LIKE ZHT010_FORGE-PLWRK.
AT SELECTION-SCREEN.
IF PR_WERKS IS NOT INITIAL.
IF PR_WERKS <> '4100'.
SET CURSOR FIELD 'PR_WERKS'.
MESSAGE E000(ZSFL) WITH 'Plant 4100 Only Allowed'.
EXIT.
ENDIF.
ENDIF.
IF PR_BIA = 'X'.
IF SY-UNAME = 'PP4100A01' OR SY-UNAME = 'PP4100B01' OR SY-UNAME = 'PP4100C01' OR
SY-UNAME = 'PP4100C02' OR SY-UNAME = 'PP4200B01' OR SY-UNAME = 'PP4200C01' OR
SY-UNAME = 'PP4200C02'.
MESSAGE E000(ZSFL) WITH 'No Authorization to Run in Foreground'.
EXIT.
ENDIF.
ENDIF.
START-OF-SELECTION.
MOVE 'DELETE' TO W_TAB-FCODE.
APPEND W_TAB TO TAB.
MOVE 'SELA' TO W_TAB-FCODE.
APPEND W_TAB TO TAB.
MOVE 'DSELA' TO W_TAB-FCODE.
APPEND W_TAB TO TAB.
SET PF-STATUS 'CONF' EXCLUDING TAB.
IF PR_CONFM = 'X'.
SELECT AZBUDAT AMATNR APLWRK AZSHIFT AZWRKCE AZWIRECD A~ZACQTY
A~ZREQTY
AZSCQTY AZSEQTY AENDBIT AENDBIT2 ATIMLO AZCONFIRM
A~ZCONFIRMREJ
AZCONFIRMSC AZCONFIRMSE AZCONFIRMBIT AZCONFIRMBIT2
AZCONFIRMBUR ATOKEN AJONUMBER ACHARG A~ZACCISSQTY
AZREJISSQTY AZSCMISSQTY AZSEMISSQTY AVERID
FROM ZHT010_FORGE AS A INNER JOIN MARC AS B ON B~MATNR =
AMATNR AND BWERKS = PR_WERKS
INNER JOIN MARA AS C ON CMATNR = AMATNR
INTO TABLE IT_CONFIRM
WHERE A~PLWRK EQ PR_WERKS
AND A~ZSHIFT IN SO_SHIFT
AND A~ZBUDAT EQ PR_BUDAT
AND A~MATNR IN SO_MATNR
AND A~ZWRKCE IN SO_WORK
AND A~TOKEN IN SO_TOKEN
AND B~FEVOR IN SO_CELL
AND C~FERTH = 'RCOMP'
AND ( A~ZCONFIRM = ''
OR A~ZCONFIRMREJ = ''
OR A~ZCONFIRMSC = ''
OR A~ZCONFIRMSE = '' )
or a~zconfirmbit = '' )
OR a~zconfirmbit2 = '' ) and
AND KZLOESCH <> 'X'.
ELSE.
SELECT AZBUDAT AMATNR APLWRK AZSHIFT AZWRKCE AZWIRECD A~ZACQTY
A~ZREQTY
AZSCQTY AZSEQTY AENDBIT AENDBIT2 ATIMLO AZCONFIRM
A~ZCONFIRMREJ
AZCONFIRMSC AZCONFIRMSE AZCONFIRMBIT AZCONFIRMBIT2
AZCONFIRMBUR ATOKEN AJONUMBER ACHARG A~ZACCISSQTY
AZREJISSQTY AZSCMISSQTY AZSEMISSQTY AVERID
FROM ZHT010_FORGE AS A INNER JOIN MARC AS B ON B~MATNR =
AMATNR AND BWERKS = PR_WERKS
INNER JOIN MARA AS C ON CMATNR = AMATNR
INTO TABLE IT_CONFIRM
WHERE A~PLWRK EQ PR_WERKS
AND A~ZSHIFT IN SO_SHIFT
AND A~ZBUDAT EQ PR_BUDAT
AND A~MATNR IN SO_MATNR
AND A~ZWRKCE IN SO_WORK
AND A~TOKEN IN SO_TOKEN
AND B~FEVOR IN SO_CELL
AND C~FERTH = 'RCOMP' AND
KZLOESCH <> 'X'.
ENDIF.
W_LINES = LINES( IT_CONFIRM ).
IF W_LINES LT 1.
MESSAGE I999(ZSFL) WITH 'No Records Found For The Seln Criteria'.
EXIT.
ENDIF.
END-OF-SELECTION.
SORT IT_CONFIRM BY MATNR.
LOOP AT IT_CONFIRM.
W_MATNR = IT_CONFIRM-MATNR.
REM = SY-TABIX MOD 2.
W_WIRECD = IT_CONFIRM-ZWIRECD.
W_TIMLO = IT_CONFIRM-TIMLO.
W_CHARG = IT_CONFIRM-CHARG.
W_JONO = IT_CONFIRM-JONUMBER.
W_MACHINE = IT_CONFIRM-ZWRKCE.
W_ZACQTY = IT_CONFIRM-ZACQTY.
W_ZREQTY = IT_CONFIRM-ZREQTY.
W_ZSCQTY = IT_CONFIRM-ZSCQTY.
W_ZSEQTY = IT_CONFIRM-ZSEQTY.
W_ENDBIT = IT_CONFIRM-ENDBIT.
W_ENDBIT2 = IT_CONFIRM-ENDBIT2.
W_ACCISSQTY = IT_CONFIRM-ZACCISSQTY.
W_REJISSQTY = IT_CONFIRM-ZREJISSQTY.
W_SCMISSQTY = IT_CONFIRM-ZSCMISSQTY.
W_SEMISSQTY = IT_CONFIRM-ZSEMISSQTY.
W_CONFIRM = IT_CONFIRM-ZCONFIRM.
W_CONFIRMREJ = IT_CONFIRM-ZCONFIRMREJ.
W_CONFIRMSC = IT_CONFIRM-ZCONFIRMSC.
W_CONFIRMSE = IT_CONFIRM-ZCONFIRMSE.
W_VERID = IT_CONFIRM-VERID.
SHIFT W_ZACQTY LEFT DELETING LEADING SPACE.
SHIFT W_ZREQTY LEFT DELETING LEADING SPACE.
SHIFT W_ZSCQTY LEFT DELETING LEADING SPACE.
SHIFT W_ZSEQTY LEFT DELETING LEADING SPACE.
SHIFT W_ENDBIT LEFT DELETING LEADING SPACE.
SHIFT W_ENDBIT2 LEFT DELETING LEADING SPACE.
SHIFT W_ACCISSQTY LEFT DELETING LEADING SPACE.
SHIFT W_REJISSQTY LEFT DELETING LEADING SPACE.
SHIFT W_SCMISSQTY LEFT DELETING LEADING SPACE.
SHIFT W_SEMISSQTY LEFT DELETING LEADING SPACE.
SELECT SINGLE MAKTX INTO W_MAKTX FROM MAKT WHERE MATNR =
IT_CONFIRM-MATNR AND SPRAS = 'E'.
IF IT_CONFIRM-ZCONFIRM = 'X' AND IT_CONFIRM-ZCONFIRMREJ = 'X' AND
IT_CONFIRM-ZCONFIRMSC = 'X'
AND IT_CONFIRM-ZCONFIRMSE = 'X' AND IT_CONFIRM-ZCONFIRMBIT = 'X'
AND IT_CONFIRM-ZCONFIRMBIT2 = 'X'.
WRITE : / SY-VLINE,
IT_CONFIRM-MARK AS CHECKBOX INPUT OFF ,
IT_CONFIRM-MATNR UNDER TEXT-002,
W_MAKTX(20) UNDER TEXT-027,
IT_CONFIRM-ZSHIFT UNDER TEXT-011,
IT_CONFIRM-ZWRKCE UNDER TEXT-010,
IT_CONFIRM-ZWIRECD UNDER TEXT-003,
IT_CONFIRM-CHARG UNDER TEXT-022,
IT_CONFIRM-JONUMBER UNDER TEXT-019.
ELSE.
WRITE : / SY-VLINE,
IT_CONFIRM-MARK AS CHECKBOX,
IT_CONFIRM-MATNR UNDER TEXT-002 HOTSPOT ON,
W_MAKTX(20) UNDER TEXT-027,
IT_CONFIRM-ZSHIFT UNDER TEXT-011,
IT_CONFIRM-ZWRKCE UNDER TEXT-010,
IT_CONFIRM-ZWIRECD UNDER TEXT-003,
IT_CONFIRM-CHARG UNDER TEXT-022 ,
IT_CONFIRM-JONUMBER UNDER TEXT-019.
ENDIF.
Check if the burslg has already been posted. Incase it
has been posted then acc, rej , pr sc and se sc qnty cannot
be in editable
IF IT_CONFIRM-ZCONFIRM EQ 'X'. "or it_confirm-zconfirmbur eq 'X'.
IF IT_CONFIRM-ZCONFIRM EQ 'X' .
WRITE W_ZACQTY UNDER TEXT-004 COLOR 5 INTENSIFIED OFF.
ELSEIF IT_CONFIRM-ZCONFIRMBUR EQ 'X'.
WRITE W_ZACQTY UNDER TEXT-004 COLOR 3 INTENSIFIED OFF.
ENDIF.
ELSE.
WRITE W_ZACQTY UNDER TEXT-004 INPUT OFF.
ENDIF.
IF IT_CONFIRM-ZCONFIRMREJ EQ 'X' OR IT_CONFIRM-ZCONFIRMBUR EQ 'X'.
IF IT_CONFIRM-ZCONFIRMREJ EQ 'X' .
WRITE W_ZREQTY UNDER TEXT-005 COLOR 5 INTENSIFIED OFF.
ELSEIF IT_CONFIRM-ZCONFIRMBUR EQ 'X'.
WRITE W_ZREQTY UNDER TEXT-005 COLOR 3 INTENSIFIED OFF.
ENDIF.
ELSE.
WRITE W_ZREQTY UNDER TEXT-005. "input on.
ENDIF.
IF IT_CONFIRM-ZCONFIRMSC EQ 'X' OR IT_CONFIRM-ZCONFIRMBUR EQ 'X'.
IF IT_CONFIRM-ZCONFIRMSC EQ 'X' .
WRITE W_ZSCQTY UNDER TEXT-006 COLOR 5 INTENSIFIED OFF.
ELSEIF IT_CONFIRM-ZCONFIRMBUR EQ 'X'.
WRITE W_ZSCQTY UNDER TEXT-006 COLOR 3 INTENSIFIED OFF.
ENDIF.
ELSE.
WRITE W_ZSCQTY UNDER TEXT-006. "input on.
ENDIF.
IF IT_CONFIRM-ZCONFIRMSE EQ 'X' OR IT_CONFIRM-ZCONFIRMBUR EQ 'X'.
IF IT_CONFIRM-ZCONFIRMSE EQ 'X' .
WRITE W_ZSEQTY UNDER TEXT-007 COLOR 5 INTENSIFIED OFF.
ELSEIF IT_CONFIRM-ZCONFIRMBUR EQ 'X'.
WRITE W_ZSEQTY UNDER TEXT-007 COLOR 3 INTENSIFIED OFF.
ENDIF.
ELSE.
WRITE W_ZSEQTY UNDER TEXT-007. "input on.
ENDIF.
IF IT_CONFIRM-ZCONFIRMBIT EQ 'X'.
WRITE W_ENDBIT UNDER TEXT-008 COLOR 5 INTENSIFIED OFF.
ELSE.
WRITE W_ENDBIT UNDER TEXT-008. "input on.
ENDIF.
IF IT_CONFIRM-ZCONFIRMBIT2 EQ 'X'.
WRITE W_ENDBIT2 UNDER TEXT-009 COLOR 5 INTENSIFIED OFF.
ELSE.
WRITE W_ENDBIT2 UNDER TEXT-009. " input on.
ENDIF.
WRITE W_ACCISSQTY UNDER TEXT-023 COLOR 5 INTENSIFIED OFF.
WRITE W_REJISSQTY UNDER TEXT-024 COLOR 5 INTENSIFIED OFF.
WRITE W_SCMISSQTY UNDER TEXT-025 COLOR 5 INTENSIFIED OFF.
WRITE W_SEMISSQTY UNDER TEXT-026 COLOR 5 INTENSIFIED OFF.
WRITE 274 SY-VLINE.
HIDE: W_MATNR,W_WIRECD,W_ZACQTY,W_ZREQTY,W_ZSCQTY,
W_ZSEQTY,W_CHARG,W_JONO,W_MACHINE,W_TIMLO,
W_CONFIRM,W_CONFIRMREJ,W_CONFIRMSC,W_CONFIRMSE,W_VERID.
ULINE (274).
ENDLOOP.
TOP-OF-PAGE.
FORMAT COLOR 5 INTENSIFIED ON.
WRITE : 'Plant: ', PR_WERKS,
"'Shift: ', so_shift-low, ' To ' , so_shift-high,
'Posting date: ', PR_BUDAT.
WRITE : /''.
ULINE (274).
FORMAT COLOR 1 INTENSIFIED ON.
WRITE :/1 SY-VLINE,
5 TEXT-002, " Material no.
21 TEXT-027, " Description
45 TEXT-011, " shift
50 TEXT-010, " Work center.
65 TEXT-003, " Wire code.
85 TEXT-022, " Heat Number
105 TEXT-019, " Job Order Number
125 TEXT-004, " Acc. qty.
140 TEXT-005, " Rej. qty.
154 TEXT-006, " Scrap.
170 TEXT-007, " Set qty.
185 TEXT-008, " Endbit in Kg.
199 TEXT-009, " SOP.
214 TEXT-023,
229 TEXT-024,
244 TEXT-025,
259 TEXT-026,
274 SY-VLINE.
FORMAT COLOR OFF.
WRITE :/''.
ULINE (274).
END-OF-PAGE.
in order to show the stock
of wire code and requirement qty of wirecode .
AT LINE-SELECTION.
DATA: W_MEINS TYPE MARA-MEINS,
W_SPC1 TYPE MBEW-LBKUM,
W_STMAT TYPE MARA-MATNR,
W_QTY1 TYPE STKO-BMENG,
W_QTY2 TYPE STKO-BMENG,
W_QTY3 TYPE STKO-BMENG,
W_QTY4 TYPE STKO-BMENG,
W_TOTAL TYPE STKO-BMENG,
W_BRGEW TYPE MARA-BRGEW,
W_GEWEI TYPE MARA-GEWEI,
W_BUOM TYPE MARA-MEINS,
W_RQTY TYPE P DECIMALS 3,
w_ferth type mara-ferth,
TMATNR LIKE MARA-MATNR,
W_BATCH1(10),
W_BATCH2(10),
W_BATCH3(10),
W_BATCH4(10),
W_BATCH5(10),
W_BALQTY LIKE MCHB-CLABS,
w_penqty like mchb-clabs,
W_CLABS LIKE MCHB-CLABS.
IF SY-LILLI <= 4.
MESSAGE S000(ZSFL) WITH 'Select Correct Record'.
STOP.
ENDIF.
*zwcd = sy-lisel+64(18).
REFRESH IT_ST.
CLEAR IT_ST.
PERFORM F001-READ_MAT.
**Logic changed. the req qty should be shown from the BOM.
**Therefore these changes are needed.
CLEAR : IT_STBD,IT_STBE,IT_STBK,IT_STBM,IT_STBP,IT_STBT,W_QTY1,W_QTY2,
W_QTY3,W_TOTAL.
W_QTY1 = SY-LISEL+119(15).
W_QTY2 = SY-LISEL+137(15).
W_QTY3 = SY-LISEL+152(15).
W_QTY4 = SY-LISEL+167(15).
W_TOTAL = W_QTY1.
PERFORM F002-GET_QTY.
CLEAR : IT_STBD_SCRP,IT_STBE_SCRP,IT_STBK_SCRP,IT_STBM_SCRP,IT_STBP_SCRP
,IT_STBT_SCRP.
PERFORM F002-GET_SCRPQTY.
SORT IT_ST.
IF SY-LSIND = 1.
WINDOW STARTING AT 1 10 ENDING AT 135 20.
SET PF-STATUS 'ZCOMP'.
*to display batch and batch qty in pop up screen
REFRESH IT_BATCH[].
CLEAR :IT_BATCH , IT_ST,TMATNR.
LOOP AT IT_ST WHERE MATNR = W_MATNR AND WIRECD = W_WIRECD.
IT_BATCH-MATNR = IT_ST-MATNR.
IT_BATCH-WIRECD = IT_ST-WIRECD .
IT_BATCH-TIMLO = W_TIMLO.
READ TABLE IT_STBP_SCRP WITH KEY OBJNR = IT_ST-RMCODE.
IF SY-SUBRC = 0.
IF IT_ST-UOM = IT_ST-MEINS.
IT_BATCH-SCRPQTY = IT_STBP_SCRP-MNGLG.
ELSE.
IF IT_ST-MEINS = 'KG' AND IT_ST-UOM = 'TO'.
IT_BATCH-SCRPQTY = IT_STBP_SCRP-MNGLG / 1000.
ELSEIF IT_ST-MEINS = 'TO' AND IT_ST-UOM ='KG'.
IT_BATCH-SCRPQTY = IT_STBP_SCRP-MNGLG * 1000.
ENDIF.
ENDIF.
ENDIF.
SELECT SINGLE MATNR INTO TMATNR FROM MCHB WHERE MATNR =
IT_BATCH-WIRECD.
IF SY-SUBRC <> 0.
READ TABLE IT_BATCH WITH KEY MATNR = W_MATNR WIRECD =
IT_BATCH-WIRECD.
IF SY-SUBRC <> 0.
APPEND IT_BATCH.
ENDIF.
ELSE.
SELECT CLABS CHARG INTO (IT_BATCH-CLABS , IT_BATCH-CHARG) FROM
MCHB
WHERE MATNR = IT_ST-WIRECD AND WERKS = PR_WERKS AND LGORT =
'0007'.
READ TABLE IT_BATCH WITH KEY MATNR = W_MATNR WIRECD =
IT_ST-WIRECD
CHARG = IT_BATCH-CHARG .
IF SY-SUBRC <> 0.
APPEND IT_BATCH.
ENDIF.
ENDSELECT.
ENDIF.
CLEAR :IT_BATCH , IT_STBP_SCRP.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM IT_BATCH COMPARING WIRECD CHARG.
DELETE IT_BATCH WHERE CLABS = 0.
ULINE AT /1(134).
FORMAT COLOR 5 INTENSIFIED OFF.
WRITE : /1 SY-VLINE,
5 TEXT-003, " Wire code.
23(1) SY-VLINE,
25 TEXT-013,
39(1) SY-VLINE,
40 TEXT-014,
43(1) SY-VLINE,
44 TEXT-015,
59(1) SY-VLINE,
60 TEXT-020,
71(1) SY-VLINE,
72 TEXT-021,
90(1) SY-VLINE,
91 'Pending Qty',
104(1) SY-VLINE,
105 'Possible Qty',
119(1) SY-VLINE,
120 'To Post',
134(1) SY-VLINE.
ULINE AT /1(134).
CLEAR IT_ST.
SORT IT_ST.
DELETE ADJACENT DUPLICATES FROM IT_ST COMPARING ALL FIELDS.
SORT IT_ST.
REFRESH IT_ST1.
CLEAR: IT_ST1,IT_ST.
LOOP AT IT_ST WHERE MATNR = W_MATNR AND WIRECD = W_WIRECD.
MOVE-CORRESPONDING IT_ST TO IT_ST1.
APPEND IT_ST1.
ENDLOOP.
SORT: IT_ST,IT_ST1.
DELETE IT_ST1 WHERE MATNR NE W_MATNR.
SORT: IT_ST,IT_ST1.
CLEAR: IT_ST1.
LOOP AT IT_ST1 WHERE MATNR = W_MATNR AND WIRECD = W_WIRECD .
W_MEINS = IT_ST1-MEINS.
W_SPC = IT_ST1-SPC.
W_STMAT = IT_ST1-WIRECD.
**ZC127 has only a one to one relationship to BOM therefore only one
**line in the internal table is expected.
CLEAR IT_STBP.
READ TABLE IT_STBP WITH KEY OBJNR = IT_ST1-RMCODE.
IF IT_ST1-UOM = IT_ST1-MEINS .
W_RQTY = IT_STBP-MNGLG.
ELSE.
IF IT_ST1-MEINS = 'KG' AND IT_ST1-UOM = 'TO'.
W_RQTY = IT_STBP-MNGLG / 1000.
ELSEIF IT_ST1-MEINS = 'TO' AND IT_ST1-UOM = 'KG'.
W_RQTY = IT_STBP-MNGLG * 1000.
ENDIF.
ENDIF.
FORMAT COLOR 2 INTENSIFIED OFF.
CLEAR : W_BATCH1,W_BATCH2,W_BATCH3,W_BATCH4,W_BATCH5,W_BALQTY,
W_CLABS.
SPLIT W_CHARG AT ',' INTO W_BATCH1 W_BATCH2 W_BATCH3 W_BATCH4
W_BATCH5.
DELETE IT_BATCH WHERE CHARG <> W_BATCH1 AND CHARG <> W_BATCH2 AND
CHARG <> W_BATCH3
AND CHARG <> W_BATCH4 AND CHARG <> W_BATCH5
AND MATNR = W_MATNR
AND WIRECD = W_WIRECD AND TIMLO = W_TIMLO.
W_BALQTY = W_RQTY.
LOOP AT IT_BATCH WHERE MATNR = W_MATNR AND WIRECD = W_WIRECD AND
TIMLO = W_TIMLO.
SELECT SINGLE PENDINGQTY FROM ZHT012_JOBORDNO INTO
IT_BATCH-PENQTY WHERE LOT = IT_BATCH-CHARG AND
RMCODE = W_WIRECD AND
JO_NO = W_JONO AND
MACHINE = W_MACHINE.
IF IT_BATCH-PENQTY >= IT_BATCH-CLABS.
W_CLABS = IT_BATCH-CLABS.
ELSE.
W_CLABS = IT_BATCH-PENQTY.
ENDIF.
IF W_BALQTY > W_CLABS.
IT_BATCH-TOPOST = W_CLABS.
W_BALQTY = W_BALQTY - W_CLABS.
ELSEIF W_BALQTY < W_CLABS.
IT_BATCH-TOPOST = W_BALQTY.
W_BALQTY = W_BALQTY - IT_BATCH-TOPOST.
ENDIF.
IF IT_BATCH-PENQTY < IT_BATCH-CLABS.
IT_BATCH-POSSQTY = IT_BATCH-PENQTY.
ELSEIF IT_BATCH-CLABS < IT_BATCH-PENQTY.
IT_BATCH-POSSQTY = IT_BATCH-CLABS.
ELSEIF IT_BATCH-CLABS = IT_BATCH-PENQTY.
IT_BATCH-POSSQTY = IT_BATCH-CLABS.
ENDIF.
MODIFY IT_BATCH .
CLEAR IT_BATCH.
ENDLOOP.
LOOP AT IT_BATCH WHERE MATNR = W_MATNR AND WIRECD = W_WIRECD .
READ TABLE IT_STBP_ACTQTY WITH KEY OBJNR = IT_ST1-RMCODE.
FORMAT COLOR 2 INTENSIFIED OFF.
WRITE:/1 SY-VLINE,
3 IT_BATCH-MARK AS CHECKBOX,
IT_BATCH-WIRECD UNDER TEXT-003,
23(1) SY-VLINE.
ON CHANGE OF IT_BATCH-WIRECD.
AT NEW WIRECD.
WRITE :
W_SPC UNDER TEXT-013 LEFT-JUSTIFIED.
ENDON.
ENDAT.
WRITE: 39(1) SY-VLINE,
IT_ST1-UOM UNDER TEXT-014 ,
43(1) SY-VLINE,
W_RQTY UNDER TEXT-015 LEFT-JUSTIFIED,
59(1) SY-VLINE,
60 IT_BATCH-CHARG,
71(1) SY-VLINE,
72 IT_BATCH-CLABS LEFT-JUSTIFIED,
90(1) SY-VLINE,
91 IT_BATCH-PENQTY LEFT-JUSTIFIED,
104(1) SY-VLINE,
105 IT_BATCH-POSSQTY LEFT-JUSTIFIED,
119(1) SY-VLINE,
120 IT_BATCH-TOPOST LEFT-JUSTIFIED,
134(1) SY-VLINE.
IT_BATCH-QTY = IT_STBP_ACTQTY-MNGLG.
IT_BATCH-UOM = IT_ST1-UOM.
IT_BATCH-MEINS = IT_ST1-MEINS.
IT_BATCH-REQTY = W_RQTY.
MODIFY IT_BATCH TRANSPORTING QTY UOM MEINS REQTY.
ENDLOOP.
CLEAR : IT_BATCH , IT_STBP_ACTQTY.
ENDLOOP.
ULINE AT /1(134).
ENDIF.
AT USER-COMMAND.
CLEAR W_MOD.
CASE SY-UCOMM.
WHEN 'SELA'.
W_COUNT = 5.
LOOP AT IT_CONFIRM.
IF ( IT_CONFIRM-ZCONFIRM = '' OR IT_CONFIRM-ZCONFIRMREJ = '' OR
IT_CONFIRM-ZCONFIRMSC = ''
OR IT_CONFIRM-ZCONFIRMSE = '' OR IT_CONFIRM-ZCONFIRMBIT = '' OR
IT_CONFIRM-ZCONFIRMBIT2 = '' ) .
IT_CONFIRM-MARK = 'X'.
MODIFY IT_CONFIRM.
READ LINE W_COUNT.
MODIFY LINE W_COUNT FIELD VALUE IT_CONFIRM-MARK FROM 'X'.
ENDIF.
W_MOD = SY-TABIX MOD 46.
IF W_MOD EQ 0.
W_COUNT = W_COUNT + 5.
ELSE.
W_COUNT = W_COUNT + 2.
ENDIF.
ENDLOOP.
WHEN 'DSELA'.
W_COUNT = 5.
LOOP AT IT_CONFIRM.
IT_CONFIRM-MARK = ''.
MODIFY IT_CONFIRM.
READ LINE W_COUNT.
MODIFY LINE W_COUNT FIELD VALUE IT_CONFIRM-MARK FROM ''.
W_MOD = SY-TABIX MOD 46.
IF W_MOD EQ 0.
W_COUNT = W_COUNT + 5.
ELSE.
W_COUNT = W_COUNT + 2.
ENDIF.
ENDLOOP.
WHEN 'BLOCK'.
W_COUNT = 5.
W_START_COUNT = W_START_LINE - W_COUNT.
W_START_COUNT = W_START_COUNT + 1.
W_END_COUNT = W_END_LINE - W_COUNT.
W_END_COUNT = W_END_COUNT + 1.
REM = W_START_COUNT MOD 2.
IF REM EQ 0.
READ LINE W_START_LINE.
MODIFY LINE W_START_LINE LINE FORMAT INTENSIFIED OFF COLOR = 1.
ELSE.
READ LINE W_START_LINE.
MODIFY LINE W_START_LINE LINE FORMAT INTENSIFIED OFF COLOR = 2.
ENDIF.
REM = W_END_COUNT MOD 2.
IF REM EQ 0.
READ LINE W_END_LINE.
MODIFY LINE W_END_LINE LINE FORMAT INTENSIFIED OFF COLOR = 1.
ELSE.
READ LINE W_END_LINE.
MODIFY LINE W_END_LINE LINE FORMAT INTENSIFIED OFF COLOR = 2.
ENDIF.
LOOP AT IT_CONFIRM FROM W_START_COUNT TO W_END_COUNT.
IT_CONFIRM-MARK = 'X'.
MODIFY IT_CONFIRM.
READ LINE W_START_LINE.
MODIFY LINE W_START_LINE FIELD VALUE IT_CONFIRM-MARK FROM 'X'.
W_START_LINE = W_START_LINE + 1.
ENDLOOP.
CLEAR : W_START_COUNT, W_END_COUNT, W_START_LINE, W_END_LINE.
WHEN 'SAV'.
DATA : W_TCOUNT TYPE I VALUE 0.
W_LINECOUNT = 4.
CLEAR IT_BATCH.
LOOP AT IT_BATCH.
READ LINE W_LINECOUNT FIELD VALUE IT_BATCH-MARK.
IF IT_BATCH-MARK = 'X'.
W_TCOUNT = W_TCOUNT + 1.
MODIFY IT_BATCH TRANSPORTING MARK.
READ TABLE I_BATCH WITH KEY MATNR = IT_BATCH-MATNR
WIRECD = IT_BATCH-WIRECD
CHARG = IT_BATCH-CHARG
TIMLO = IT_BATCH-TIMLO.
IF SY-SUBRC <> 0.
MOVE-CORRESPONDING IT_BATCH TO I_BATCH.
APPEND I_BATCH.
ENDIF.
CLEAR : IT_BATCH , I_BATCH.
ENDIF.
W_LINECOUNT = W_LINECOUNT + 1.
ENDLOOP.
IF W_TCOUNT = 0.
MESSAGE E000(ZSFL) WITH 'Select Atleast One Entry'.
ENDIF.
SELECT SINGLE WERKS INTO W_WERKS FROM MAST WHERE WERKS = PR_WERKS AND MATNR = W_MATNR.
IF SY-SUBRC = 0.
CLEAR W_STLAL.
SELECT SINGLE STLAL INTO W_STLAL FROM MKAL WHERE WERKS = PR_WERKS AND
MATNR = W_MATNR AND
VERID = W_VERID.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
CAPID = 'PP01'
DATUV = SY-DATUM
MKTLS = 'X'
MTNRV = W_MATNR
WERKS = PR_WERKS
STLAL = W_STLAL
TABLES
STB = IT_STPOX.
ENDIF.
CLEAR W_TCOUNT.
LOOP AT IT_BATCH WHERE MARK = 'X'.
AT NEW WIRECD.
W_TCOUNT = W_TCOUNT + 1.
ENDAT.
ENDLOOP.
DESCRIBE TABLE IT_STPOX LINES SY-TFILL.
IF W_TCOUNT <> SY-TFILL.
MESSAGE E000(ZSFL) WITH 'Select all Components as in BOM'.
ENDIF.
SET SCREEN 0.
SET USER-COMMAND 'BACK'.
WHEN 'SAVE'.
DATA W_MARK TYPE I VALUE 0.
W_COUNT = 5.
CLEAR IT_BACKFLUSH.
REFRESH IT_BACKFLUSH.
LOOP AT IT_CONFIRM.
CLEAR W_ZACQTY.
CLEAR W_ZREQTY.
CLEAR W_ZSCQTY.
CLEAR W_ZSEQTY.
CLEAR W_ENDBIT.
CLEAR W_ENDBIT2.
READ LINE W_COUNT FIELD VALUE IT_CONFIRM-MARK.
IF IT_CONFIRM-MARK EQ 'X'.
READ TABLE I_BATCH WITH KEY MATNR = IT_CONFIRM-MATNR WIRECD = IT_CONFIRM-ZWIRECD
TIMLO = IT_CONFIRM-TIMLO.
IF SY-SUBRC <> 0.
W_MARK = W_MARK + 1.
ENDIF.
READ LINE W_COUNT FIELD VALUE W_ZACQTY.
IT_CONFIRM-ZACQTY = W_ZACQTY.
IF IT_CONFIRM-ZACQTY EQ 0.
IT_CONFIRM-ZCONFIRM = 'X'.
ENDIF.
READ LINE W_COUNT FIELD VALUE W_ZREQTY.
IT_CONFIRM-ZREQTY = W_ZREQTY.
IF IT_CONFIRM-ZREQTY EQ 0.
IT_CONFIRM-ZCONFIRMREJ = 'X'.
ENDIF.
READ LINE W_COUNT FIELD VALUE W_ZSCQTY.
IT_CONFIRM-ZSCQTY = W_ZSCQTY.
IF IT_CONFIRM-ZSCQTY EQ 0.
IT_CONFIRM-ZCONFIRMSC = 'X'.
ENDIF.
READ LINE W_COUNT FIELD VALUE W_ZSEQTY.
IT_CONFIRM-ZSEQTY = W_ZSEQTY.
IF IT_CONFIRM-ZSEQTY EQ 0.
IT_CONFIRM-ZCONFIRMSE = 'X'.
ENDIF.
READ LINE W_COUNT FIELD VALUE W_ENDBIT.
IT_CONFIRM-ENDBIT = W_ENDBIT.
IF IT_CONFIRM-ENDBIT EQ 0.
IT_CONFIRM-ZCONFIRMBIT = 'X'.
ENDIF.
READ LINE W_COUNT FIELD VALUE W_ENDBIT2.
IT_CONFIRM-ENDBIT2 = W_ENDBIT2.
IF IT_CONFIRM-ENDBIT2 EQ 0.
IT_CONFIRM-ZCONFIRMBIT2 = 'X'.
ENDIF.
PERFORM CHECK_FLAG_ROUTINE.
PERFORM CHECK_BATCH.
MODIFY IT_CONFIRM.
CLEAR IT_BACKFLUSH.
MOVE-CORRESPONDING IT_CONFIRM TO IT_BACKFLUSH.
UPDATE ZHT010_FORGE
SET ZACQTY = W_ZACQTY
ZREQTY = W_ZREQTY
ZSCQTY = W_ZSCQTY
ZSEQTY = W_ZSEQTY
ENDBIT = W_ENDBIT
ENDBIT2 = W_ENDBIT2
ZCONFIRM = IT_CONFIRM-ZCONFIRM
ZCONFIRMREJ = IT_CONFIRM-ZCONFIRMREJ
ZCONFIRMSC = IT_CONFIRM-ZCONFIRMSC
ZCONFIRMSE = IT_CONFIRM-ZCONFIRMSE
ZCONFIRMBIT = IT_CONFIRM-ZCONFIRMBIT
ZCONFIRMBIT2 = IT_CONFIRM-ZCONFIRMBIT2
WHERE ZBUDAT EQ IT_CONFIRM-ZBUDAT
AND MATNR EQ IT_CONFIRM-MATNR
AND PLWRK EQ IT_CONFIRM-PLWRK
AND ZSHIFT EQ IT_CONFIRM-ZSHIFT
AND JONUMBER EQ IT_CONFIRM-JONUMBER
AND ZWRKCE EQ IT_CONFIRM-ZWRKCE
AND TIMLO EQ IT_CONFIRM-TIMLO.
Transfer recs into the IT only if atleast one column
needs to be posted.
IF ( IT_CONFIRM-ZCONFIRM = '' OR IT_CONFIRM-ZCONFIRMREJ = ''
OR IT_CONFIRM-ZCONFIRMSC = ''
OR IT_CONFIRM-ZCONFIRMSE = '' OR IT_CONFIRM-ZCONFIRMBIT = ''
OR IT_CONFIRM-ZCONFIRMBIT2 = '' ) .
APPEND IT_BACKFLUSH.
ENDIF.
ENDIF.
W_MOD = SY-TABIX MOD 46.
IF W_MOD EQ 0.
W_COUNT = W_COUNT + 5.
ELSE.
W_COUNT = W_COUNT + 2.
ENDIF.
ENDLOOP.
IF W_MARK > 0.
MESSAGE E000(ZSFL) WITH 'Select the component'.
ENDIF.
DELETE IT_BACKFLUSH WHERE ZACQTY = 0 AND ZREQTY = 0 AND ZSCQTY = 0 AND ZSEQTY = 0.
DESCRIBE TABLE IT_BACKFLUSH.
CHECK SY-TFILL GT 0.
SET PARAMETER ID 'ZPLWRK' FIELD PR_WERKS.
SET PARAMETER ID 'ZBUDAT' FIELD PR_BUDAT.
IF PR_BIN = 'X'.
W_BI = 'N'.
ELSEIF PR_BIA = 'X'.
W_BI = 'A'.
ENDIF.
EXPORT W_BI FROM W_BI TO MEMORY ID 'W_BI'.
EXPORT IT_BACKFLUSH TO MEMORY ID 'CONFIRM'.
EXPORT I_BATCH TO MEMORY ID 'TMPBATCH'.
CALL TRANSACTION 'ZHC010_FINAL'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'ENTER'.
W_COUNT = 7.
LOOP AT IT_CONFIRM.
READ LINE W_COUNT FIELD VALUE IT_CONFIRM-MARK.
IF IT_CONFIRM-MARK EQ 'X'.
READ LINE W_COUNT FIELD VALUE W_ZACQTY.
IT_CONFIRM-ZACQTY = W_ZACQTY.
READ LINE W_COUNT FIELD VALUE W_ZREQTY.
IT_CONFIRM-ZREQTY = W_ZREQTY.
READ LINE W_COUNT FIELD VALUE W_ZSCQTY.
IT_CONFIRM-ZSCQTY = W_ZSCQTY.
READ LINE W_COUNT FIELD VALUE W_ZSEQTY.
IT_CONFIRM-ZSEQTY = W_ZSEQTY.
READ LINE W_COUNT FIELD VALUE W_ENDBIT.
IT_CONFIRM-ENDBIT = W_ENDBIT.
READ LINE W_COUNT FIELD VALUE W_ENDBIT2.
IT_CONFIRM-ENDBIT2 = W_ENDBIT2.
MODIFY IT_CONFIRM.
ENDIF.
W_MOD = SY-TABIX MOD 46.
IF W_MOD EQ 0.
W_COUNT = W_COUNT + 7.
ELSE.
W_COUNT = W_COUNT + 1.
ENDIF.
ENDLOOP.
WHEN 'DELETE'.
W_COUNT = 5.
CLEAR IT_BACKFLUSH.
LOOP AT IT_CONFIRM.
READ LINE W_COUNT FIELD VALUE IT_CONFIRM-DELETE.
IF IT_CONFIRM-DELETE EQ 'X'.
Tech Note : Provision to delete any record shld be given cos it wud
create prbs
IF ( IT_CONFIRM-ZCONFIRM = '' AND IT_CONFIRM-ZCONFIRMREJ = ''
AND IT_CONFIRM-ZCONFIRMSC = ''
AND IT_CONFIRM-ZCONFIRMSE = '' AND IT_CONFIRM-ZCONFIRMBIT =
'' AND IT_CONFIRM-ZCONFIRMBIT2 = ''
AND IT_CONFIRM-ZCONFIRMBUR = '' ) .
DELETE FROM ZHT010_FORGE
WHERE ZBUDAT = IT_CONFIRM-ZBUDAT
AND MATNR = IT_CONFIRM-MATNR
AND PLWRK = IT_CONFIRM-PLWRK
AND ZSHIFT = IT_CONFIRM-ZSHIFT
AND ZWRKCE = IT_CONFIRM-ZWRKCE
AND TIMLO = IT_CONFIRM-TIMLO.
ENDIF.
ENDIF.
W_COUNT = W_COUNT + 1.
ENDLOOP.
LEAVE PROGRAM.
WHEN 'RW'.
SET SCREEN 0.
WHEN 'BACK'.
SET SCREEN 0.
ENDCASE.
*& Form check_flag_routine
text
--> p1 text
<-- p2 text
FORM CHECK_FLAG_ROUTINE .
IF IT_CONFIRM-ZCONFIRM EQ 'X'.
IT_CONFIRM-ZACQTY = 0.
ENDIF.
IF IT_CONFIRM-ZCONFIRMREJ EQ 'X'.
IT_CONFIRM-ZREQTY = 0.
ENDIF.
IF IT_CONFIRM-ZCONFIRMSC EQ 'X'.
IT_CONFIRM-ZSCQTY = 0.
ENDIF.
IF IT_CONFIRM-ZCONFIRMSE EQ 'X'.
IT_CONFIRM-ZSEQTY = 0.
ENDIF.
IF IT_CONFIRM-ZCONFIRMBIT EQ 'X'.
IT_CONFIRM-ENDBIT = 0.
ENDIF.
IF IT_CONFIRM-ZCONFIRMBIT2 EQ 'X'.
IT_CONFIRM-ENDBIT2 = 0.
ENDIF.
ENDFORM. " check_flag_routine
*& Form f001-read_mat
text
--> p1 text
<-- p2 text
FORM F001-READ_MAT .
DATA :W_FERTH LIKE MARA-FERTH.
**Note: BREMS = 'X' - give limited explosion
MEHRS = 'X' - give the multi level explosion
LOOP AT IT_CONFIRM.
CLEAR W_STLAL.
SELECT SINGLE STLAL INTO W_STLAL FROM MKAL WHERE WERKS = PR_WERKS AND
MATNR = IT_CONFIRM-MATNR AND
VERID = W_VERID.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
BREMS = 'X'
CAPID = 'PP01'
DATUV = SY-DATUM
MEHRS = 'X'
MTNRV = IT_CONFIRM-MATNR
WERKS = IT_CONFIRM-PLWRK
STLAL = W_STLAL
TABLES
STB = IT_STPOX
EXCEPTIONS
ALT_NOT_FOUND = 1
CALL_INVALID = 2
MATERIAL_NOT_FOUND = 3
MISSING_AUTHORIZATION = 4
NO_BOM_FOUND = 5
NO_PLANT_DATA = 6
NO_SUITABLE_BOM_FOUND = 7
CONVERSION_ERROR = 8
OTHERS = 9.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DELETE IT_STPOX WHERE DUMPS = 'x'.
SORT IT_STPOX.
LOOP AT IT_STPOX INTO WA_STPOX.
CLEAR W_BUOM.
SELECT SINGLE MEINS INTO W_BUOM
FROM MARA WHERE MATNR = IT_CONFIRM-ZWIRECD.
CLEAR IT_ST.
IT_ST-MATNR = IT_CONFIRM-MATNR.
IT_ST-WIRECD = IT_CONFIRM-ZWIRECD.
IT_ST-UOM = W_BUOM.
IT_ST-RMCODE = WA_STPOX-IDNRK.
IT_ST-MEINS = WA_STPOX-MMEIN.
APPEND IT_ST.
ENDLOOP.
ENDLOOP.
SORT IT_ST BY MATNR.
CLEAR: IT_ST.
LOOP AT IT_ST.
SELECT SINGLE FERTH INTO W_FERTH FROM MARA WHERE MATNR = IT_ST-MATNR
CLEAR W_LBKUM.
SELECT SINGLE LBKUM INTO W_LBKUM FROM MBEW
WHERE MBEW~MATNR = IT_ST-WIRECD
AND MBEW~BWKEY = PR_WERKS
AND MBEW~BWTAR = ''.
IT_ST-SPC = W_LBKUM.
MODIFY IT_ST INDEX SY-TABIX TRANSPORTING SPC .
ENDLOOP.
ENDFORM. " f001-read_mat
*& Form f002-get_qty
text
--> p1 text
<-- p2 text
---- -
At line-selection and user command
hi,
is it possible to use both at line selecion and at user command at a time.Hi Kiran,
Yes, it is possible to use both at line selecion and at
user command at a time.
AT LINE-SELECTION.
Event in interactive reporting
This event is processed whenever the user chooses a valid line in the list (i.e. a line generated by statements such as WRITE,ULINE, or SKIP) with the cursor and presses the function key which has the function PICK in the interface definition. This should normally be the function key F2, because it has the same effect as double-clicking the mouse, or clicking once in the case of a hotspot.
The processing for the event AT LINE-SELECTION usually generates further list output (the details list) which completely covers the current list display. If you want the current list display to remain visible (to aid user orientation), you can do this with the key word WINDOW.
AT USER-COMMAND.
Event in interactive reporting
This event is executed whenever the user presses a function key in the list or makes an entry in the command field.
DATA: NUMBER1 TYPE I VALUE 20,
NUMBER2 TYPE I VALUE 5,
RESULT TYPE I.
START-OF-SELECTION.
WRITE: / NUMBER1, '?', NUMBER2.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'ADD'.
RESULT = NUMBER1 + NUMBER2.
WHEN 'SUBT'.
RESULT = NUMBER1 - NUMBER2.
WHEN 'MULT'.
RESULT = NUMBER1 * NUMBER2.
WHEN 'DIVI'.
RESULT = NUMBER1 / NUMBER2.
WHEN OTHERS.
WRITE 'Unknown function code'.
EXIT.
ENDCASE.
WRITE: / 'Result:', RESULT.
After entry of a function code, the appropriate processing is performed under the event AT USER-COMMAND and the result is displayed in the details list.
Reward points if helpful,
Rgds,
Sumana -
At line Selection & get cursor field
Hi friends,
Could any one of u please explain about<b> at line selection</b> and <b>GET CURSOR FIELD</b> ( GET CURSOR FIELD FNAM VALUE FVAL) with sample program.
Jai.Hello,
AT - Events in lists
Variants:
1. AT LINE-SELECTION.
2. AT USER-COMMAND.
3. AT PFn.
Variant 1
AT LINE-SELECTION.
Effect
Event in interactive reporting
This event is processed whenever the user chooses a valid line in the list (i.e. a line generated by statements such as WRITE,ULINE, or SKIP) with the cursor and presses the function key which has the function PICK in the interface definition. This should normally be the function key F2, because it has the same effect as double-clicking the mouse, or clicking once in the case of a hotspot.
The processing for the event AT LINE-SELECTION usually generates further list output (the details list) which completely covers the current list display. If you want the current list display to remain visible (to aid user orientation), you can do this with the key word WINDOW.
In most cases, the information from the selected line is used to retrieve more comprehensive information by direct reading. When displaying the original list, you store the key terms needed for this in the HIDE area of the output line.
Note
You can choose a line and start new processing even in the details lists.
The following system fields are useful for orientation purposes, since their values change with each interactive event executed.
SY-LSIND
Index of list created by current event (basic list = 0, 1st details list = 1, ...)
SY-PFKEY
Status of displayed list (SET PF-STATUS)
SY-LISEL
Contents of selected line
SY-LILLI
Absolute number of this line in the displayed list
SY-LISTI
Index of this list - usually SY-LSIND - 1 (READ LINE)
SY-CUROW
Last cursor position: Line in window
SY-CUCOL
Last cursor position: Column in window (GET CURSOR)
SY-CPAGE
1st displayed page of displayed list
SY-STARO
1st displayed line of this page of displayed list
SY-STACO
1st displayed column of displayed list (SCROLL LIST)
The system field SY-LSIND defines the line selection level (basic list: SY-LSIND = 0).
System field for interactive reporting are also contained in the System Fields for Lists documentation.
Example
DATA TEXT(20).
START-OF-SELECTION.
PERFORM WRITE_AND_HIDE USING SPACE SPACE.
AT LINE-SELECTION.
CASE TEXT.
WHEN 'List index'.
PERFORM WRITE_AND_HIDE USING 'X' SPACE.
WHEN 'User command'.
PERFORM WRITE_AND_HIDE USING SPACE 'X'.
WHEN OTHERS.
SUBTRACT 2 FROM SY-LSIND.
PERFORM WRITE_AND_HIDE USING SPACE SPACE.
ENDCASE.
CLEAR TEXT.
FORM WRITE_AND_HIDE USING P_FLAG_LSIND P_FLAG_UCOMM.
WRITE / 'SY-LSIND:'.
PERFORM WRITE_WITH_COLOR USING SY-LSIND P_FLAG_LSIND.
TEXT = 'List index'.
HIDE TEXT.
WRITE / 'SY-UCOMM:'.
PERFORM WRITE_WITH_COLOR USING SY-UCOMM P_FLAG_UCOMM.
TEXT = 'User command'.
HIDE TEXT.
IF SY-LSIND > 0.
WRITE / 'PICK here to go back one list level'.
ENDIF.
ENDFORM.
FORM WRITE_WITH_COLOR USING P_VALUE
P_FLAG_POSITIVE.
IF P_FLAG_POSITIVE = SPACE.
WRITE P_VALUE COLOR COL_NORMAL.
ELSE.
WRITE P_VALUE COLOR COL_POSITIVE.
ENDIF.
ENDFORM.
Depending on whether you choose the line at SY-LSIND or SY-UCOMM, the next details list contains the corresponding value with the color "positive". If the line is chosen without HIDE information, the list level is reduced.
Variant 2
AT USER-COMMAND.
Effect
Event in interactive reporting
This event is executed whenever the user presses a function key in the list or makes an entry in the command field.
Some functions are executed directly by the system and thus cannot be processed by programs. These include:
PICK
See variant AT LINE-SELECTION
PFn
See variant AT PFn
System command
System command
PRI
Print
BACK
Back
RW
Cancel
P...
Scroll function (e.g.: P+ , P- , PP+3, PS-- etc.)
Instead of this functions, you can use the SCROLL statement in programs.
Since many of these system functions begin with "P", you should avoid using this letter to start your own function codes.
Otherwise, the effect is as for AT LINE-SELECTION; also, the current function code is stored in the system field SY-UCOMM.
Example
DATA: NUMBER1 TYPE I VALUE 20,
NUMBER2 TYPE I VALUE 5,
RESULT TYPE I.
START-OF-SELECTION.
WRITE: / NUMBER1, '?', NUMBER2.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'ADD'.
RESULT = NUMBER1 + NUMBER2.
WHEN 'SUBT'.
RESULT = NUMBER1 - NUMBER2.
WHEN 'MULT'.
RESULT = NUMBER1 * NUMBER2.
WHEN 'DIVI'.
RESULT = NUMBER1 / NUMBER2.
WHEN OTHERS.
WRITE 'Unknown function code'.
EXIT.
ENDCASE.
WRITE: / 'Result:', RESULT.
After entry of a function code, the appropriate processing is performed under the event AT USER-COMMAND and the result is displayed in the details list.
Variant 3
AT PFn.
Effect
Event in interactive reporting
Here, n stands for a numeric value between 0 and 99.
This event is executed whenever the user presses a function key that contains the function code PFn in the interface definition. The default status for lists contains some of these functions.
Otherwise, the effect is as for the variant AT LINE-SELECTION. The cursor can be on any line.
Notes
To ensure that the chosen function is executed only for valid lines, you can check the current HIDE information.
This variant should be used only for test or prototyping purposes, since the default status is not normally used. Instead, you should set a program-specific status with SET PF-STATUS. This should not contain any function codes beginning with "PF".
Example
DATA NUMBER LIKE SY-INDEX.
START-OF-SELECTION.
DO 9 TIMES.
WRITE: / 'Row', (2) SY-INDEX.
NUMBER = SY-INDEX.
HIDE NUMBER.
ENDDO.
AT PF8.
CHECK NOT NUMBER IS INITIAL.
WRITE: / 'Cursor was in row', (2) NUMBER.
CLEAR NUMBER.
Additional help
User Action on Detail Lists
GET
Basic form 2 GET CURSOR. ...
Variants:
1. GET CURSOR FIELD f.
2. GET CURSOR LINE line.
Variant 1
GET CURSOR FIELD f.
Additions:
1. ... OFFSET off
2. ... LINE line
3. ... VALUE g
4. ... LENGTH len
5. ... AREA
Effect
Transfers the name of the field at the cursor position to the field f.
The return code is set as follows:
SY-SUBRC = 0:
Cursor was positioned on a field.
SY-SUBRC = 4:
Cursor was not positioned on a field.
Note
Unlike screen processing, list processing allows you to output literals, field symbols, parameters and local variables of subroutines. Literals, local variables and VALUE parameters of subroutines are treated like fields without names (field name SPACE, return value 0).
Otherwise, GET CURSOR FIELD returns only names of global fields, regardless of whether they are addressed directly (i.e. by "WRITE"), by field symbols or by reference parameters.
Example
DATA: CURSORFIELD(20),
GLOB_FIELD(20) VALUE 'global field',
REF_PARAMETER(30) VALUE 'parameter by reference',
VAL_PARAMETER(30) VALUE 'parameter by value',
FIELD_SYMBOL(20) VALUE 'field symbol'.
FIELD-SYMBOLS: <F> TYPE ANY.
PERFORM WRITE_LIST USING REF_PARAMETER VAL_PARAMETER.
ASSIGN GLOB_FIELD TO <F>.
AT LINE-SELECTION.
GET CURSOR FIELD CURSORFIELD.
WRITE: / CURSORFIELD, SY-SUBRC.
FORM WRITE_LIST USING RP VALUE(VP).
DATA: LOK_FIELD(20) VALUE 'local field'.
ASSIGN FIELD_SYMBOL TO <F>.
WRITE: / GLOB_FIELD, / LOC_FIELD,
/ RP, / VP,
/ 'literal', / FIELD_SYMBOL.
ENDFORM.
When you double-click the word " global field", CURSORFIELD contains the field name GLOB_FIELD, on "parameter by reference" the field name REF_PARAMETER, on " field symbol" the field name FIELD_SYMBOL, and on "local field", "parameter by value" and "literal" the value SPACE.
Addition 1
... OFFSET off
Effect
Copies the position of the cursor within the field to the field off (1st column = 0).
If the cursor is not somewhere within a field (SY-SUBRC = 4), the offset value is set to 0.
Addition 2
... LINE line
Effect
With step loops, lin contains the number of the loop line where the cursor stands. In list processing, this is the absolute line number (as stored in the system field SY-LILLI).
Addition 3
... VALUE g
Effect
g contains the value of the field where the cursor stands, always in output format (character display).
Addition 4
... LENGTH len
Effect
len contains the output length of the field where the cursor stands.
Addition 5
... AREA a
Effect
If the cursor is positioned on the field of a table view control, the name of the control is placed in the field a.
Variant 2
GET CURSOR LINE line.
Additions:
1. ... OFFSET off
2. ... VALUE g
3. ... LENGTH len
Effect
As for variant 1 with addition LINE, except that there are differences with the return code and the effect of the additions.
The return code is set as follows:
SY-SUBRC = 0:
The cursor is on one of the list lines (list processing) or on a loop line (step loop).
SY-SUBRC = 4:
The cursor is not on one of the list or loop lines.
Addition 1
... OFFSET off
Effect
Applies to list processing only. The field off contains the position of the cursor relative to the beginning of the list line (1st column = 0). With horizontally shifted lists, the offset value can thus be greater than 0, even if the cursor is positioned on the extreme left of the window.
Addition 2
... VALUE g
Effect
List processing only. The field g contains the list line where the cursor is positioned.
Addition 3
... LENGTH len
Effect
List processing only. len contains the length of the line (LINE-SIZE).
Related
SET CURSOR
Additional help
Setting the Cursor Position
Reading Lists at the Cursor Position
Vasanth -
How do I execute some code when a line of a table control is selected?
Hi,
I would like to execute some code when a line of a table control is selected. At the moment I have to select one or multiple rows and then press enter, this forces a screen refresh and my code is executed but I would like the code to be executed as soon as any line is selected.
I've done something like this using ALV grids and object orientated code but is there a way of doing this in a normal non-OO table control?
Thanks in advance.
GillHi,
U need to declare a char1 field for marking (mark field). This will reflect with value 'X' in your tcontrol internal table for all the selected rows.
Now u need to handle the okcode for enter in your PAI.
There u need to loop through the table for all marked fields.
There after u can do what ever u want.
Venkat. -
At line-selection in SAP Query ( Infoset ) code
Hi all ,
Here is one for you : can I put somehow the following code in a Sap Query ( at infoset level of course ) :
at line-selection.
set parameter id 'BUK' field XXX-bukrs.
set parameter id 'BLN' field XXX-belnr.
set parameter id 'GJR' field XXX-gjahr.
call transaction 'FB03' and skip first screen.
(In other words I would like to see the documents behind a line in the list)
Some explains : my query's output would be ABAP list , the bukrs, belnr, gjahr fields are on the lines of my resulting list, and my problem is with those XXX 's - I don't know where are stored the lines of my ABAP list.
I'm pretty new at ABAP so any idea and explains about the generated SAP Query code
is appreciated . I looked at the final code but seemed very complex for my level.
Please guide me in this area ( I know the basic things like writing pretty simple reports )
Thanks !
Best of all
ZoliHi,
You need to add extra piece of code as below:
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = gd_repid
i_callback_top_of_page = 'TOP-OF-PAGE'
I_callback_user_command = 'USER_COMMAND' "see FORM
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
i_save = 'X'
tables
t_outtab = it_ekko
exceptions
program_error = 1
others = 2.
* FORM USER_COMMAND *
* --> R_UCOMM *
* --> RS_SELFIELD *
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
* Check function code
CASE r_ucomm.
WHEN '&IC1'.
* Check field clicked on within ALVgrid report
IF rs_selfield-fieldname = 'EBELN'.
* Read data table, using index of row user clicked on
READ TABLE it_ekko INTO wa_ekko INDEX rs_selfield-tabindex.
* Set parameter ID for transaction screen field
SET PARAMETER ID 'BES' FIELD wa_ekko-ebeln.
* Sxecute transaction ME23N, and skip initial data entry screen
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.
ENDFORM.
"For further information please refer the link below :
http://www.sapdev.co.uk/reporting/alv/alvgrid_ucomm.htm
Thanks,
Sriram Ponna. -
Multiple line selection and then capturing the selected values
Dear all
in my alv program ,i need to capture multiple line selections using checkboxes.
I have appended check boxes by adding it in the internal table & filling in field catalog.
but problem is i'm not able to capture multiple selected check boxes dynamically,
i could capture only the last selected check box,
option i found was to use class method get-selected-rows,but i'm unable to use it properly, could anyone explain in detail
i have already gone through the various examples in sdn but i am not able to work out.
like using parameters etc....
CAN ANY ONE HELP ME WITH THE CODE
help reqired immediately,
Thanks in advance.Hi Ankur,
In the PAI, just after the selection of your user event, button or menu,
add this code before getting the selected records.
<b>CALL METHOD grid1->check_changed_data
IMPORTING
e_valid = ws_x.</b>
where grid1 TYPE REF TO cl_gui_alv_grid,
Now fetch the selected records.
Check this code for reference
C O M P A N Y C O N F I D E N T I A L **
Care should be taken to prevent its unauthorized use. **
REPORT zfipost MESSAGE-ID f4 NO STANDARD PAGE HEADING .
AUTHOR : Susmitha Susan Thomas
DATE : August 18, 2005
*Abridged Version : This report generates a list in Abap List Viewer of
all the selected records in VBKPF/VBSEG. * *
(TRANSACTION ZPPD:Modified from transaction FBV0)
-- Class definition--
CLASS lcl_event_receiver DEFINITION DEFERRED.
--Tables--
TABLES: vbkpf. " Belegkopf
TABLES: tsp1d, pri_params, spopli.
TYPE-POOLS slis.
---- Global Variables -
DATA: anzkr(6) TYPE n,
lsind LIKE sy-lsind,
no_output(1) TYPE c,
records(1) TYPE c,
xpick(1) TYPE c,
xpickc(1) TYPE c,
xbinp(1) TYPE c,
rc LIKE syst-subrc,
ok_code LIKE sy-ucomm,
index TYPE i,
char_x(1) TYPE c VALUE 'X',
post TYPE c,
ans TYPE n,
user(40) TYPE c.
DATA :BEGIN OF i_doctype OCCURS 0,
blart LIKE vbkpf-blart,
END OF i_doctype.
--AlV Initialization--
DATA: gs_layout TYPE lvc_s_layo,
gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat,
gs_index_rows TYPE lvc_t_row,
l_layout TYPE disvariant,
g_repid LIKE sy-repid,
g_max TYPE i VALUE 100,
ws_row_idx TYPE lvc_t_row ,
ws_row_no TYPE lvc_t_roid,
i_excl_func TYPE ui_functions,
ls_prnt TYPE lvc_s_prnt,
refresh TYPE c,
i_fieldcat TYPE lvc_t_fcat,
post(1) TYPE c,
accr_def(1) TYPE c,
rev_cd(3) TYPE c,
ch(1) TYPE c.
DATA: list_index LIKE sy-lsind,
flag TYPE n VALUE 0,
fl TYPE n VALUE 0,
g_container TYPE scrfname VALUE 'GRID_CONTAINER',
grid_container TYPE REF TO cl_gui_docking_container,
grid1 TYPE REF TO cl_gui_alv_grid,
custom_container1 TYPE REF TO cl_gui_custom_container,
event_receiver TYPE REF TO lcl_event_receiver,
gt_vbkpf1 TYPE STANDARD TABLE OF vbkpf WITH HEADER LINE,
i_vbkpf TYPE TABLE OF vbkpf WITH HEADER LINE,
i_ws_row_idx LIKE ws_row_idx WITH HEADER LINE.
---Internal table containing details of selected documents--
DATA : BEGIN OF gt_vbkpf OCCURS 0,
xpick(1) TYPE c,
belnr LIKE vbkpf-belnr,
gjahr LIKE vbkpf-gjahr,
bukrs LIKE vbkpf-bukrs,
blart LIKE vbkpf-blart,
budat LIKE vbkpf-budat,
bldat LIKE vbkpf-bldat,
bktxt LIKE vbkpf-bktxt,
waers LIKE vbkpf-waers,
usnam LIKE vbkpf-usnam,
xblnr LIKE vbkpf-xblnr,
rev_code(3) TYPE c,
rev_rsn(15) TYPE c,
rev_date(10) TYPE c,
linecolor(4) TYPE c,
END OF gt_vbkpf.
--Table to store long text--
DATA : BEGIN OF inline OCCURS 0,
tdformat TYPE tdformat,
tdline TYPE tdline,
END OF inline.
DATA: thead LIKE thead OCCURS 0 WITH HEADER LINE.
-- Records to be posted--
DATA: BEGIN OF tbkpf OCCURS 5.
INCLUDE STRUCTURE vbkpf.
DATA: END OF tbkpf.
---- Constants -
CONSTANTS: awtyp_bkpf TYPE awtyp VALUE 'BKPF '.
CONSTANTS: awtyp_space TYPE awtyp VALUE ' '.
Selection Screen
PARAMETER: funcl LIKE t020-funcl NO-DISPLAY. "P(ost),D(isplay),U(pd)
SELECTION-SCREEN SKIP 2.
SELECT-OPTIONS:
p_bukrs FOR vbkpf-bukrs,
p_belnr FOR vbkpf-belnr,
p_gjahr FOR vbkpf-gjahr,
p_budat FOR vbkpf-budat,
p_bldat FOR vbkpf-bldat,
p_blart FOR vbkpf-blart,
p_xblnr FOR vbkpf-xblnr,
p_bktxt FOR vbkpf-bktxt,
p_usnam FOR vbkpf-usnam.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK blk
WITH FRAME TITLE text-010 NO INTERVALS.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(35) text-002.
PARAMETER norm_doc TYPE c
RADIOBUTTON GROUP doc DEFAULT 'X' .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(35) text-001.
PARAMETER ad_doc TYPE c
RADIOBUTTON GROUP doc .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(35) text-003.
PARAMETER all_doc TYPE c
RADIOBUTTON GROUP doc .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK blk.
CLASS lcl_event_receiver DEFINITION
For capturing events on the ALV *
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
to capture all recently changed data.
handle_data_changed FOR EVENT data_changed OF
cl_gui_alv_grid
IMPORTING er_data_changed,
for hot spot
handle_hotspot FOR EVENT hotspot_click OF
cl_gui_alv_grid
IMPORTING e_column_id e_row_id.
ENDCLASS. " lcl_event_receiver (Definition)
CLASS lcl_event_receiver (Implementation)
For capturing events on the ALV *
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_data_changed.
PERFORM f2200_handle_data_changed USING er_data_changed.
ENDMETHOD.
METHOD handle_hotspot.
PERFORM f2201_handle_hotspot USING e_column_id e_row_id .
ENDMETHOD.
ENDCLASS. " lcl_event_receiver (Implementation)
AT SELECTION-SCREEN
AT SELECTION-SCREEN.
START-OF-SELECTION
START-OF-SELECTION.
---- Colors -
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
-------------------- Status und Title Bar----------------------------*
SET PF-STATUS funcl.
SET TITLEBAR funcl.
-- Read Records--
SELECT * FROM vbkpf INTO TABLE gt_vbkpf1
WHERE bukrs IN p_bukrs
AND ausbk IN p_bukrs
AND belnr IN p_belnr
AND gjahr IN p_gjahr
AND budat IN p_budat
AND bldat IN p_bldat
AND blart IN p_blart
AND bktxt IN p_bktxt
AND xblnr IN p_xblnr
AND usnam IN p_usnam
AND bstat EQ 'V'
AND ( awtyp IN (awtyp_bkpf, awtyp_space) OR
awtyp IS null )
ORDER BY PRIMARY KEY.
----Call the ALV Screen -
PERFORM alv_display.
END-OF-SELECTION.
FORM BELEG_PICKUP *
Indicate changing of the selected external record *
FORM beleg_pickup.
SET PARAMETER ID 'BUK' FIELD vbkpf-bukrs.
SET PARAMETER ID 'GJR' FIELD vbkpf-gjahr.
SET PARAMETER ID 'BLP' FIELD vbkpf-belnr.
CASE funcl.
WHEN 'P'.
IF anzkr IS INITIAL.
CALL FUNCTION 'ZPRELIMINARY_POSTING_POST_D'
EXPORTING
bukrs = vbkpf-bukrs
belnr = vbkpf-belnr
gjahr = vbkpf-gjahr.
ELSE.
IF sy-ucomm EQ 'BUCH'.
CALL FUNCTION 'ZPRELIMINARY_POSTING_POST_ALL'
EXPORTING
synch = char_x
bupbi = xbinp
TABLES
t_vbkpf = tbkpf.
ELSE.
CALL FUNCTION 'ZPRELIMINARY_POSTING_POST_ALL'
EXPORTING
bupbi = xbinp
TABLES
t_vbkpf = tbkpf.
wait up to 3 seconds.
commit work.
ENDIF.
ENDIF.
WHEN OTHERS.
IF sy-tcode = 'ZPPD'.
funcl = 'P'.
ENDIF.
CALL FUNCTION 'ZPRELIMINARY_POSTING_DISPLAY'
EXPORTING
bukrs = vbkpf-bukrs
belnr = vbkpf-belnr
gjahr = vbkpf-gjahr.
ENDCASE.
ENDFORM.
FORM TBKPF_FUELLEN *
Include records for posting in TBKPF *
FORM tbkpf_fuellen.
records = 'X'.
LOOP AT gt_vbkpf.
IF gt_vbkpf-xpick = 'X'.
CLEAR anzkr.
CLEAR records.
IF sy-subrc = 0.
anzkr = anzkr + 1.
MOVE-CORRESPONDING gt_vbkpf TO tbkpf.
APPEND tbkpf.
ELSE.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
FORM MALL *
Select All documents *
FORM mall.
LOOP AT gt_vbkpf.
gt_vbkpf-xpick = 'X'.
MODIFY gt_vbkpf.
ENDLOOP.
refresh = 'X'.
CALL METHOD grid1->refresh_table_display.
ENDFORM.
FORM EMAL *
Unselect all documents *
FORM emal.
LOOP AT gt_vbkpf.
gt_vbkpf-xpick = ' '.
MODIFY gt_vbkpf.
ENDLOOP.
refresh = 'X'.
CALL METHOD grid1->refresh_table_display.
ENDFORM.
Form alv_display *
To display the details on an ALV. *
FORM alv_display.
CALL SCREEN 100.
ENDFORM. " alv_display
*& Module PB0_100 OUTPUT
MODULE pb0_100 OUTPUT.
SET PF-STATUS 'MAIN100'.
SET TITLEBAR 'POSTDOC'.
--To verify that posting is complete.--
---- Setting the layout -
IF grid1 IS INITIAL.
PERFORM fill_table.
-- Initializing the field catalog--
PERFORM fieldcat_init CHANGING i_fieldcat.
-- Initializing the ALV GRID and CONTAINER--
CLEAR gs_layout.
gs_layout-info_fname = 'linecolor'.
gs_layout-grid_title = 'Parked Documents'(100).
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
gs_layout-sel_mode = 'A'.
gs_layout-edit = 'X'.
l_layout-report = sy-repid.
------ Create a custom container control for ALV Control----
IF cl_gui_alv_grid=>offline( ) IS INITIAL.
CREATE OBJECT grid_container
EXPORTING
dynnr = '100'
ratio = '100'
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
others = 6.
IF sy-subrc NE 0.
MESSAGE i000 WITH text-007. " Error in object creation
LEAVE LIST-PROCESSING.
ENDIF.
-- Create an instance of alv control--
CREATE OBJECT grid1
EXPORTING
i_lifetime = 1
i_parent = grid_container.
---- Disable all unwanted button in the ALV grid -
PERFORM disable_functions TABLES i_excl_func.
---- Call the display function of ALV grid -
CALL METHOD grid1->set_table_for_first_display
EXPORTING
is_variant = l_layout
i_save = 'A'
is_layout = gs_layout
is_print = ls_prnt
it_toolbar_excluding = i_excl_func
CHANGING it_outtab = gt_vbkpf[]
it_fieldcatalog = i_fieldcat.
ENDIF. " IF cl_gui_alv_grid=>offline IS INITIAL
CALL METHOD grid1->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD grid1->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
---- Create a reciever object to handle events -
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_data_changed FOR grid1.
SET HANDLER event_receiver->handle_hotspot FOR grid1.
CALL METHOD cl_gui_control=>set_focus EXPORTING control = grid1.
ENDIF. " IF grid1 IS INITIAL.
ENDMODULE. " PB0_100 OUTPUT
*& Form fill_table
Fills the data table to be passed to the ALV grid.
FORM fill_table.
LOOP AT gt_vbkpf1.
MOVE-CORRESPONDING gt_vbkpf1 TO gt_vbkpf.
IF ad_doc = 'X' OR all_doc = 'X'.
thead-tdobject = 'BELEG'.
CONCATENATE gt_vbkpf1-bukrs
gt_vbkpf1-belnr
gt_vbkpf1-gjahr INTO thead-tdname.
thead-tdspras = sy-langu.
thead-tdid = '0004'.
PERFORM read_text.
READ TABLE inline INDEX 1.
gt_vbkpf-rev_code = inline-tdline.
REFRESH inline.
CLEAR inline.
thead-tdid = '0005'.
PERFORM read_text.
READ TABLE inline INDEX 1.
gt_vbkpf-rev_rsn = inline-tdline.
REFRESH inline.
CLEAR inline.
thead-tdid = '0006'.
PERFORM read_text.
READ TABLE inline INDEX 1.
gt_vbkpf-rev_date = inline-tdline.
REFRESH inline.
CLEAR inline.
REFRESH inline.
CLEAR inline.
ENDIF.
APPEND gt_vbkpf.
CLEAR gt_vbkpf.
ENDLOOP.
ENDLOOP.
ENDFORM.
*& Form fieldcat_init
Initialize the field catalog
FORM fieldcat_init CHANGING i_fieldcat TYPE lvc_t_fcat.
DATA: i_fldcat TYPE lvc_t_fcat WITH HEADER LINE.
CHECKBOX
CLEAR i_fldcat.
i_fldcat-fieldname = 'XPICK'.
i_fldcat-checkbox = 'X'.
i_fldcat-key = 'X'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-outputlen = '4'.
i_fldcat-scrtext_l = 'ChkB'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'BELNR'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-hotspot = 'X'.
i_fldcat-outputlen = '15'.
i_fldcat-scrtext_l = 'Document Number'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'GJAHR'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'FYear'.
i_fldcat-outputlen = '5'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'BUKRS'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'CCode'.
i_fldcat-outputlen = '5'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'BLART'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'Type'.
i_fldcat-outputlen = '6'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'BLDAT'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'Doc Date'.
i_fldcat-outputlen = '12'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'BUDAT'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'Park Date'.
i_fldcat-outputlen = '12'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'BKTXT'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'Document Header Text'.
i_fldcat-outputlen = '25'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'WAERS'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'Curr'.
i_fldcat-outputlen = '7'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'USNAM'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'Parked By'.
i_fldcat-outputlen = '13'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'XBLNR'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'Reference Text'.
i_fldcat-outputlen = '19'.
APPEND i_fldcat TO i_fieldcat.
IF ad_doc = 'X' OR all_doc = 'X'.
CLEAR i_fldcat.
i_fldcat-fieldname = 'REV_CODE'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'RC'.
i_fldcat-outputlen = '2'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'REV_RSN'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'Rev Reason'.
i_fldcat-outputlen = '15'.
APPEND i_fldcat TO i_fieldcat.
CLEAR i_fldcat.
i_fldcat-fieldname = 'REV_DATE'.
i_fldcat-tabname = 'GT_VBKPF'.
i_fldcat-key = 'X'.
i_fldcat-scrtext_l = 'Rev Date'.
i_fldcat-outputlen = '10'.
APPEND i_fldcat TO i_fieldcat.
ENDIF.
ENDFORM. " fieldcat_init
*& Module PAI_100 INPUT
MODULE pai_100 INPUT.
CASE ok_code.
WHEN 'BACK'.
IF sy-dynnr = '1000'.
PERFORM exit_program.
ELSEIF sy-dynnr = '0100'.
LEAVE TO TRANSACTION 'ZPPD'.
ENDIF.
WHEN 'EXIT'.
IF sy-dynnr = '1000'.
PERFORM exit_program.
ELSEIF sy-dynnr = '0100'.
LEAVE TO TRANSACTION 'ZPPD'.
ENDIF.
WHEN '%EX'.
IF sy-dynnr = '1000'.
PERFORM exit_program.
ELSEIF sy-dynnr = '0100'.
LEAVE TO TRANSACTION 'ZPPD'.
ENDIF.
WHEN 'BINP'.
DATA : ws_x TYPE c VALUE 'X'.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Posting Documents Via Batch Input'
text_question =
'Are you sure you want to post all the selected documents?'
text_button_1 = 'Yes'
text_button_2 = 'No'
start_column = 25
start_row = 6
IMPORTING
answer = ans.
IF ans = '1'.
CALL METHOD grid1->check_changed_data
IMPORTING
e_valid = ws_x.
xbinp = 'X'.
PERFORM tbkpf_fuellen.
IF records = 'X'.
MESSAGE s999(zv) WITH text-007.
ELSE.
PERFORM beleg_pickup.
ENDIF.
ENDIF.
WHEN 'MALL'.
PERFORM mall.
WHEN 'EMAL'.
PERFORM emal.
WHEN 'RW'.
IF sy-dynnr = '1000'.
PERFORM exit_program.
ELSEIF sy-dynnr = '0100'.
LEAVE TO TRANSACTION 'ZPPD'.
ENDIF.
WHEN 'BUCH'.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Posting Document'
text_question =
'Are you sure you want to post all documents selected?'
text_button_1 = 'Yes'
text_button_2 = 'No'
start_column = 25
start_row = 6
IMPORTING
answer = ans.
IF ans = '1'.
CALL METHOD grid1->check_changed_data
IMPORTING
e_valid = ws_x.
perform tbkpf_fuellen.
IF records = 'X'.
MESSAGE s999(zv) WITH text-007.
ELSE.
PERFORM beleg_pickup.
ENDIF.
ENDIF.
WHEN 'PICK'.
DATA : check TYPE n,
no_rec TYPE c.
check = 0.
no_rec = 'X'.
CALL METHOD grid1->check_changed_data
IMPORTING
e_valid = ws_x.
index = 0.
LOOP AT gt_vbkpf.
funcl = 'D'.
index = index + 1.
IF gt_vbkpf-xpick = 'X'.
check = 1.
CLEAR no_rec.
READ TABLE gt_vbkpf1 INDEX index INTO vbkpf.
PERFORM beleg_pickup.
ENDIF.
ENDLOOP.
IF check = 0.
CALL METHOD grid1->get_selected_rows
IMPORTING
et_index_rows = ws_row_idx.
IF NOT ws_row_idx IS INITIAL.
CLEAR no_rec.
ENDIF.
LOOP AT ws_row_idx INTO i_ws_row_idx.
READ TABLE gt_vbkpf1 INDEX i_ws_row_idx-index INTO vbkpf.
PERFORM beleg_pickup.
ENDLOOP.
IF no_rec = 'X'.
MESSAGE s999(zv) WITH text-007.
ENDIF.
ENDIF.
WHEN '&RNT_PREV'.
CALL METHOD grid1->set_function_code
CHANGING c_ucomm = ok_code.
WHEN '&RNT'.
CALL METHOD grid1->set_function_code
CHANGING c_ucomm = ok_code.
WHEN '%SC'.
CALL METHOD grid1->set_function_code
CHANGING c_ucomm = ok_code.
WHEN '&OL0'.
CALL METHOD grid1->set_function_code
CHANGING c_ucomm = ok_code.
WHEN '&OAD'.
CALL METHOD grid1->set_function_code
CHANGING c_ucomm = ok_code.
WHEN '&AVE'.
CALL METHOD grid1->set_function_code
CHANGING c_ucomm = ok_code.
WHEN '&AQW'.
CALL METHOD grid1->set_function_code
CHANGING c_ucomm = ok_code.
WHEN '&XXL'.
CALL METHOD grid1->set_function_code
CHANGING c_ucomm = ok_code.
WHEN '%PC'.
CALL METHOD grid1->set_function_code
CHANGING c_ucomm = ok_code.
WHEN '&CRTEMPL'.
CALL METHOD grid1->set_function_code
CHANGING c_ucomm = ok_code.
WHEN OTHERS.
do nothing.
ENDCASE.
CLEAR ok_code.
ENDMODULE. " PAI_100 INPUT
*& Form exit_program
Exits from the program after freeing the grid and container *
FORM exit_program.
IF NOT grid_container IS INITIAL.
CALL METHOD grid_container->free.
ENDIF.
IF NOT grid1 IS INITIAL.
CALL METHOD grid1->free
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
ENDIF.
LEAVE PROGRAM.
ENDFORM. " exit_program
*& Form f2200_handle_data_changed
To handle event of change in data in ALV.
-->P_ER_DATA_CHANGED text
FORM f2200_handle_data_changed USING ir_data_changed
TYPE REF TO
cl_alv_changed_data_protocol.
DATA : ls_mod_cell TYPE lvc_s_modi ,
lv_value TYPE lvc_value,
lflg_check TYPE i.
DATA : wa_vbkpf LIKE LINE OF gt_vbkpf.
SORT ir_data_changed->mt_mod_cells BY row_id .
LOOP AT ir_data_changed->mt_mod_cells
INTO ls_mod_cell
WHERE fieldname = 'I_PICK'.
IF NOT ls_mod_cell-value IS INITIAL .
CALL METHOD ir_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cell-row_id
i_fieldname = ls_mod_cell-fieldname
i_value = ls_mod_cell-value.
READ TABLE gt_vbkpf INTO wa_vbkpf
INDEX ls_mod_cell-row_id.
IF ls_mod_cell-fieldname = 'I_PICK'.
wa_vbkpf-xpick = ls_mod_cell-value.
ENDIF.
MODIFY gt_vbkpf FROM wa_vbkpf
INDEX ls_mod_cell-row_id.
ENDIF .
ENDLOOP .
ENDFORM. " f2200_handle_data_changed
*& Form f2201_handle_hotspot
To handle event of clicking on hyperlink
-->P_E_COLUMN_ID text
FORM f2201_handle_hotspot USING p_e_column_id p_e_row_id.
READ TABLE gt_vbkpf1 INDEX p_e_row_id INTO vbkpf.
funcl = 'D'.
PERFORM beleg_pickup.
PERFORM exit_program.
ENDFORM. " f2201_handle_hotspot
Regards,
Susmitha
Dont forget to reward points for useful answers -
DYNP_VALUES_READ Limitations for multiple lines select options
Hi all !
First post here, but a tough one I think. Here is my inquiry :
I have worked on an specific abap function used in many long abap list reports. Theses reports are launched in background processing. The aim of this routine is to stop the report execution if a background job with the same selection parameters is already launched for the current user (to Prevent useless several launch of a time-expensive program).
Because this routine is dynamic, I read the selection screen of the current report with the function 'DYNP_VALUES_READ'. And I compare the result with the variant of the backgroung job (read with function 'RS_VARIANT_CONTENTS').
The real problem is that function "DYNP_VALUES_READ" only extract the first line of select-options. I found an alternative solution to extract the select options values (a dynamic assign with field symbols), but external conversions (for WBS elements for example ) are lost, so the comparison detects differences between the background job's variant values and the current selection screen values.
Does anybody know a way to get entire select options values from a selection screen just as they are displayed on screen ?
Thanks for reading my message
Message was edited by: Thomas BRICOUTThomas,
Perhaps the following code will help you. A function module in the code captures everything on the selection screen into an internal table. It doesn't actually capture the information the way you want it, but I believe you will be able to work with it to achieve your desired result. If it doesn't meet your needs, it is still useful for printing selection screen fields and their values.
Bruce
report zybttes2.
tables: zf137, " 137 General Ledger Document Details Table
zf137a. " 137 General Ledger Document Details Table, Archive
selection-screen begin of block b1 with frame title text-004." BCT003
parameters: p_zf137 radiobutton group xxx, " BCT003
p_zf137a radiobutton group xxx. " BCT003
selection-screen end of block b1. " BCT003
selection-screen begin of block parameter with frame title text-001.
selection-screen skip 1.
select-options: s_date for zf137-zzpostdat.
selection-screen skip 1.
selection-screen begin of line.
selection-screen comment 3(6) text-002.
selection-screen end of line.
selection-screen skip 1.
select-options: s_loan for zf137-zzloan.
selection-screen skip 1.
selection-screen begin of line.
selection-screen comment 3(6) text-003.
selection-screen end of line.
selection-screen skip 1.
select-options: s_ccentr for zf137-zzcostctr.
selection-screen skip 1.
selection-screen end of block parameter.
data: ww(3) type n.
data: zz(3) type c.
data: c1(1) type c value '0'.
do 2 times.
ww = ww + 1.
zz = ww. shift zz left deleting leading c1.
write: / zz.
enddo.
Capture and then print the selection screen fields and their values
data: begin of i_info occurs 20,
flag,
olength type x,
line like raldb-infoline,
end of i_info.
call function 'PRINT_SELECTIONS'
exporting
mode = 'TABLE'
rname = sy-cprog
rvariante = sy-slset
tables
infotab = i_info.
loop at i_info.
write: / i_info-line.
endloop.
write: / 'end'. -
"AT LINE-SELECTION" event in a Query (SQ01 or SQ02)
Hi there
I want to know if it's possible to put "AT LINE-SELECTION" event in an ABAP Query? I'm trying that in SQ02 - the infoset - but nothing happens when I double-click on the output lines. I cannot find any place to type codes in SQ01.
The purpose is to call a transaction VA03 when people double-click on the output field "sales order number" and here is the code I put in "Free coding" section of SQ02.
AT LINE-SELECTION.
DATA: w_cucol TYPE sy-cucol.
w_cucol = sy-cucol + sy-staco.
w_cucol = w_cucol - 2.
IF w_cucol BETWEEN 103 AND 119.
SET PARAMETER ID 'AUN' FIELD vbkd-vbeln.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
yuHi ,
You must create infoset based on join VBKD with VBAK and LIPS.
Also you must put VBAK-VBELN and LIPS-VBELN as a column output.
There is no problem to use 2 report assignment ( there is no loss ).
There is no necessity to use " some ABAP code at line-selection ".
This works.
By the way is more correct from the beginning to formulate the issue including all the data about your problem and not include them by adding a little at a time.
Regards. -
Table control: Line selection single issue
Hi experts,
I have created a table control and in the screen painter I have defined the line selection as "Single" for table control.
The table control can display upto 20 lines in a screen and i can select a single record only which pertains to my requirement. if I try to select two records it will not allow.
Issue: consider i select a single record from the first 20 lines displayed in screen, then i scroll the records in the table control so that it displays the records from 21 to 40. if I select a single record now from line 21 to 40, the first record that i selected is not getting deselected. That is, totally two lines are getting selected.
How to overcome this issue
Thanks in advance
Regards
AnandOk
The "problem" is here:
Types: Begin of ty_ic,
ic(20),
desc(20),
sel(1) <--------------------------------
End of ty_ic.
You've ha a field for selected line and that field is used in table control definition as you've written:
"Note: wa_ic is the structure used in table control and wa_ic-sel is the mark field defined the table control attributes"
So you're using the structure WA_IC as header line of internal table IT_IC and also as input/put field of your table control (I mean the screen fields of table control are based on WA_IC).
You don't need any code in PBO to move the data from internal table to table control, because the headerline of IT_IC and field of table control are the same, infact you've implemented only the code in PAI to save the data from table control to IT_IC:
Loop at it_ic.
Modify it_ic from wa_ic index tc_ic-current_line
Endloop
t's a good solution if it needs to transfer all data to table control automatically: it doesn't need any code in PBO
but, of course, there'll be a problem when you don't need to display something, in this case you have to think a solution, I mean you have to write a code in order to avoid to display those data.
It's the case of the selected line: in your situation all selected lines keep the selection, because the code to clear IT_IC-SEL is missing: only the user can deselect a line, but if he doesn't do it, the line will remain selected after navigation.
So you make to be sure to clear all selected lines are not displayed.
You need to create a code in PAI out of the loop of table control where you clear the flag SEL, in order to do it you need to consider:
- The index of the first record displayed in table control is stored in field TC_IC-TOP_LINE
- The index of the last record displayed in table control can be calculated: the variable SY-LOOPC indicates how many rows can be displayed in table control, so the last record will be: TC_IC-TOP_LINE + SY-LOOPC.
So you need to clear the field SEL for all records not displayed, a code like this:
PROCESS PAI.
LOOP AT IT_IC.
MODULE GET_LOOPC.
ENDLOOP.
MODULE CLEAR_SEL.
MODULE GET_LOOPC..
TOT_LINE_DISPLAYED = SY-LOOPC.
ENDMODULE
MODULE CLEAR_SEL.
* Here you need to clear the selection of the records before of TOP_LINE
IF TC_IC-TOP_LINE > 1.
LOOP AT IT_IC INTO WA_IC TO TC_IC-TOP_LINE.
CLEAR WA_IC-SEL.
MODIFY IT_IC FROM WA_IC.
ENDLOOP.
ENDIF.
* Here you need to clear the selection of the records after the last one:
LAST_INDEX = TOT_LINE_DISPLAYED + TC_IC-TOP_LINE.
DESCRIBE TABLE IT_IC LINES SY-TABIX,
IF SY-TABIX > LAST_INDEX.
LOOP AT IT_IC INTO WA_IC FROM LAST_INDEX.
CLEAR WA_IC-SEL.
MODIFY IT_IC FROM WA_IC.
ENDLOOP.
ENDIF.
ENDMODULE. -
At Line-selection in ALV for more than one field.
How to use At Line-selection in ALV Basic Report where there are more than one field for displaying Secondary Lists.
Ex: In Basic List there are 3 fields Volume_m Volume_y and Volume_i.When i click on any of the field i need to display the secondary list for that particular field.Hi Pavan,
Use User-command event of ALV.
Refer this code :
form BUILD_EVENTCAT using p_i_eventcat TYPE SLIS_T_EVENT.
DATA: I_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = P_I_EVENTCAT
EXCEPTIONS
LIST_TYPE_WRONG = 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.
clear I_event.
read table p_i_eventcat with key name = slis_ev_user_command into I_event.
if sy-subrc = 0.
move 'USER_COMMAND' to I_event-form.
append I_event to p_i_eventcat.
endif.
form USER_COMMAND' using p_ucomm type sy-ucomm
p_selfield type slis_selfield.
case p_ucomm.
WHEN '&IC1'. "&IC1 is the Fcode for double click
Use P_ELFIELD-VALUE for further processing . this will contain the value on which u will double click
endcase.
Reward points if helpful.
Regards,
Hemant -
Problem in triggering at line selection event in ooabap
hi ppl,
Below is the code i did so far using interactive reports,but its showing error "statement END METHOD is missing".
REPORT y_program_on_ooabap1.
CLASS CL DEFINITION
DATA: lf_matnr TYPE matnr.
INITIALIZATION.
PARAMETERS: pa_matnr TYPE matnr.
SELECT-OPTIONS: so_matnr FOR lf_matnr.
CLASS cl DEFINITION
CLASS cl DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF tw,
matnr TYPE matnr,
ernam TYPE ernam,
END OF tw,
tt TYPE STANDARD TABLE OF tw.
TYPES: BEGIN OF tw1,
matnr TYPE matnr,
maktx TYPE maktx,
END OF tw1.
DATA: itab TYPE tt,
wa TYPE tw,
wa1 TYPE tw1.
METHODS: retrive_data,
display_data.
ENDCLASS. "CL DEFINITION
CLASS CL IMPLEMENTATION
CLASS cl IMPLEMENTATION.
METHOD: retrive_data.
SELECT matnr ernam INTO TABLE itab FROM mara
WHERE matnr IN so_matnr.
"RETRIVE_DATA
ENDMETHOD. "retrive_data
METHOD: display_data.
LOOP AT itab INTO wa.
WRITE:/ wa-matnr,
wa-ernam.
ENDLOOP.
AT line-selecion.
CASE: sy-lsind.
WHEN 1.
SELECT SINGLE matnr maktx INTO CORRESPONDING FIELDS OF wa FROM makt WHERE matnr = wa-matnr.
WRITE:/ wa-matnr,
wa-maktx.
ENDMETHOD. "display_data
"DISPLAY_DATA
ENDCLASS. "CL IMPLEMENTATION
DATA: obj TYPE REF TO cl.
START-OF-SELECTION.
CREATE OBJECT: obj.
END-OF-SELECTION.
CALL METHOD obj->retrive_data.
CALL METHOD obj->display_data.hi,
you cannot put Events in methods. instead do as call the method in the event you want like below, or create a new method and call it in the At line selection Event.
CLASS cl IMPLEMENTATION.
METHOD: retrive_data.
SELECT matnr ernam INTO TABLE itab FROM mara
WHERE matnr IN so_matnr.
"RETRIVE_DATA
ENDMETHOD. "retrive_data
METHOD: display_data.
LOOP AT itab INTO wa.
WRITE:/ wa-matnr,
wa-ernam.
ENDLOOP.
ENDMETHOD. "display_data
METHOD: Drilldown
SELECT SINGLE matnr maktx INTO CORRESPONDING FIELDS OF wa FROM makt WHERE matnr = wa-matnr.
WRITE:/ wa-matnr,
wa-maktx.
ENDMETHOD. "Drilldown
ENDCLASS. "CL IMPLEMENTATION
DATA: obj TYPE REF TO cl.
START-OF-SELECTION.
CREATE OBJECT: obj.
END-OF-SELECTION.
CALL METHOD obj->retrive_data.
CALL METHOD obj->display_data.
AT line-selecion.
CASE: sy-lsind.
WHEN 1.
CALL METHOD obj->drilldown.
ENDCASE.
Hope this helps you
Raj
Edited by: Raj on Dec 5, 2008 9:57 AM -
How do I find an event which is triggered on line selection for ALV grid?
Hi,
I'm trying to find an event which is triggered when a user selects a row in the ALV grid. I want to add my own code in to add up the total values of selected lines, but can't find any event which will trigger my method.
I found CLICK_ROW_COL but it's protected so when I try and add a method for it:
PROTECTED SECTION.
METHODS:
select_row
FOR EVENT click_row_col OF cl_gui_alv_grid.
I get the syntax error:
Access to protected event "CLICK_ROW_COL" is not allowed.
Am I using the right event? Am I implementing it correctly?
Any help appreciated. Thanks in advance.
GillI chose to solve this by removing the line select buttons from the ALV and replacing them with a checkbox defined as a hotspot. I then used EVENT hotspot_click FROM cl_gui_alv_grid to highlight the line and change my totals on a single click.
-
CL_GUI_ALV_GRID: Line selection and backend table
Dear community,
is there a way to propagate line selection of ALV GRID GUI automagically to the backend data table?
This is my scenario:
1) A table containing several records with one column 'SELECTED' for selection status
2) ALV_GRID to display the table with layout info for line selection
alv_layo-sel_mode = 'A'.
alv_layo-box_fname = 'SELECTED'.
3) At PBO methods set_table_for_first_display and refresh_table_display are called with the table containing some records marked as 'SELECTED'.
First problem here: 'SELECTED' entries are not propagated to the ALV grid (the lines in the GUI are not marked). I know I could use set_selected_rows to force the selection, but is this really necessary?
4) Then, at PAI method check_changed_data is called (and yes, event mc_evt_modified is registered).
Second problem: Changes in selection are not propagated automagically to the underlying table. I also know I could use get_selected_rows to force this update manually, but again: is this really necessary?
Can anyone explain the behavior why sorting etc. is propagated automatically to the underlying table, but not the selection of rows? Am I missing something?
Hint: Removing box_fname = 'SELECTED' and setting the fieldcatalog to display the column 'SELECTED' as editable checkbox works also. But our users are familiar with the rowmark, so this is no option.
Any suggestions are welcome.
Thanks,
Torsten.
Here an (almost) complete listing of the code:
PROCESS BEFORE OUTPUT.
MODULE SET_STATUS_TITLE_0100.
MODULE INIT_ALV_GRID_0100.
MODULE DISPLAY_DATA_0100.
MODULE SET_GRID_SELECTION_0100.
PROCESS AFTER INPUT.
MODULE EXIT_COMMAND_0100 AT EXIT-COMMAND.
MODULE UPDATE_TABLE_DATA_0100.
MODULE USER_COMMAND_0100.
MODULE init_alv_grid_0100 OUTPUT.
IF NOT gr_container IS BOUND.
* Container erzeugen
CREATE OBJECT gr_container ...
* ALV Grid erstellen
CREATE OBJECT gr_alv_grid ...
* ALV für die erste Anzeige vorbereiten
gs_alv_layo-zebra = on. " Gestreifte Anzeige
gs_alv_layo-no_toolbar = on. " Keine Toolbar
gs_alv_layo-no_rowmark = off. " Keine Zeilenmarkierung
gs_alv_layo-edit = off. " Editieren ermöglichen
gs_alv_layo-sel_mode = 'A'. " Selektionsmodus
gs_alv_layo-cwidth_opt = off. " Optimierte Spaltenbreite!
gs_alv_layo-info_fname = 'LCOLOR'. " ALV-Control: Feldname mit
" einfacher Farbcodierung für
" Zeile
gs_alv_layo-ctab_fname = 'CCOLOR'. " ALV-Control: Feldname mit
" komplexer Farbcodierung
" für Zellen
gs_alv_layo-box_fname = 'SELECTED'. " Markierte Zeilen
* Feldkatalog für die Anzeige vorbereiten
* CLEAR gs_fcat. " Mehrfachsel. ermöglichen
* gs_fcat-fieldname = 'SELECTED'. " Dazu muss das Feld für die
* gs_fcat-edit = on. " Selektion editierbar sein.
* gs_fcat-checkbox = on. " Ausserdem muss die
** gs_fcat-outputlen = '3'. " Zeilenmark. eingeschaltet
* APPEND gs_fcat TO gt_fcat. " und box_fname gesetzt sein.
* Ereignisbehandlung
SET HANDLER
lcl_event_handler=>on_click
lcl_event_handler=>on_hotspot
lcl_event_handler=>on_double_click
lcl_event_handler=>on_user_command
lcl_event_handler=>on_data_changed
FOR gr_alv_grid.
CALL METHOD gr_alv_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified
EXCEPTIONS
error = 1
OTHERS = 2.
ENDIF.
ENDMODULE. " INIT_ALV_GRID_0100 OUTPUT
MODULE display_data_0100 OUTPUT.
* PBO Modul für alle weiteren Anzeigezyklen.
IF gr_alv_grid IS BOUND.
CALL METHOD gr_alv_grid->set_table_for_first_display ...
ENDIF.
ENDMODULE. " DISPLAY_DATA_0100 OUTPUT
MODULE set_grid_selection_0100 OUTPUT.
IF gr_alv_grid IS BOUND.
CALL METHOD gr_alv_grid->refresh_table_display.
ENDIF.
* Alterative: Set selected rows manually
* CALL METHOD gr_alv_grid->set_selected_rows
ENDMODULE. " SET_GRID_SELECTION_0100 OUTPUT
MODULE update_table_data_0100 INPUT.
CALL METHOD gr_alv_grid->check_changed_data.
* Alternative: Get selected rows and update table manually
* CALL METHOD gr_alv_grid->get_selected_rows ...
ENDMODULE. " UPDATE_TABLE_DATA_0100 INPUTHello Torsten
I may be wrong but I think the field LVC_S_LAYO-BOX_FNAME is a relict from the stone-age SLIS-based ALV programming.
Using modern OO-based ALV we do not need any kind of "MARK" row but we have the appropriate methods available.
Regards
Uwe
Maybe you are looking for
-
FaceTime apple ID is not working
For FaceTime I wanted to sign out of my family Apple ID and use my own personal Apple ID because my family was receiving my FaceTime calls. A window keeps popping up after I press the sign in button and it keeps asking me to put in my password and ev
-
Text substitution does not work
I cannot make the text substitution feature to work. Specifically, the only substitution that is being done, is the one for "On my way!" which was there by default. Anything else I add is simply ignored. This happens in all applications (TextEdit, Ma
-
Can I use iCloud like a local network backup system? I'm thinking of replacing my Western Digital backup. Thanks for the info.
-
I am trying to upload a podcast rss and I am getting timeouts
I am attepting to upload an rss podcast but I am getting timeouts. Does anyone know how to correct this?
-
Logic Time Compression/Expansion vs. WAVES SoundShifter
I'm considering upgrading my WAVES Platinum to the Diamond, largely because of the SoundShifter plug-in. Does anybody have any experience with the WAVES SoundShifter plug-in? Is it significantly better than what is already included in Logic 8? Thanks