EXIDV2 from VEKP ?
Hi,
We have a requirement to pick EXIDV2 from VEKP.This is an enhancement to the existing report.The query is in Infoset.Tables used in join are KNVV,KNA1,VBBE,ZNCUSTHRCHRCY. Other table like vbap,vbfa,likp,vbbe were used as select single with individual query in record processing area.
Business the existing report to be modified to accomadate VEKP EXIDV2 as this contains the tracking number.
It would be multiple under a delivery implies if in a delivery their are 5 items and are packed in seperate boxes all five items will have different tracking number which would be avaliable in exidv2.
Can you please help me out in writing query ?
Code in record proessing
CLEAR: ORDER, ORDERLINE, DELIVERY.
fill in base order/delivery info (determined by VBBE line type)
IF VBBE-VBTYP = 'J'. " DELIVERY LINE TYPE
DELIVERY = VBBE-VBELN.
get corresponding order and order line from document flow
SELECT SINGLE VBELV POSNV INTO (ORDER, ORDERLINE) FROM VBFA
WHERE VBELN = VBBE-VBELN
AND POSNN = VBBE-POSNR
AND VBTYP_N = 'J'.
VBBE-VBELN = ORDER. " OVERLAY ORDER INTO DOCUMENT FIELD FOR RPT CALL
*SELECT EXIDV UP TO 1 ROWS INTO (TRKNUM) FROM VEKP
WHERE VPOBJKEY = LIKP-VBELN.
*ENDSELECT.
ELSE. " ORDER LINE TYPE
ORDER = VBBE-VBELN.
ORDERLINE = VBBE-POSNR.
if this order line has a conf qty of zero, check the pre-built VBBE
summary table to see if it has any unconf qty. Only keep the record
if it does and build a dummy record to reflect the unconf qty.
IF VBBE-VMENG = 0.
READ TABLE T_VBBE_SUM WITH KEY VBELN = VBBE-VBELN
POSNR = VBBE-POSNR BINARY SEARCH.
CHECK SY-SUBRC = 0. " ONLY KEEP IF ITS FOUND IN TABLE
VBBE-VMENG = T_VBBE_SUM-UCQTY.
VBBE-MBDAT = '99991231'. " SET DUMMY DATE FOR UC QTY
ENDIF.
ENDIF.
get order header, credit info
CLEAR: OCDATE, CUSTPO, CRFLAG, CDFLAG,
SALESORG, VBAK-AUTLF, OENTRYID, HDRBLOCK.
SELECT SINGLE AERDAT AERNAM ALIFSK AVKORG A~VTWEG
AAUTLF ABSTNK C~CMGST
INTO (OCDATE, OENTRYID, HDRBLOCK, SALESORG, VBAK-VTWEG,
VBAK-AUTLF, CUSTPO, CRFLAG)
FROM VBAK AS A
INNER JOIN VBUK AS C ON AVBELN = CVBELN
WHERE A~VBELN = ORDER.
IF CRFLAG = 'B'.
CRFLAG = 'F'. " ONLY FILL WITH F IF DOCUMENT CREDIT STATUS NOT OK
ELSE.
CRFLAG = ' '.
ENDIF.
IF VBAK-AUTLF = 'X'.
CDFLAG = 'CD'.
ENDIF.
get order line info (route for points calculation), VBKD info
CLEAR: OCFLAG, VBAP-ROUTE, VBKD-KZAZU, BRAND, PRODH,UPCNUM. "
SELECT SINGLE PRODH ROUTE MVGR1 EAN11
INTO (PRODH,VBAP-ROUTE,BRAND,UPCNUM)
FROM VBAP
WHERE VBELN = ORDER
AND POSNR = ORDERLINE.
SELECT SINGLE KZAZU
INTO (VBKD-KZAZU)
FROM VBKD
WHERE VBELN = ORDER.
IF VBKD-KZAZU = 'X'.
OCFLAG = 'OC'.
ENDIF.
get material status and ABC indicator
CLEAR: MSTAT, MABC.
SELECT SINGLE AVMSTA BMAABC INTO (MSTAT,MABC)
FROM MVKE AS A
INNER JOIN MARC AS B ON AMATNR = BMATNR
WHERE A~MATNR = VBBE-MATNR
AND A~VKORG = SALESORG
AND A~VTWEG = VBAK-VTWEG
AND B~WERKS = VBBE-WERKS.
get deployment indicator
CLEAR: DEPLOYIND.
SELECT ZNINVDPLIR
FROM ZNDSBNW
INTO DEPLOYIND
UP TO 1 ROWS
WHERE MATNR = VBBE-MATNR
AND WERKS = VBBE-WERKS
AND ZNDSBAPLCD = 'DP'.
ENDSELECT.
get points
CLEAR: POINTS.
CALL FUNCTION 'Z_NLB_CALCULATE_POINTS'
EXPORTING PLANT = VBBE-WERKS
MATNR = VBBE-MATNR
KWMENG = VBBE-VMENG
ROUTE = VBAP-ROUTE
IMPORTING POINTS = POINTS
EXCEPTIONS SHIPTYPE_NOT_FOUND = 1
POINTS_NOT_AVAILABLE = 2
PCC_NOT_FOUND = 3
OTHERS = 4.
for deliveries, check for a shipment to get appointment info
CLEAR: APPTDT, APPTTM.
IF VBBE-VBTYP = 'J'. " DELIVERY LINE TYPE
SELECT SINGLE BDPTEN BUPTEN INTO (APPTDT, APPTTM)
FROM VTTP AS A
INNER JOIN VTTK AS B ON ATKNUM = BTKNUM
WHERE A~VBELN = DELIVERY
AND B~TNDRST IN ('AC','CF','AW','NW').
ENDIF.
get requested delivery date, line block off first VBEP schedule line
CLEAR: RQDATE, LNBLOCK.
SELECT SINGLE EDATU LIFSP INTO (RQDATE,LNBLOCK) FROM VBEP
WHERE VBELN = ORDER
AND POSNR = ORDERLINE
AND ETENR = 1.
for orders, get scheduled delivery date from VBEP
CLEAR: SCHDATE.
IF VBBE-VBTYP = 'C'. " ORDER LINE TYPE
IF VBBE-ETENR = 1.
SCHDATE = RQDATE. "USE REQ DLVY DATE ALREADY COMPUTED
ELSE.
SELECT SINGLE EDATU INTO (SCHDATE) FROM VBEP
WHERE VBELN = ORDER
AND POSNR = ORDERLINE
AND ETENR = VBBE-ETENR.
ENDIF.
ELSE. " DELIVERY LINE TYPE
for deliveries, get date from LIKP
SELECT SINGLE LFDAT INTO (SCHDATE) FROM LIKP
WHERE VBELN = DELIVERY.
ENDIF.
compute days late using scheduled and requested delivery dates
DAYSLATE = SCHDATE - RQDATE.
if this is a dummy unconf line, set days late to 999 and schdate to
dummy date
IF VBBE-MBDAT = '99991231'.
DAYSLATE = 999.
SCHDATE = '99991231'.
ENDIF.
get Delivery note comment (first 30 bytes) from order header
CLEAR: ORDCOMMENT.
TEXTNAME = ORDER. " SET NAME PARAMETER WITH ORDER NUMBER
CALL FUNCTION 'READ_TEXT'
EXPORTING ID = 'Z006'
LANGUAGE = 'E'
NAME = TEXTNAME
OBJECT = 'VBBK'
TABLES LINES = TXTLNS
EXCEPTIONS ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
check for successful return and then grab 1st comment line
IF SY-SUBRC = 0.
LOOP AT TXTLNS.
CASE SY-TABIX.
WHEN 1. ORDCOMMENT = TXTLNS-TDLINE. " WILL BE TRUNCED TO 30 BYTES
WHEN OTHERS. EXIT.
ENDCASE.
ENDLOOP.
ENDIF.
service level logic
CLEAR SERVICELEVEL.
IF MABC = 'A' AND DEPLOYIND = 'Y'.
SERVICELEVEL = 'S' .
ELSEIF MABC = 'B' AND DEPLOYIND = 'Y'.
SERVICELEVEL = 'S' .
ELSEIF MABC = 'C' AND DEPLOYIND = 'Y'.
SERVICELEVEL = 'S' .
ELSEIF MABC = 'A' AND DEPLOYIND = 'N'.
SERVICELEVEL = 'N' .
ELSEIF MABC = 'B' AND DEPLOYIND = 'N'.
SERVICELEVEL = 'N' .
ELSEIF MABC = 'C' AND DEPLOYIND = 'N'.
SERVICELEVEL = 'N' .
ENDIF.
Regards,
Rama
Message was edited by:
Sai Rama
Hi Ankur,
I am not going into HU creation screen in VL02N. There is some setting on functional side to create the automatic TO and HU during outbound delivery creation.
When I save the delivery, an entry in HU header table (VEKP) gets created automatically. I want to populate the field VEKP-EXIDV2. But, the EXIT or BADI as mentioned in my previous post is not helping in this case.
I would appreciate if you can throw some light in resolving this problem.
Thanks.
Devendra
Similar Messages
-
START-OF-SELECTION.
PERFORM get_ekes.
PERFORM get_vepo.
PERFORM get_vekp.
PERFORM build_tree.
END-OF-SELECTION.
PERFORM display_tree.
*& Form get_vepo
* text
FORM get_vepo.
SELECT venum
vbeln
FROM vepo INTO TABLE i_vepo
FOR ALL ENTRIES IN i_ekes
WHERE vbeln EQ i_ekes-vbeln.
ENDFORM. "get_vepo
*& Form get_vekp
* text
FORM get_vekp.
SELECT venum
exidv2
FROM vekp INTO TABLE i_vekp
FOR ALL ENTRIES IN i_vepo
WHERE venum EQ i_vepo-venum.
ENDFORM. "get_vekp
*& Form get_ekes
* text
FORM get_ekes.
SELECT ebeln
vbeln
vbelp
xblnr
FROM ekes INTO TABLE i_ekes
WHERE ebeln IN s_ebeln.
ENDFORM. "get_ekes
*& Form
* text
*& Form build_tree
* text
FORM build_tree.
CLEAR : i_node, f_node.
f_node-type = 'T'.
f_node-name = 'Purchase Order'(002).
f_node-tlevel = '01'.
f_node-nlength = '25'.
f_node-color = '5'.
f_node-text1 = 'Purchase Document'.
f_node-tlength1 = '20'.
f_node-tcolor1 = '5'.
f_node-text2 = 'Item Number'.
f_node-tlength2 = '20'.
f_node-tcolor2 = '5'.
f_node-text3 = 'External Document'.
f_node-tlength3 = '25'.
f_node-tcolor3 = '5'.
APPEND f_node TO i_node.
CLEAR f_node.
LOOP AT i_ekes INTO f_ekes.
f_node-type = 'P'.
f_node-tlevel = '02'.
f_node-text1 = f_ekes-ebeln.
f_node-tlength1 = '20'.
f_node-tcolor1 = '3'.
f_node-text2 = f_ekes-vbeln.
f_node-tlength2 = '20'.
f_node-tcolor2 = '3'.
f_node-text3 = f_ekes-vbelp.
f_node-tlength3 = '20'.
f_node-tcolor3 = '3'.
f_node-text4 = f_ekes-xblnr.
f_node-tlength4 = '20'.
f_node-tcolor4 = '3'.
APPEND f_node TO i_node.
CLEAR f_node.
LOOP AT i_vepo INTO f_vepo WHERE vbeln EQ f_ekes-vbeln.
f_node-type = 'P'.
f_node-tlevel = '03'.
f_node-text = f_vepo-vbeln.
f_node-tlength = '20'.
f_node-tcolor = '4'.
f_node-text6 = f_vepo-venum.
f_node-tlength6 = '20'.
f_node-tcolor6 = '4'.
APPEND f_node TO i_node.
CLEAR f_node.
ENDLOOP.
LOOP AT i_vekp INTO f_vekp WHERE venum EQ f_vekp-venum.
f_node-type = 'P'.
f_node-tlevel = '04'.
f_node-text = f_vekp-venum.
f_node-tlength = '20'.
f_node-tcolor = '5'.
f_node-text6 = f_vekp-exidv2.
f_node-tlength6 = '20'.
f_node-tcolor6 = '5'.
APPEND f_node TO i_node.
CLEAR f_node.
ENDLOOP.
ENDLOOP.
ENDFORM. "build_tree
*& Form display_tree
* text
FORM display_tree.
CALL FUNCTION 'RS_TREE_CONSTRUCT'
TABLES
nodetab = i_node
EXCEPTIONS
tree_failure = 1
id_not_found = 2
wrong_relationship = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'RS_TREE_LIST_DISPLAY'
EXPORTING
callback_program = sy-repid.
ENDFORM. "display_tree
this is the code i developed but there is a problem in drop down.hi vineesh ,
this is the full code
TABLES : ekes, vepo, vekp.
TYPES : BEGIN OF ivekp,
venum TYPE vekp-venum,
exidv2 TYPE vekp-exidv2,
END OF ivekp,
BEGIN OF ivepo,
vbeln TYPE vepo-vbeln,
venum TYPE vepo-venum,
END OF ivepo,
BEGIN OF iekes,
ebeln TYPE ekes-ebeln,
vbeln TYPE ekes-vbeln,
vbelp TYPE ekes-vbelp,
xblnr TYPE ekes-xblnr,
END OF iekes.
DATA : i_node TYPE TABLE OF snodetext,
i_vekp TYPE TABLE OF ivekp,
i_vepo TYPE TABLE OF ivepo,
i_ekes TYPE TABLE OF iekes.
DATA : f_node TYPE snodetext,
f_vekp TYPE ivekp,
f_vepo TYPE ivepo,
f_ekes TYPE iekes.
SELECT-OPTIONS :s_ebeln FOR ekes-ebeln.
START-OF-SELECTION.
PERFORM get_ekes.
PERFORM get_vepo.
PERFORM get_vekp.
PERFORM build_tree.
END-OF-SELECTION.
PERFORM display_tree.
*& Form get_vepo
* text
FORM get_vepo.
SELECT venum
vbeln
FROM vepo INTO TABLE i_vepo
FOR ALL ENTRIES IN i_ekes
WHERE vbeln EQ i_ekes-vbeln.
ENDFORM. "get_vepo
*& Form get_vekp
* text
FORM get_vekp.
SELECT venum
exidv2
FROM vekp INTO TABLE i_vekp
FOR ALL ENTRIES IN i_vepo
WHERE venum EQ i_vepo-venum.
ENDFORM. "get_vekp
*& Form get_ekes
* text
FORM get_ekes.
SELECT ebeln
vbeln
vbelp
xblnr
FROM ekes INTO TABLE i_ekes
WHERE ebeln IN s_ebeln.
ENDFORM. "get_ekes
*& Form
* text
*& Form build_tree
* text
FORM build_tree.
CLEAR : i_node, f_node.
f_node-type = 'T'.
f_node-name = 'Purchase Order'(002).
f_node-tlevel = '01'.
f_node-nlength = '25'.
f_node-color = '5'.
f_node-text1 = 'Purchase Document'.
f_node-tlength1 = '20'.
f_node-tcolor1 = '5'.
f_node-text2 = 'Item Number'.
f_node-tlength2 = '20'.
f_node-tcolor2 = '5'.
f_node-text3 = 'External Document'.
f_node-tlength3 = '25'.
f_node-tcolor3 = '5'.
APPEND f_node TO i_node.
CLEAR f_node.
LOOP AT i_ekes INTO f_ekes.
f_node-type = 'P'.
f_node-tlevel = '02'.
f_node-text1 = f_ekes-ebeln.
f_node-tlength1 = '20'.
f_node-tcolor1 = '3'.
f_node-text2 = f_ekes-vbeln.
f_node-tlength2 = '20'.
f_node-tcolor2 = '3'.
f_node-text3 = f_ekes-vbelp.
f_node-tlength3 = '20'.
f_node-tcolor3 = '3'.
f_node-text4 = f_ekes-xblnr.
f_node-tlength4 = '20'.
f_node-tcolor4 = '3'.
APPEND f_node TO i_node.
CLEAR f_node.
LOOP AT i_vepo INTO f_vepo WHERE vbeln EQ f_ekes-vbeln.
f_node-type = 'P'.
f_node-tlevel = '03'.
f_node-text = f_vepo-vbeln.
f_node-tlength = '20'.
f_node-tcolor = '4'.
f_node-text6 = f_vepo-venum.
f_node-tlength6 = '20'.
f_node-tcolor6 = '4'.
APPEND f_node TO i_node.
CLEAR f_node.
ENDLOOP.
LOOP AT i_vekp INTO f_vekp WHERE venum EQ f_vekp-venum.
f_node-type = 'P'.
f_node-tlevel = '04'.
f_node-text = f_vekp-venum.
f_node-tlength = '20'.
f_node-tcolor = '5'.
f_node-text6 = f_vekp-exidv2.
f_node-tlength6 = '20'.
f_node-tcolor6 = '5'.
APPEND f_node TO i_node.
CLEAR f_node.
ENDLOOP.
ENDLOOP.
ENDFORM. "build_tree
*& Form display_tree
* text
FORM display_tree.
CALL FUNCTION 'RS_TREE_CONSTRUCT'
TABLES
nodetab = i_node
EXCEPTIONS
tree_failure = 1
id_not_found = 2
wrong_relationship = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'RS_TREE_LIST_DISPLAY'
EXPORTING
callback_program = sy-repid.
ENDFORM. "display_tree -
Hi Gurus,
I have Inbound Idoc which is working fine ,
but it's status is showing
51 Error: Application document not posted.
What does this mean, My Idoc FM is doing all it's part which required.
Can any please suggest me .
Thanks ,
RajHello,
What you've coded looks good. Another way of error Handling can be found as below. In the below Example, I am validating the Handling Unit Number got from the IDoc.
Validation for Handling Unit ID (EXIDV2 From IDOC) - Begin
CLEAR: i_vekp.
SELECT venum
exidv
exidv2
FROM vekp INTO CORRESPONDING FIELDS OF
TABLE i_vekp
WHERE venum NE space AND
exidv NE space AND
exidv2 = wa_z1ctrlmm-exidv2.
IF sy-subrc EQ 0.
DESCRIBE TABLE i_vekp.
IF sy-tfill GT 1.
CLEAR: wa_idoc_status.
CLEAR: wa_vendor.
READ TABLE i_vendor INTO wa_vendor INDEX 1.
ws_c_flag = c_x.
wa_idoc_status-docnum = wa_idoc_control-docnum.
wa_idoc_status-status = c_51.
wa_idoc_status-msgty = c_e.
wa_idoc_status-msgid = c_msgclas.
wa_idoc_status-msgno = '004'.
wa_idoc_status-msgv1 = wa_vendor-v_batch.
APPEND wa_idoc_status TO i_idoc_status.
CLEAR: wa_idoc_status.
Here, I am not updating the IDOC_STATUS directly. Instead, I've taken one Temporary Table I_IDOC_STATUS and finally, after all the Validations are done & all the Statuses are updated in the I_IDOC_STATUS, I am updating the IDOC_STATUS Table at the end of the Function module as below.
IF Err_Flag = space.
wa_idoc_status-docnum = wa_idoc_control-docnum.
wa_idoc_status-status = c_53.
wa_idoc_status-msgty = c_s.
wa_idoc_status-msgid = c_msgclas.
wa_idoc_status-msgno = '007'.
append wa_idoc_status to I_IDoc_status.
else.
wa_idoc_status-docnum = wa_idoc_control-docnum.
wa_idoc_status-status = c_51.
wa_idoc_status-msgty = c_e.
wa_idoc_status-msgid = c_msgclas.
wa_idoc_status-msgno = '004'.
append wa_idoc_status to I_IDoc_status.
endif.
IDOC_STATUS[] = I_IDOC_STATUS[].
ENDFUNCTION.
This is how a typical Error Handling technique should be while processing a Custom Inbound Function Module. At any point in time during the Function Module, catching the Message, either Success or Failure is important otherwise, you may end up posting the IDoc with Status 51 or 62 or 64 Status which doesn't make any sense.
Thanks and Regards,
Venkat Phani Prasad Konduri -
Hello Experts ,
I want to fetch VEKP-EXIDV2. I have Sales Order No (VBAK-VBELN).Please suggest any Function Module or Logic.
Thanks.Hi,
Do like this....
SELECT vbeln
vbelv
FROM vbfa
INTO CORRESPONDING FIELDS OF TABLE it_vbfa
WHERE vbtyp_n = 'J'
AND vbtyp_v = 'C'
AND vbelv = vbak-vbeln.
SELECT vpobjkey
venum
exidv2
brgew
gewei
FROM vekp
INTO CORRESPONDING FIELDS OF TABLE <your internl table>
for all entries in it_vbfa
WHERE vpobjkey = it_vbfa-vbeln. ..
Regards
Debarshi -
How to update the field VEKP-EXIDV2 in HU
Hi,
I need to update the field EXIDV2 in VEKP table. Do you know what function module to use? And please indicate the necessary fields to be used. Thanks.
LalynHi Prajith,
I looked at the FM you suggested. But I think, that FM gives me the value of the EXIDV2. I should be changing the value EXIDV2 in VEKP.THanks anyway.
Lalyn -
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 have to delete HU's from a delivery. I need to delete all of them except a couple. I found this link in SDN
Re: Delete handling unit
have been trying to implement this but everytime I get a short dump saying 'Runtime error CSSQL_ARRAY_INSERT_DUPREC'. Its urgent so can someone help me out. I am attaching my code here as per the link above
*& Report Z_DELV_DEL_HU
*& This progam will delete all the HU's assigned to a delivery
REPORT Z_DELV_DEL_HU NO STANDARD PAGE HEADING
LINE-COUNT 60
LINE-SIZE 132.
TABLES: ltak,
vekp,
vepo.
DATA: l_vbkok LIKE vbkok,
lt_verko LIKE verko OCCURS 0 WITH HEADER LINE,
lt_verpo LIKE verpo OCCURS 0 WITH HEADER LINE,
l_venum type VEKP-VENUM,
lv_venum type vekp-venum,
lt_et_created_hus LIKE vekpvb OCCURS 0 WITH HEADER LINE,
it_venum TYPE TABLE OF HUM_VENUM,
wA_venum TYPE HUM_VENUM,
lt_vekp type table of vekp,
wa_vekp type vekp,
it_verpo_tab LIKE VERPO OCCURS 0 WITH HEADER LINE,
it_vbpok LIKE VBPOK OCCURS 0 WITH HEADER LINE,
it_hu_rem LIKE HUM_REHANG_HU OCCURS 0 WITH HEADER LINE.
PARAMETERS: p_vbeln LIKE likp-vbeln MEMORY ID vl.
DATA: w_vbkok TYPE vbkok,
v_err TYPE c.
CLEAR : w_vbkok.
DATA: c_x(1) value 'X'.
*unlock the delivery.
CALL FUNCTION 'LEINT_DELIVERY_UNLOCK'
EXPORTING
iv_docnr = p_vbeln.
CALL FUNCTION 'STATUS_BUFFER_REFRESH'.
CALL FUNCTION 'HU_PACKING_REFRESH'.
CALL FUNCTION 'SERIAL_INTTAB_REFRESH'
EXPORTING
objects_status_refresh = 'C'.
**Preparing data for the delivery update BAPI
l_vbkok-vbtyp_vl = 'J'.
l_vbkok-vbeln = l_vbkok-vbeln_vl = p_vbeln.
SELECT * FROM vepo
WHERE
vbeln EQ p_vbeln.
Move-corresponding vepo to: it_verpo_tab.
Append it_verpo_tab.
Endselect.
SELECT * FROM vekp into table lt_vekp
WHERE vpobj EQ '01'
AND vpobjkey EQ p_vbeln.
Loop at lt_vekp into wa_vekp.
IF wa_vekp-VHILM EQ 'PALLET'.
MOVE-CORRESPONDING wa_vekp TO: lt_verko,
lt_et_created_hus.
*MOVE-CORRESPONDING wa_vekp TO it_hu_rem.
*it_hu_rem-top_hu_external = wa_vekp-exidv.
*it_hu_rem-top_hu_internal = wa_vekp-venum.
*lt_verko-status = lt_et_created_hus-status = '0060'.
APPEND: lt_verko,
lt_et_created_hus.
*Append it_hu_rem.
ELSE.
CONTINUE.
Endif.
Endloop.
*ENDIF.
*ENDSELECT.
CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
EXPORTING
vbkok_wa = l_vbkok
synchron = 'X'
NO_MESSAGES_UPDATE_1 = ' '
COMMIT = 'X'
delivery = p_vbeln
UPDATE_PICKING = ' '
NICHT_SPERREN_1 = 'X'
IF_CONFIRM_CENTRAL = 'X'
IF_WMPP = ' '
IF_GET_DELIVERY_BUFFERED = ' '
IF_NO_GENERIC_SYSTEM_SERVICE = ' '
IF_DATABASE_UPDATE_1 = '1'
IF_NO_INIT_1 = ' '
IF_NO_READ_1 = ' '
IF_ERROR_MESSAGES_SEND = v_err
IF_NO_BUFFER_REFRESH = ' '
IT_PARTNER_UPDATE =
IT_SERNR_UPDATE =
IF_NO_REMOTE_CHG_1 = ' '
IF_NO_MES_UPD_PACK = ' '
IMPORTING
EF_ERROR_ANY =
EF_ERROR_IN_ITEM_DELETION =
EF_ERROR_IN_POD_UPDATE =
EF_ERROR_IN_INTERFACE =
EF_ERROR_IN_GOODS_ISSUE =
EF_ERROR_IN_FINAL_CHECK =
EF_ERROR_PARTNER_UPDATE =
EF_ERROR_SERNR_UPDATE =
TABLES
VBPOK_TAB = it_vbpok
PROT =
verko_tab = lt_verko
verpo_tab = it_verpo_tab
VBSUPCON_TAB_1 =
IT_VERPO_SERNR =
IT_PACKING =
IT_PACKING_SERNR =
IT_REPACK =
IT_HANDLING_UNITS_1 = it_hu_rem
IT_OBJECTS =
et_created_hus = lt_et_created_hus
TVPOD_TAB =
If NOT v_err is INITIAL and sy-subrc NE 0.
Write:/'Error in deleting HUS'.
ELSE.
Write:/'All the HUs were deleted successfully for delivery:', P_vbeln.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
Endif.
Thanks,
-David.Hi Ramesh,
Our issue is that we have de-assigned the HU's from the inbound delivery and cancelled the inbound delivery but cannot VL09 the outbound delivery as the HU is assigned toa n object and we now believe that this is the inspection lot that gets generated when the inbound delivery is created as the HU's are packed at that point.
At the moment the only solution we have found is to pack teh Hu's in to a virtual HU in VL02n before PGI, this then allows reversal as the HU's with the material content are not directly linked to the delivery.
Thanks
Stuart -
Need help in logic change to avoid select statement inside loop .
Hello all ,
Please see the below code . Here i got the shipment number in internal table IT_VTTK . So For this shipment number i want to get the details from Vekp table in to internal table IT_VEKP . There is no need for me to use For all entries . I have passed the value of it_vekp into work area wa_vekp and getting the details in to IT_vekp using loop.
But since we should not use the select statement inside the loop , Can anybody please tell me how to achieve this functionality .
Instead of passing into work area wa_vttk if i directly use the internal table I'm getting the following error .
"IT_VTTK" is a table without a header line and therefore has no component called "TKNUM".
Hence i have used select statement inside a loop . Please tell me is there any other way to avoid this ?
types:begin of ty_likp,
vbeln type likp-vbeln,
end of ty_likp,
begin of ty_vttk,
tknum type vttk-tknum,
end of ty_vttk.
DATA: IT_VEKP TYPE STANDARD TABLE OF TY_VEKP,
WA_VEKP TYPE TY_VEKP.
data:it_likp type standard table of ty_likp,
wa_likp type ty_likp,
it_likp1 type standard table of ty_likp,
it_vttk type standard table of ty_vttk,
wa_vttk type ty_vttk.
data:w_tknum type vttk-tknum.
if not it_likp is initial .
select vbeln
from
vbfa
into table it_vttk
for all entries in it_likp where vbelv = it_likp-vbeln and vbtyp_n = '8'.
endif .
IF IT_VTTK[] IS NOT INiTIAL.
loop at it_vttk into wa_vttk.
SELECT venum
EXIDV
EXIDV2
BRGEW
NTGEW
GEWEI
TARAG
GEWEI
VHART
INHALT
FROM VEKP INTO TABLE IT_VEKP where VPOBJKEY = wa_vttk-tknum and vpobj = '4'.
endloop.
endif.Hello,
Why would you not like to use FOR ALL ENTRIES in the second select? Is it becasue of the length or type mismatch error between the fields VPOBJKEY and wa_vttk-tknum ?
Vikranth -
Secondary Index Select Statement Problem
Hi friends.
I have a issue with a select statement using secondary index,
SELECT SINGLE * FROM VEKP WHERE VEGR4 EQ STAGE_DOCK
AND VEGR5 NE SPACE
AND WERKS EQ PLANT
%_HINTS ORACLE
'INDEX("&TABLE&" "VEKP~Z3" "VEKP^Z3" "VEKP_____Z3")'.
given above statement is taking long time for processing.
when i check for the same secondary index in vekp table i couldn't see any DB index name with vekp~z3 or vekp^z3 or vekp____z3.
And the sy-subrc value after select statement is 4. (even though values avaliable in VEKP with given where condition values)
My question is why my select statement is taking long time and sy-subrc is 4?
what happens if a secnodary index given in select statement, which is not avaliable in that DB Table?Hi,
> ONe more question: is it possible to give more than one index name in select statement.
yes you can:
read the documentation:
http://download.oracle.com/docs/cd/A97630_01/server.920/a96533/hintsref.htm#5156
index_hint:
This hint can optionally specify one or more indexes:
- If this hint specifies a single available index, then the optimizer performs
a scan on this index. The optimizer does not consider a full table scan or
a scan on another index on the table.
- If this hint specifies a list of available indexes, then the optimizer
considers the cost of a scan on each index in the list and then performs
the index scan with the lowest cost. The optimizer can also choose to
scan multiple indexes from this list and merge the results, if such an
access path has the lowest cost. The optimizer does not consider a full
table scan or a scan on an index not listed in the hint.
- If this hint specifies no indexes, then the optimizer considers the
cost of a scan on each available index on the table and then performs
the index scan with the lowest cost. The optimizer can also choose to
scan multiple indexes and merge the results, if such an access path
has the lowest cost. The optimizer does not consider a full table scan.
Kind regards,
Hermann -
hi experts,
for my smartform this is the driver program i have written.
when exucuted i am getting a error message in teh third select quirey i have written which is in bold here.
the actuall error is coming here <b>WHERE objek = gt_resb-charg</b>
the error is like 'both should be same lenghth and type'.
could u plz suggest me how to correct this.
Tables
TABLES:vekp, "Handling Unit - Header Table
vevw, "Where-Used List for Handling Units
afvc, "Operation within an order
resb, "Reservation/dependent requirements
makt, "Material Descriptions
ausp. "Characteristic Values
TYPES:BEGIN OF ty_vekp,
exidv TYPE vekp-exidv,
handle TYPE vekp-handle,
vpobjkey TYPE vekp-vpobjkey,
END OF ty_vekp.
TYPES:BEGIN OF ty_vevw,
objkey TYPE vevw-objkey,
handle TYPE vevw-handle,
END OF ty_vevw.
TYPES:BEGIN OF ty_afvc,
objnr TYPE afvc-objnr,
ltxa1 TYPE afvc-ltxa1,
aufpl TYPE afvc-aufpl,
aplzl TYPE afvc-aplzl,
END OF ty_afvc.
Internal tables Declaration
DATA: gt_resb TYPE STANDARD TABLE OF resb ,
gt_makt TYPE STANDARD TABLE OF makt ,
gt_ausp TYPE STANDARD TABLE OF ausp .
Work area Declaration
DATA:wa_vekp TYPE ty_vekp,
wa_vevw TYPE ty_vevw,
wa_afvc TYPE ty_afvc.
Variables *
DATA : lf_fmname TYPE rs38l_fnam.
CONSTANTS: c_fmname(25) TYPE c VALUE 'ZWM_HANDLING_UNIT_LABEL'.
S e l e c t O p t i o n s *
P a r a m e t e r s *
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_exidv LIKE vekp-exidv, "Handling Unit Number
p_objkey LIKE vevw-objkey, "Process Order Number
p_ltxa1 LIKE afvc-ltxa1, "Phase Description
p_copies(3) TYPE N. "NO of Copies to be print
SELECTION-SCREEN END OF BLOCK block1.
AT SELECTION-SCREEN
AT SELECTION-SCREEN.
IF p_exidv IS NOT INITIAL.
SELECT single exidv
handle
vpobjkey
FROM vekp
INTO wa_vekp
WHERE exidv = p_exidv.
ENDIF.
IF p_objkey IS NOT INITIAL.
SELECT single objkey
FROM vevw
INTO wa_vevw
WHERE handle = wa_vekp-handle
AND objkey = wa_vekp-vpobjkey
AND objkey = p_objkey.
ENDIF.
IF p_ltxa1 IS NOT INITIAL.
SELECT single objnr
ltxa1
aufpl
aplzl
FROM afvc
INTO wa_afvc
WHERE objnr = wa_vevw-objkey
AND ltxa1 = p_ltxa1 .
ENDIF.
START-OF-SELECTION
START-OF-SELECTION.
SELECT * FROM resb
INTO TABLE gt_resb
WHERE objnr = wa_afvc-objnr
AND aufpl = wa_afvc-aufpl
AND aplzl = wa_afvc-aplzl.
IF NOT gt_resb[] IS INITIAL.
SELECT * FROM makt
INTO TABLE gt_makt
FOR ALL ENTRIES IN gt_resb
WHERE matnr = gt_resb-matnr.
ENDIF.
<b>IF NOT gt_resb[] IS INITIAL.
SELECT * FROM ausp
INTO TABLE gt_ausp
FOR ALL ENTRIES IN gt_resb
WHERE objek = gt_resb-charg
AND atinn IN ('LOBM_VFDAT','LOBM_QNDAT').
</b> ENDIF.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = c_fmname
IMPORTING
FM_NAME = lf_fmname
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
regards,
siri.IF NOT gt_resb[] IS INITIAL.
SELECT * FROM ausp
INTO TABLE gt_ausp
FOR ALL ENTRIES IN gt_resb
WHERE <b>objek = gt_resb-charg</b>
AND atinn IN ('LOBM_VFDAT','LOBM_QNDAT').
OBJEK length is 50 and charg length is 10. So thats why your query is giving error.
declare the gt_resb table by using.
data: begin of gt_resb occurs 0,
<b> charg like ausp-OBJEK,</b>
all other fields
end of gt_resb.
Regards, -
ERROR WHILE TRANSPORTING SMARTFORM
hi friend,
when i try to transport my smartform it shows the error message like this
1. Object CUAD ZINVOICE_11 is inactiv
2. Object REPT ZINVOICE_11 is inactiv
what are CUAD and REPT .
My Code is.
REPORT ZINVOICE_11.
*& Report Z_INVOICE_PRINT *
*& changes done by : Bhupinder Singh
*REPORT Z_INVOICE_PRINT_FINAL .
constants : sf_name(30) type c value 'ZINVOICE_11'.
parameters : vbeln like vbrk-vbeln .
data : perf type c.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS: pre RADIOBUTTON GROUP RAD1 DEFAULT 'X',
post RADIOBUTTON GROUP RAD1.
SELECTION-SCREEN END OF BLOCK B1.
data : form_name type RS38L_FNAM.
data : ivbrk like vbrk occurs 0 with header line.
data : ivbrp1 like vbrp occurs 0 with header line.
data : ivbrpf like vbrp occurs 0 with header line.
data : ivbrp like vbrp occurs 0 with header line.
data : ivbap like vbap occurs 0 with header line.
data : ivbkd like vbkd occurs 0 with header line.
data : ikna1 like kna1 occurs 0 with header line.
data : ikonv like konv occurs 0 with header line.
data : ilips like lips occurs 0 with header line.
data : ivepo like vepo occurs 0 with header line.
data : ivekp like vekp occurs 0 with header line.
data : ikonv1 like konv occurs 0 with header line.
data : ikonv2 like konv occurs 0 with header line.
data : netwt like vekp-ntgew.
data : grwt like vekp-brgew.
select * from vbrp into table ivbrp where vbeln = vbeln.
select * from vbrk into table ivbrk where vbeln = vbeln.
data : vknumv like konv-knumv.
loop at ivbrk.
move ivbrk-knumv to vknumv.
endloop.
loop at ivbrp.
select * from konv into table ikonv1 where knumv = vknumv and kposn = ivbrp-posnr and kschl = 'ZFOB'.
select * from konv into table ikonv2 where knumv = vknumv and kposn = ivbrp-posnr and kschl = 'ZDS3'.
endloop.
data : ins like konv-kbetr.
data : dis like konv-kbetr.
data : fght like KONV-KBETR.
loop at ikonv1.
ins = ins + ikonv1-kbetr.
endloop.
loop at ikonv2.
dis = dis + ikonv2-kbetr.
endloop.
if pre = 'X'.
select * from vbrp into table ivbrp where vbeln = vbeln order by matkl.
loop at ivbrp.
on change of ivbrp-matkl.
clear ivbrp1.
refresh ivbrp1.
move ivbrp-matkl to ivbrp1-arktx.
insert ivbrp1 into ivbrp.
modify ivbrp.
endon.
endloop.
endif.
ivbrpf[] = ivbrp[].
select * from vbrp into table ivbrp where vbeln = vbeln.
select * from vbrk into table ivbrk where vbeln = vbeln.
select * from lips into table ilips for all entries in ivbrp where vbeln = ivbrp-vgbel and posnr = ivbrp-vgpos.
select * from vepo into table ivepo for all entries in ilips where vbeln = ilips-vbeln and posnr = ilips-posnr.
select * from vekp into table ivekp for all entries in ivepo where venum = ivepo-venum.
loop at ivekp.
if ivekp-gewei = 'G'.
ivekp-ntgew = ivekp-ntgew / 1000.
ivekp-brgew = ivekp-brgew / 1000.
endif.
netwt = netwt + ivekp-ntgew.
grwt = grwt + ivekp-brgew.
endloop.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = sf_name
VARIANT = ' '
DIRECT_CALL = ' '
IMPORTING
FM_NAME = form_name
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION form_name
EXPORTING
vbeln = vbeln
perf = perf
pre = pre
post = post
dis = dis
ins = ins
vknumv = vknumv
netwt = netwt
grwt = grwt
fght = fght
VECS = VECS
TABLES
IVBRK = IVBRK
IVBRP = IVBRP
IVBRPf = IVBRPf
IVBaP = IVBaP
IKna1 = IKna1
Ivbkd = Ivbkd
ivbrp1 = ivbrp1
ikonv = ikonv
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
INCLUDE ZINVOICE_STATUS_0001O01.
INCLUDE ZINVOICE_USER_COMMAND_0001I01.
whaT SHOULD i do to active it and transport it.dear bhupi,
When u transporting u r any object , please magke sure u r whole object is in active mode ,otherwise its shows erroe like object in in active mode.
Regards ,
Nikhil Narkhede -
Problem while unpacking an handling unit using FM HU_PACKING_AND_UNPACKING
Hi ,
I want to unpack an HU from an outbound delivery and transfer to other storage location using FM 'HU_PACKING_AND_UNPACKING'.I could find out that only quantities are transferred but unpacking HU is not done.
Below is the code i am using for unpacking.
CALL FUNCTION 'HU_GET_HUS'
EXPORTING
if_lock_hus = 'X'
it_venum = it_hu1
IMPORTING
et_header = it_hdr1
et_items = it_item1
EXCEPTIONS
hus_locked = 1
no_hu_found = 2
fatal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
l_error = 'X'.
CLEAR: g_msgid, g_msgno, g_msgv1,g_msgv2, g_msgv3, g_msgv4.
g_msgid = sy-msgid.
g_msgno = sy-msgno.
g_msgv1 = sy-msgv1.
g_msgv2 = sy-msgv2.
g_msgv3 = sy-msgv3.
g_msgv4 = sy-msgv4.
PERFORM message_scr USING g_msgid g_msgno g_msgv1 g_msgv2 g_msgv3 g_msgv4.
EXIT.
ENDIF.
LOOP AT it_hu1 INTO wa_hu.
CLEAR: wa_item1,l_error,l_post.
READ TABLE it_hdr1 INTO wa_hdr1 WITH KEY venum = wa_hu-venum.
CLEAR : g_venum, g_plant, g_sloc, g_whno, g_stype, g_sbin.
* get the warehouse details
SELECT SINGLE lgnum lgtyp lgpla FROM lein INTO (g_whno,g_stype,g_sbin)
WHERE lenum = wa_hdr1-exidv.
IF sy-subrc EQ 0.
* Get the plant and storage location for WM managed
SELECT SINGLE werks lgort FROM lqua INTO (g_plant, g_sloc)
WHERE lgnum = g_whno
AND lgtyp = g_stype
AND lgpla = g_sbin
AND lenum = wa_hdr1-exidv.
ELSE.
* Get the Venum (Internal HU Number)
SELECT SINGLE venum FROM vekp INTO g_venum
WHERE exidv = wa_hdr1-exidv.
IF sy-subrc EQ 0.
* Get the plant and storage location for Non-WM managed
SELECT SINGLE werks lgort FROM vepo INTO (g_plant, g_sloc)
WHERE venum = wa_hu-venum.
ENDIF.
ENDIF.
READ TABLE it_item1 INTO wa_item1 WITH KEY venum = wa_hu-venum.
IF sy-subrc = 0.
CLEAR :wa_pack_unpack.
MOVE-CORRESPONDING wa_item1 TO wa_pack_unpack.
wa_pack_unpack-venum = wa_item1-venum.
wa_pack_unpack-vepos = wa_item1-vepos.
wa_pack_unpack-velin = wa_item1-velin.
wa_pack_unpack-belnr = wa_item1-vbeln.
wa_pack_unpack-posnr = wa_item1-posnr.
MOVE wa_item1-vemng TO l_vemng.
CONCATENATE l_vemng '-' INTO l_vemng.
CONDENSE l_vemng NO-GAPS.
MOVE l_vemng TO wa_pack_unpack-quantity.
wa_pack_unpack-altme = wa_item1-altme.
wa_pack_unpack-matnr = wa_item1-matnr.
wa_pack_unpack-charg = wa_item1-charg.
wa_pack_unpack-werks = g_plant.
wa_pack_unpack-lgort = g_sloc.
wa_pack_unpack-wdatu = wa_item1-wdatu.
wa_pack_unpack-vfdat = wa_item1-vfdat.
ENDIF.
* *Find the partner location
CLEAR: g_hu_managed, g_partner_sloc.
CALL FUNCTION 'V51S_HU_LGORT'
EXPORTING
if_lgort = g_sloc
if_werks = g_plant
IMPORTING
ef_hu_managed = g_hu_managed
ef_partner_lgort = g_partner_sloc
EXCEPTIONS
lgort_not_exist = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
IF g_hu_managed = 'X'.
wa_pack_unpack-umlgo = g_partner_sloc.
ENDIF.
CALL FUNCTION 'HU_PACKING_AND_UNPACKING'
EXPORTING
is_packing_request = wa_pack_unpack
IMPORTING
es_p_request = wa_pack_unpack
EXCEPTIONS
missing_data = 1
hu_not_changeable = 2
not_possible = 3
customizing = 4
weight = 5
volume = 6
serial_nr = 7
fatal_error = 8
OTHERS = 9.
IF sy-subrc <> 0.
l_error = 'X'.
ELSE.
l_post = 'X'.
ENDIF.
IF l_error IS INITIAL AND l_post EQ 'X'.
CALL FUNCTION 'HU_POST'
EXPORTING
if_synchron = 'X'
if_commit = 'X'
IMPORTING
et_messages = it_messages.
ENDLOOP.
Please help if any parameter need to be set for unpacking of HU.
Please suggest.
Thanks in advance.Hi Sailaja,
I have similar requirements like this before with HU_PACKING_AND_UNPACKING FM. It was a tough debugging before I came up with the right solution. Unfortunately, I was not able to document that code..
But here is what I have been doing.
Youre on track with the solution below, never use BDC as it will only limit the Handling units that you wish to put into.
The function modules that starts with V5_ plays important role as you need to initialize the global variables and table of this function group with values before calling HU_PACKING_AND_UNPACKING FM
Debug inside the Function module, and look for the FM that returns SY-SUBRC <> 0 then set a breakpoint.
Restart the program then debug inside that FM again (and I do not want to go further on the details, I give you the presumption of literacy)
You will find some items that has no value, try to initialize everything by utilizing the FM for this function group V51S.
Happy Debugging. -
ALV display for row s and columns in this format.have ur full points..
Hi ALL
I have to dispalay data in the ALV format as :
Basic
DA
HRA
PF
VPF
20000
500
5000
| 1500 | 600 | |
Details : Basic HRA in one Row and PF , VPF in second Row.
The Amount regarding htese fields are also displayed in the next rows for all emp. numbers.
its urgent for me and need helpful answers...
Regards
Lakhansee the attached code it will display the hierarchial display as per your need
change the internal tables with dat of your own orgn structure and pass it to the fun module.
Description : Pick Status Report
This is an ALV report using the heirarchical ALV list display. The
report selects all deliveries that fulfil the selection criteria
and displays a summary of all items in that delivery with reference
to certain statuses: overall status, goods issue status, transfer
order status, load to pallet status, pallet count status, loaded to
van status, van manifest printed status and end of day manifest
printed status. These statuses have been defined by the business.
There is extra functionality required to trigger printing of the van
and end of day manifests from this report, and to set the loading
end status of a shipment if the last handling unit of a particular
shipment has been loaded onto a van for which the van manifest has
been triggered.
REPORT zwmr_pick_status_report NO STANDARD PAGE HEADING
MESSAGE-ID zw.
Type Pools
TYPE-POOLS: icon, slis.
Tables
TABLES: tvst,
likp,
t30b,
vekp,
*{ INSERT UKMK900355 4
zhu_to_link, "AS03
*} INSERT
zpallettr,
vttk, "MB01
zvantr.
Types
TYPES:
BEGIN OF ty_data,
lgtor LIKE likp-lgtor, " door
vbeln LIKE likp-vbeln, " delivery
wbstk LIKE vbuk-wbstk, " Goods movement status
kostk LIKE vbuk-kostk, " Picking status
posnr LIKE lips-posnr, " item
route LIKE likp-route, " route
wadat LIKE likp-wadat, " goods issue date
lvsta LIKE vbup-lvsta, " warehouse status
packvorschr LIKE vekp-packvorschr, " pack mnemonic
exidv LIKE vekp-exidv, " handling unit
zpallet_no(10), "like zpallettr-zpallet_no, " pallet no
zdep_point LIKE zpallettr-zdep_point, "Departur Point "Jvdm01
zcount_check LIKE zpallettr-zcount_check," count check flag
zvan_no(10), "like zvantr-zvan_no, " van no
zvan_print LIKE zvantr-zvan_print, " van manifest print
tknum LIKE vttk-tknum, " Shipment No "ANV 11523
zeod_print LIKE zvantr-zeod_print, " eod manifest print
zzpackclass LIKE vekp-zzpackclass, " package class
zzti LIKE vekp-zzti, " T.I. value
vstel LIKE likp-vstel, "Shipping point RM050906
anzpk TYPE znopack, "No of packages in dlv MB01+
END OF ty_data.
TYPES:BEGIN OF x_likp ,
vbeln LIKE likp-vbeln,
vstel LIKE likp-vstel, "RM050906
lgtor LIKE likp-lgtor,
zzroute2lgtor LIKE likp-zzroute2lgtor, "MB01
route LIKE likp-route,
wadat LIKE likp-wadat,
zz2route LIKE likp-zz2route, "MB01+
zzexproute LIKE likp-zzexproute, "MB01+
zzroute2 LIKE likp-zzroute2, "MB01+
anzpk LIKE likp-anzpk,
END OF x_likp.
TYPES: BEGIN OF x_vbuk,
vbeln TYPE vbuk-vbeln,
wbstk TYPE vbuk-wbstk, " Goods movement status
kostk TYPE vbuk-kostk, " Picking status
END OF x_vbuk.
TYPES: BEGIN OF x_lips,
vbeln TYPE lips-vbeln, " delivery
posnr TYPE lips-posnr, " item
pstyv TYPE lips-pstyv,
matnr TYPE lips-matnr,
charg TYPE lips-charg,
END OF x_lips.
TYPES: BEGIN OF x_vbup,
vbeln TYPE vbup-vbeln, " delivery
posnr TYPE vbup-posnr, " item
lvsta TYPE vbup-lvsta, " warehouse status
END OF x_vbup.
TYPES: BEGIN OF x_vepo,
venum TYPE vepo-venum, "Internal Handling Unit
Number
vepos TYPE vepo-vepos, "Handling Unit Item
vbeln TYPE vepo-vbeln, " delivery
posnr TYPE vepo-posnr, " item
exidv TYPE vekp-exidv,
END OF x_vepo.
TYPES: BEGIN OF x_vepo1,
venum TYPE vekp-venum, "Internal Handling Unit
Number
exidv TYPE vekp-exidv,
END OF x_vepo1.
Start of changes by ANV SR#11523
TYPES: BEGIN OF x_vttp,
tknum TYPE tknum, " Shipment No
tpnum TYPE tpnum, " Item No
vbeln TYPE vbup-vbeln, " delivery
laufk LIKE vttk-laufk, " leg indicator MB01+
END OF x_vttp.
End of changes by ANV SR#11523
Data
RANGES: r_del FOR likp-vbeln,
r_lgtor FOR likp-lgtor.
RANGES: r_vanno FOR zvantr-zvan_no,
r_palno FOR zpallettr-zpallet_no.
DATA: BEGIN OF number_range OCCURS 0,
mark(1),
id(3),
num(10) TYPE n,
desc LIKE zpalletmd-zdesc,
END OF number_range.
DATA: t_disp_tab TYPE STANDARD TABLE OF zpickdisp,
t_data_tab TYPE ty_data OCCURS 0 WITH HEADER LINE,
it_likp TYPE x_likp OCCURS 0 WITH HEADER LINE, "SUM
it_vbuk TYPE x_vbuk OCCURS 0 WITH HEADER LINE, "SUM
it_lips TYPE x_lips OCCURS 0 WITH HEADER LINE, "SUM
it_vbup TYPE x_vbup OCCURS 0 WITH HEADER LINE, "SUM
it_vepo TYPE x_vepo OCCURS 0 WITH HEADER LINE, "SUM
it_vepo2 TYPE x_vepo OCCURS 0 WITH HEADER LINE, "SUM
*{ INSERT UKMK900355 3
t_vepo_low TYPE x_vepo OCCURS 0 WITH HEADER LINE, " AS01
*} INSERT
it_vepo1 TYPE x_vepo1 OCCURS 0 WITH HEADER LINE, "SUM
it_vttp TYPE x_vttp OCCURS 0 WITH HEADER LINE, "ANV SR#11523
t_disp_head TYPE STANDARD TABLE OF zpickhead.
DATA wa_item_tab TYPE zpickdisp OCCURS 0 WITH HEADER LINE.
"ANV SR#11113
DATA: w_numrnge LIKE number_range,
w_number(10) TYPE n.
DATA: t_likp LIKE likp OCCURS 0 WITH HEADER LINE,
t_lips LIKE lips OCCURS 0 WITH HEADER LINE,
t_vbuk LIKE vbuk OCCURS 0 WITH HEADER LINE,
t_vbup LIKE vbup OCCURS 0 WITH HEADER LINE,
t_vepo LIKE vepo OCCURS 0 WITH HEADER LINE,
t_vekp LIKE vekp OCCURS 0 WITH HEADER LINE,
t_vantr LIKE zvantr OCCURS 0 WITH HEADER LINE,
t_pallettr LIKE zpallettr OCCURS 0 WITH HEADER LINE,
w_likp like likp,
w_lips LIKE lips,
w_vbuk LIKE vbuk,
w_vbup LIKE vbup,
w_vepo LIKE vepo,
w_vekp LIKE vekp,
w_vepo TYPE x_vepo1,
w_vbup TYPE x_vbup,
w_vttp TYPE x_vttp, " ANV SR#11523
w_lips TYPE x_lips,
w_vbuk TYPE x_vbuk,
w_likp TYPE x_likp, "MB01-+
w_tplst LIKE vttk-tplst. "MB01+
DATA: s_variant LIKE disvariant, "MB01+
def_variant LIKE disvariant.
ALV DATA *****
DATA:
g_grid TYPE REF TO cl_gui_alv_grid,
g_sort TYPE slis_t_sortinfo_alv,
g_custom_container TYPE REF TO cl_gui_custom_container,
g_layout TYPE slis_layout_alv,
gt_fieldcat TYPE slis_t_fieldcat_alv,
t_fldcat LIKE LINE OF gt_fieldcat,
g_keyinfo TYPE slis_keyinfo_alv,
gt_events TYPE slis_t_event,
gs_event TYPE slis_alv_event,
w_sy_repid LIKE sy-repid.
DATA: BEGIN OF seltab OCCURS 0.
INCLUDE STRUCTURE rsparams.
DATA: END OF seltab.
SYSTEM GENERATED TABLE CONTROL DATA ********
DECLARATION OF TABLECONTROL 'TC_TABCON' ITSELF
CONTROLS: tc_tabcon TYPE TABLEVIEW USING SCREEN 0100.
LINES OF TABLECONTROL 'TC_TABCON'
DATA: g_tc_tabcon_lines LIKE sy-loopc.
DATA: ok_code LIKE sy-ucomm.
Constants
CONSTANTS: c_data_class LIKE klah-class VALUE 'DG_DATA',
c_mat_class LIKE rmclf-klart VALUE '001',
c_pack LIKE lips-mtart VALUE 'VERP',
c_a(1) VALUE 'A',
c_b(1) VALUE 'B',
c_c(1) VALUE 'C',
c_yes(1) VALUE 'X',
c_no(1) VALUE ' '.
Selection screen
standard report select options block
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-002.
SELECT-OPTIONS:
s_wadat FOR likp-wadat NO-EXTENSION OBLIGATORY. " Goods Issue Date
*parameters: "TR01-
p_vstel like tvst-vstel obligatory. " Shipping Point "TR01-
SELECT-OPTIONS: "TR01+
p_vstel FOR tvst-vstel. " Shipping Point "TR01+
SELECT-OPTIONS:
s_lfart FOR likp-lfart, " Delivery type
s_lgtor FOR t30b-lgtor, " Door selection
s_exidv FOR vekp-exidv, " Handling Unit
s_vbeln FOR likp-vbeln, " Delivery "MB01-+
s_lfdat FOR likp-lfdat. " Delivery date
PARAMETERS:
p_exdata AS CHECKBOX. " Show extra columns flag
SELECTION-SCREEN END OF BLOCK a.
van/pallet specific select options block
SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_palno FOR zpallettr-zpallet_no, " no-extension,
s_vanno FOR zvantr-zvan_no. " no-extension.
SELECT-OPTIONS:
s_deppnt FOR zpallettr-zdep_point, "Jvdm01
s_tplst FOR vttk-tplst. "MB01
SELECTION-SCREEN END OF BLOCK b.
MB01 - START - Display variant
SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-019.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK c.
MB01 - END
Value Request Events
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_palno-low.
CLEAR: number_range, w_number .
REFRESH number_range.
select numbers and display pop up screen for selection
PERFORM select_pal_nos.
s_palno-low = w_number.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_palno-high.
CLEAR: number_range, w_number .
REFRESH number_range.
select numbers and display pop up screen for selection
PERFORM select_pal_nos.
s_palno-high = w_number.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_vanno-low.
CLEAR: number_range, w_number .
REFRESH number_range.
select numbers and display pop up screen for selection
PERFORM select_van_nos.
s_vanno-low = w_number.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_vanno-high.
CLEAR: number_range, w_number .
REFRESH number_range.
select numbers and display pop up screen for selection
PERFORM select_van_nos.
s_vanno-high = w_number.
MB01 - START - display variant
F4-Help for variant
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
PERFORM f4_for_variant.
MB01 - END
At Selection Screen
AT SELECTION-SCREEN.
PERFORM validate_selections.
Initialization
INITIALIZATION.
MB01 - START INSERT
1. Transportation planning point
Import transportation planning point from user parameters and
populate
select option.
GET PARAMETER ID 'TDP' FIELD w_tplst.
MOVE: 'I' TO s_tplst-sign,
'EQ' TO s_tplst-option,
w_tplst TO s_tplst-low.
APPEND s_tplst.
2. Display variant
CLEAR s_variant.
s_variant-report = sy-repid.
Get default variant
s_def_variante = s_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save = 'A'
CHANGING
cs_variant = s_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_vari = s_variant-variant.
ENDIF.
MB01 - END INSERT
Start of selection
START-OF-SELECTION.
clear all data tables
CLEAR: t_likp,
it_likp,
t_lips,
t_vbuk,
t_vbup,
t_vepo,
t_vantr,
t_pallettr,
w_likp,
w_lips,
w_vbuk,
w_vbup,
w_vepo,
w_vekp.
REFRESH: t_likp,
it_likp,
t_lips,
t_vbuk,
t_vbup,
t_vepo,
t_vantr,
t_pallettr.
select data for ALV
due to different input parameters being used, to streamline the data
selection process, different selection methods are required
IF NOT s_vanno IS INITIAL
OR NOT s_palno IS INITIAL
OR NOT s_deppnt IS INITIAL. "Jvdm01
if selecting by van/pallet number, need to select the data from the
handling unit upwards to delivery
PERFORM select_data_up.
ELSE.
otherwise the data can be selected from the delivery downwards
PERFORM select_data_down.
ENDIF.
End of selection
END-OF-SELECTION.
call hierarchical ALV display function module
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = 'ZWMR_PICK_STATUS_REPORT'
i_callback_pf_status_set = 'SET_STATUS'
i_callback_user_command =
'USER_COMMAND' "custom gui status form
is_layout = g_layout "user command form
it_fieldcat = gt_fieldcat
it_sort = g_sort
i_save = 'X' "MB01+
is_variant = s_variant
it_events = gt_events
i_tabname_header = 't_disp_head'
i_tabname_item = 't_disp_tab'
i_structure_name_header = 'ZPICKHEAD'
i_structure_name_item = 'ZPICKDISP'
is_keyinfo = g_keyinfo
TABLES
t_outtab_header = t_disp_head
t_outtab_item = t_disp_tab.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
FORMS
Includes inserted by Screen Painter Wizard. DO NOT CHANGE THIS LINE!
INCLUDE zwmr_pick_o01.
INCLUDE zwmr_pick_status_reporto01 .
INCLUDE zwmr_pick_i01.
INCLUDE zwmr_pick_status_reporti01 .
INCLUDE zwmr_pick_f01.
INCLUDE zwmr_pick_status_reportf01 .
*& Form select_pal_nos
select pallet numbers for search help
FORM select_pal_nos.
DATA: BEGIN OF t_palno OCCURS 0,
zpallet_no LIKE zpallettr-zpallet_no,
END OF t_palno.
select all available pallet numbers
SELECT DISTINCT zpallet_no FROM zpallettr
INTO CORRESPONDING FIELDS OF TABLE t_palno.
LOOP AT t_palno.
get pallet id
SELECT SINGLE zpallet_id FROM zpallettr
INTO number_range-id
WHERE zpallet_no = t_palno-zpallet_no.
get pallet description
SELECT SINGLE zdesc FROM zpalletmd
INTO number_range-desc
WHERE zpallet_id = number_range-id.
number_range-num = t_palno-zpallet_no.
append to search help table
APPEND number_range.
ENDLOOP.
call pop up dialog box
CALL SCREEN 0100 STARTING AT 5 5.
ENDFORM. " select_pal_nos
*& Form select_van_nos
select van numbers for search help
FORM select_van_nos.
DATA: BEGIN OF t_vanno OCCURS 0,
zvan_no LIKE zvantr-zvan_no,
END OF t_vanno.
select available van numbers
SELECT DISTINCT zvan_no FROM zvantr
INTO CORRESPONDING FIELDS OF TABLE t_vanno.
LOOP AT t_vanno.
select van id
SELECT SINGLE zvan_id FROM zvantr
INTO number_range-id
WHERE zvan_no = t_vanno-zvan_no.
select van description (maintained in pallet tables)
SELECT SINGLE zdesc FROM zpalletmd
INTO number_range-desc
WHERE zpallet_id = number_range-id.
number_range-num = t_vanno-zvan_no.
append to search help table
APPEND number_range.
ENDLOOP.
call pop up dialog box
CALL SCREEN 0100 STARTING AT 5 5.
ENDFORM. " select_van_nos
*& Form select_data_down
select data if selecting from delivery down
FORM select_data_down.
select all deliveries from LIKP that fulfill selection criteria
Start SU01 optmization changes
SELECT vbeln vstel lgtor route wadat "RM050906
SELECT vbeln vstel lgtor route wadat
zzroute2lgtor zz2route zzexproute zzroute2 anzpk "MB01-+
FROM likp INTO CORRESPONDING FIELDS OF TABLE it_likp"MB01-+
WHERE vbeln IN s_vbeln
AND vstel IN p_vstel
AND lfart IN s_lfart
AND wadat IN s_wadat
AND lfdat IN s_lfdat "MB01+
AND
( lgtor IN s_lgtor OR zzroute2lgtor IN s_lgtor ) ."MB01+
IF sy-subrc NE 0.
no data found
MESSAGE i007.
EXIT.
ENDIF.
IF NOT t_likp[] IS INITIAL. "SUM
IF NOT it_likp[] IS INITIAL.
SORT it_likp BY vbeln. "SUM
select sales document headers from VBUK
SELECT vbeln wbstk kostk
FROM vbuk INTO TABLE it_vbuk
FOR ALL ENTRIES IN it_likp "SUM
WHERE vbeln EQ it_likp-vbeln. "SUM
SORT it_vbuk BY vbeln.
select all relevant delivery items from LIPS
SELECT vbeln posnr pstyv matnr charg
FROM lips INTO TABLE it_lips
FOR ALL ENTRIES IN it_likp
WHERE vbeln EQ it_likp-vbeln
AND pckpf NE 'B' "cannot be packed "AS05
AND pstyv NE 'ZPAC' "AS05
AND pstyv NE 'ZGDP' "TR02+ "AS05
AND lfimg GT 0. "TR01+
ENDIF.
IF NOT it_lips[] IS INITIAL.
select all sales document line items from VBUP
SORT it_lips BY vbeln posnr. "SUM
SELECT vbeln posnr lvsta
FROM vbup INTO TABLE it_vbup
FOR ALL ENTRIES IN it_lips
WHERE vbeln EQ it_lips-vbeln
AND posnr = it_lips-posnr.
SORT it_vbup BY vbeln posnr.
select corresponding handling unit ID's (venum)
TR03 Replace
start
select * from vepo appending corresponding fields of table t_vepo
for all entries in t_lips
where vbeln = t_lips-vbeln
and posnr = t_lips-posnr
and matnr = t_lips-matnr
and charg = t_lips-charg.
SELECT vepoVENUM vepoVEPOS vepovbeln vepoposnr
FROM vepo as vepo
INNER JOIN vekp as vekp ON vepovenum = vekpvenum
APPENDING corresponding fields of table it_vepo
FOR ALL ENTRIES IN it_lips
WHERE vepo~vbeln = it_lips-vbeln
AND vepo~posnr = it_lips-posnr
AND vepo~matnr = it_lips-matnr
AND vepo~charg = it_lips-charg
AND vekp~exidv IN s_exidv.
SELECT venum vepos vbeln posnr
FROM vepo INTO TABLE it_vepo2
FOR ALL ENTRIES IN it_lips
WHERE vbeln = it_lips-vbeln
AND posnr = it_lips-posnr
AND matnr = it_lips-matnr
AND charg = it_lips-charg.
SORT it_vepo2 BY venum vepos.
*{ INSERT UKMK900355 1
Ice-multis: replace lower-level HUs with highest level " AS01
PERFORM replace_highest_hu. " AS01
*} INSERT
Start of changes by ANV SR#11523
MB01 - extract shipment header as well to populate leg indicator
Therefore, join vttp with vttk
Limit as well by transportation planning point
SELECT vttptknum vttptpnum vttpvbeln vttklaufk
FROM vttp INNER JOIN vttk
ON vttptknum = vttktknum
INTO TABLE it_vttp
FOR ALL ENTRIES IN it_lips
WHERE vttp~vbeln = it_lips-vbeln
AND vttk~tplst IN s_tplst.
MB01 - END
End of changes by ANV SR#11523
IF NOT it_vepo2[] IS INITIAL.
SELECT venum exidv
FROM vekp INTO TABLE it_vepo1
FOR ALL ENTRIES IN it_vepo2
WHERE venum = it_vepo2-venum
AND exidv IN s_exidv.
ENDIF.
SORT it_vepo1 BY venum.
CLEAR: w_vepo, it_vepo.
LOOP AT it_vepo1.
READ TABLE it_vepo2 WITH KEY venum = it_vepo1-venum.
IF sy-subrc = 0.
it_vepo2-exidv = it_vepo1-exidv.
MODIFY it_vepo2 TRANSPORTING exidv
WHERE venum = it_vepo1-venum .
ENDIF.
ENDLOOP.
DELETE it_vepo2 WHERE exidv IS initial.
it_vepo[] = it_vepo2[].
TR03 Replace end
ENDIF.
build process table
PERFORM move_to_table.
ENDFORM. "select_data_down
*& Form select_data_up
select data if selecting from van/pallet up
FORM select_data_up.
IF NOT s_vanno IS INITIAL.
if van then select van numbers and hence pallet numbers
SELECT * FROM zvantr INTO TABLE t_vantr
WHERE zvan_no IN s_vanno.
and vstel eq p_vstel."TR01-
IF NOT t_vantr[] IS INITIAL.
SORT t_vantr BY zvan_id zvan_no vstel zpallet_no. "SUM
SELECT * FROM zpallettr INTO TABLE t_pallettr
FOR ALL ENTRIES IN t_vantr
WHERE zpallet_no EQ t_vantr-zpallet_no
AND zdep_point IN s_deppnt. "Jvdm01
and vstel eq p_vstel."TR01-
ENDIF.
ELSE.
otherwise can get pallet numbers directly
SELECT * FROM zpallettr INTO TABLE t_pallettr
WHERE zpallet_no IN s_palno
AND zdep_point IN s_deppnt. "Jvdm01
and vstel eq p_vstel."TR01-
ENDIF.
IF NOT t_pallettr[] IS INITIAL.
from the pallet nos. we can select the handling units
SORT t_pallettr BY zpallet_id zpallet_no vstel exidv. "SUM
SELECT * FROM vekp INTO TABLE t_vekp
FOR ALL ENTRIES IN t_pallettr
WHERE exidv EQ t_pallettr-exidv
AND exidv NE space
AND exidv IN s_exidv "TR03+
AND ( exida = 'E' "TR01+
OR exida = 'F' ). "TR01+
ENDIF.
SORT t_vekp BY venum. "SUM
IF NOT t_vekp[] IS INITIAL.
build vbeln range from t_vekp.
LOOP AT t_vekp.
r_del-sign = 'I'.
r_del-option = 'EQ'.
r_del-low = t_vekp-vpobjkey.
APPEND r_del.
ENDLOOP.
select all deliveries from LIKP that correspond to HU's
SELECT * FROM likp INTO TABLE t_likp
WHERE vbeln IN r_del
AND wadat IN s_wadat
AND lfart IN s_lfart.
ENDIF.
MB01- START
SELECT vbeln lgtor route wadat
FROM likp INTO TABLE it_likp
WHERE vbeln IN r_del
AND wadat IN s_wadat
AND lfart IN s_lfart.
SELECT vbeln vstel lgtor route wadat
zzroute2lgtor zz2route zzexproute zzroute2 anzpk "MB01-+
FROM likp INTO CORRESPONDING FIELDS OF TABLE it_likp
WHERE vbeln IN r_del
AND lfart IN s_lfart
AND wadat IN s_wadat "MB01-+
AND lfdat IN s_lfdat. "MB01+
MB01- END
ENDIF.
IF NOT it_likp[] IS INITIAL.
SORT it_likp BY vbeln . "SUM
select sales document headers from VBUK
SELECT * FROM vbuk INTO TABLE t_vbuk
FOR ALL ENTRIES IN t_likp
WHERE vbeln EQ t_likp-vbeln.
SELECT vbeln wbstk kostk
FROM vbuk INTO TABLE it_vbuk
FOR ALL ENTRIES IN it_likp
WHERE vbeln EQ it_likp-vbeln.
SORT it_vbuk BY vbeln. "SUM
select all relevant delivery items from LIPS
SELECT * FROM lips INTO TABLE t_lips
FOR ALL ENTRIES IN t_likp
WHERE vbeln EQ t_likp-vbeln
AND pstyv NE 'ZPAC'
AND pstyv NE 'ZGDP' "TR02+
AND lfimg GT 0. "TR01+
SELECT vbeln posnr pstyv matnr charg
FROM lips INTO TABLE it_lips
FOR ALL ENTRIES IN it_likp
WHERE vbeln EQ it_likp-vbeln
AND pckpf NE 'B' "cannot be packed "AS05
AND pstyv NE 'ZPAC' "AS05
AND pstyv NE 'ZGDP' "TR02+ "AS05
AND lfimg GT 0. "TR01+
ENDIF.
IF NOT it_lips[] IS INITIAL.
SORT it_lips BY vbeln posnr. "SUM
select all sales document line items from VBUP
SELECT * FROM vbup INTO TABLE t_vbup
FOR ALL ENTRIES IN t_lips
WHERE vbeln EQ t_lips-vbeln
AND posnr = t_lips-posnr.
Start of changes by ANV SR#11523
MB01 - START
join vttp with vttk to obtain leg indicator
SELECT tknum tpnum vbeln
FROM vttp INTO TABLE it_vttp
FOR ALL ENTRIES IN it_lips
WHERE vbeln = it_lips-vbeln.
SELECT vttptknum vttptpnum vttpvbeln vttklaufk
FROM vttp INNER JOIN vttk
ON vttptknum = vttktknum
INTO TABLE it_vttp
FOR ALL ENTRIES IN it_lips
WHERE vttp~vbeln = it_lips-vbeln
AND vttk~tplst IN s_tplst.
MB01 - END
End of changes by ANV SR#11523
SELECT vbeln posnr lvsta
FROM vbup INTO TABLE it_vbup
FOR ALL ENTRIES IN it_lips
WHERE vbeln EQ it_lips-vbeln
AND posnr = it_lips-posnr.
SORT t_vbup BY vbeln posnr. "SUM
select corresponding handling unit ID's (venum)
SELECT * FROM vepo APPENDING CORRESPONDING FIELDS OF TABLE t_vepo
FOR ALL ENTRIES IN t_lips
WHERE vbeln = t_lips-vbeln
AND posnr = t_lips-posnr
AND matnr = t_lips-matnr
AND charg = t_lips-charg.
SELECT venum vepos vbeln posnr
FROM vepo APPENDING CORRESPONDING FIELDS OF TABLE it_vepo
FOR ALL ENTRIES IN it_lips
WHERE vbeln = it_lips-vbeln
AND posnr = it_lips-posnr
AND matnr = it_lips-matnr
AND charg = it_lips-charg.
*{ INSERT UKMK900355 1
it_vepo2[] = it_vepo[]. " DS01
PERFORM replace_highest_hu. " DS01
it_vepo[] = it_vepo2[]. " DS01
*} INSERT
ENDIF.
build process table
PERFORM move_to_table.
ENDFORM. "select_data_up
*& Form move_to_table
move data to processing table
FORM move_to_table.
LOOP AT it_vepo.
CLEAR t_data_tab.
delivery lines.
CLEAR w_lips.
READ TABLE it_lips WITH KEY vbeln = it_vepo-vbeln
posnr = it_vepo-posnr
INTO w_lips BINARY SEARCH. "SUM
MOVE-CORRESPONDING w_lips TO t_data_tab.
sales document line items
CLEAR w_vbup.
READ TABLE it_vbup WITH KEY vbeln = it_vepo-vbeln
posnr = it_vepo-posnr
INTO w_vbup BINARY SEARCH. "SUM
if w_vbup-kosta = space. "TR01-
not relevant for picking
delete t_vepo. "TR01-
continue. "TR01-
else. "TR01-
MOVE-CORRESPONDING w_vbup TO t_data_tab.
endif. "TR01-
sales doc header
CLEAR w_vbuk.
READ TABLE it_vbuk WITH KEY vbeln = it_vepo-vbeln
INTO w_vbuk BINARY SEARCH. "SUM
MOVE-CORRESPONDING w_vbuk TO t_data_tab.
delivery header
CLEAR w_likp.
READ TABLE it_likp WITH KEY vbeln = it_vepo-vbeln
INTO w_likp BINARY SEARCH. "SUM
MOVE-CORRESPONDING w_likp TO t_data_tab.
MB01 - START
DATA: w_routetype TYPE i. "0=non-global,1=1st route,2=2nd
route,3=both
At this point move DOOR2 if it falls within the global route scenario
and the door2 is satisfies the selection criteria for door
1. Does delivery fall within global route scenario
CLEAR w_routetype.
IF w_likp-zz2route = 'Y' .
1.a. First route - does door1 satisfy the selection criteria
IF w_likp-lgtor IN s_lgtor.
w_routetype = 1.
MOVE w_likp-zzexproute TO t_data_tab-route.
1.b. Second route - does door2 satisfy the selection criteria
ELSEIF w_likp-zzroute2lgtor IN s_lgtor.
here we need to move door2 to lgtor
w_routetype = 2.
MOVE w_likp-zzroute2lgtor TO t_data_tab-lgtor.
MOVE w_likp-zzroute2 TO t_data_tab-route.
ENDIF.
If both routes satsify the criteria, append for 2nd leg ***REVISIT!
IF w_likp-lgtor IN s_lgtor AND w_likp-zzroute2lgtor IN s_lgtor.
w_routetype = 3.
ENDIF.
ENDIF.
MB01 - END
Start of changes by ANV SR#11523
MB01 - If the delivery falls within the global route scenario... need
to select either preliminary shipment leg OR subsequent leg
when laufk= 1 (prelim) and linked to route1, if laufk = 2 (subseq) &
linked to route2
Shipment Number
SORT it_vttp BY vbeln laufk.
CLEAR w_vttp.
CASE w_routetype.
WHEN 0.
READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
INTO w_vttp BINARY SEARCH.
WHEN 1.
READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
laufk = '1'
INTO w_vttp BINARY SEARCH.
WHEN 2.
READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
laufk = '3'
INTO w_vttp BINARY SEARCH.
WHEN 3. "REVISIT
ENDCASE.
MOVE w_vttp-tknum TO t_data_tab-tknum.
MB01 - END
End of changes by ANV SR#11523
select handling unit info using vepo entry
CLEAR w_vekp.
IF t_vekp[] IS INITIAL.
SELECT SINGLE * FROM vekp INTO w_vekp
WHERE venum = it_vepo-venum.
ELSE.
READ TABLE t_vekp WITH KEY venum = it_vepo-venum
INTO w_vekp BINARY SEARCH. "SUM
IF sy-subrc NE 0.
SELECT SINGLE * FROM vekp INTO w_vekp
WHERE venum = t_vepo-venum.
ENDIF.
ENDIF.
MOVE-CORRESPONDING w_vekp TO t_data_tab.
*{ INSERT UKMK900355 2
WM status for HU "AS03
SELECT SINGLE * FROM zhu_to_link WHERE lgnum EQ w_vekp-lgnum"AS03
AND exidv EQ w_vekp-exidv."AS03
IF sy-subrc EQ 0. "AS03
IF zhu_to_link-zpick_comp EQ space. "AS03
t_data_tab-lvsta = 'B'. "AS03
ELSE. "AS03
t_data_tab-lvsta = 'C'. "AS03
ENDIF. "AS03
ENDIF. "AS03
*} INSERT
select pallet / van load information "Jvdm01-
SELECT SINGLE zpallet_no zcount_check FROM zpallettr "Jvdm01-
INTO (t_data_tab-zpallet_no, "Jvdm01-
t_data_tab-zcount_check) "Jvdm01-
WHERE exidv EQ w_vekp-exidv. "Jvdm01-
PERFORM read_pallet. "MB01+
SELECT SINGLE zpallet_no zcount_check zdep_point "Jvdm01+
FROM zpallettr "Jvdm01+
INTO (t_data_tab-zpallet_no, "Jvdm01+
t_data_tab-zcount_check, "Jvdm01+
t_data_tab-zdep_point) "Jvdm01+
WHERE exidv EQ w_vekp-exidv. "Jvdm01+
WHERE exidv EQ w_vekp-exidv "MB01-+
AND zpallet_id = t_data_tab-lgtor."MB01+
MB01 - INSERT START
If pallet number specified and
we are in the global route scenario & both doors fall within the
selection criteria, we need to copy the one that is currently in a
specified pallet
IF NOT s_palno IS INITIAL AND not t_data_tab-zpallet_no in s_palno
AND w_routetype = '3' .
Switch doors & get 2nd shipment
MOVE w_likp-zzroute2lgtor TO t_data_tab-lgtor.
MOVE w_likp-zzroute2 TO t_data_tab-route.
Read subsequent leg shipment
READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
laufk = '3'
INTO w_vttp BINARY SEARCH.
IF sy-subrc = 0.
MOVE w_vttp-tknum TO t_data_tab-tknum.
ENDIF.
PERFORM read_pallet. "MB01+
ENDIF.
MB01 - INSERT END
IF NOT t_data_tab-zpallet_no IN s_palno. "TR01+
CONTINUE. "TR01+
ENDIF. "TR01+
IF sy-subrc = 0. "mb01+
perform read_van. "MB01+
SELECT SINGLE zvan_no zvan_print zeod_print FROM zvantr
INTO (t_data_tab-zvan_no,
t_data_tab-zvan_print,
t_data_tab-zeod_print)
WHERE zpallet_no EQ t_data_tab-zpallet_no.
MB01 - INSERT START
If van number specified and
we are in the global route scenario & both doors fall within the
selection criteria, we need to copy the one that is currently on a
specified van
IF NOT s_vanno IS INITIAL AND not t_data_tab-zvan_no in s_vanno AND
w_routetype = '3' .
Switch doors & get 2nd shipment
MOVE w_likp-zzroute2lgtor TO t_data_tab-lgtor.
MOVE w_likp-zzroute2 TO t_data_tab-route.
Read subsequent leg shipment
READ TABLE it_vttp WITH KEY vbeln = it_vepo-vbeln
laufk = '3'
INTO w_vttp BINARY SEARCH.
IF sy-subrc = 0.
MOVE w_vttp-tknum TO t_data_tab-tknum.
ENDIF.
PERFORM read_pallet. "MB01+
perform read_van.
ENDIF. "mb01-
MB01 - INSERT END
IF NOT t_data_tab-zvan_no IN s_vanno. "TR01+
CONTINUE. "TR01+
ENDIF. "TR01+
ENDIF.
APPEND t_data_tab.
ENDLOOP.
*-----> TR01+ start
If the delivery has yet to be packed, then need to include in report
Thus delete t_lips here and if any entries left after looping through
t_vepo, these will also need to be added to t_data_tab
if the selection is by handling unit though we do not want
these"TR03+
IF s_exidv IS INITIAL. "TR03+
*{ REPLACE UKMK900355 1
*\ LOOP AT it_vepo.
*\ READ TABLE it_lips WITH KEY vbeln = it_vepo-vbeln
*\ posnr = it_vepo-posnr
*\ BINARY SEARCH. "SUM
*\ IF sy-subrc = 0.
*\ DELETE it_lips INDEX sy-tabix.
*\ ENDIF.
*\ ENDLOOP.
Higher-level HUs can contain more than one delivery item " AS01
LOOP AT it_lips. " AS01
READ TABLE t_vepo_low WITH KEY vbeln = it_lips-vbeln " AS01
posnr = it_lips-posnr. " AS01
CHECK sy-subrc EQ 0. " AS01
DELETE it_lips. " AS01
ENDLOOP. " AS01
*} REPLACE
IF NOT it_lips[] IS INITIAL.
move any unpacked items to the data table
PERFORM move_lips_to_table.
ENDIF.
ENDIF. "TR03+
*<---- TR01+ End
get relevant status icons
PERFORM select_icons.
prepare ALV data
PERFORM prepare_alv.
ENDFORM. " select_data
*& Form select_icons
select icons for display and move data to display table
FORM select_icons.
DATA: w_disp_tab LIKE zpickdisp,
w_disp_head LIKE zpickhead,
w_color LIKE zpickdisp-color,
ov_icon LIKE zpickdisp-ov_icon,
gi_icon LIKE zpickdisp-gi_icon,
to_icon LIKE zpickdisp-to_icon,
lp_icon LIKE zpickdisp-lp_icon,
pc_icon LIKE zpickdisp-pc_icon,
lv_icon LIKE zpickdisp-lv_icon,
vm_icon LIKE zpickdisp-vm_icon,
em_icon LIKE zpickdisp-em_icon,
sp_icon LIKE zpickdisp-sp_icon, " ANV SR#11523
t_ovst_tab LIKE t_disp_tab WITH HEADER LINE.
CONSTANTS: c_col1(3) VALUE 'C10',
c_col2(3) VALUE 'C20'.
SORT t_data_tab BY lgtor vbeln.
w_color = c_col2.
LOOP AT t_data_tab.
AT NEW lgtor.
fill ALV header table
CLEAR w_disp_head.
w_disp_head-lgtor = t_data_tab-lgtor.
APPEND w_disp_head TO t_disp_head.
ENDAT.
goods issue status & overall amber/green only
CASE t_data_tab-wbstk.
WHEN c_c.
MOVE icon_green_light TO gi_icon.
MOVE icon_green_light TO ov_icon.
WHEN OTHERS.
MOVE icon_red_light TO gi_icon.
MOVE icon_yellow_light TO ov_icon.
ENDCASE.
transfer order status
CASE t_data_tab-lvsta.
WHEN c_a.
MOVE icon_red_light TO to_icon.
WHEN c_b.
MOVE icon_yellow_light TO to_icon.
WHEN c_c.
MOVE icon_green_light TO to_icon.
WHEN space.
write N/A
to_icon = 'N/A'.
ENDCASE.
loaded to pallet status
IF NOT t_data_tab-zpallet_no IS INITIAL.
MOVE icon_green_light TO lp_icon.
ELSE.
MOVE icon_red_light TO lp_icon.
ENDIF.
pallet count status
IF NOT t_data_tab-zcount_check IS INITIAL.
MOVE icon_green_light TO pc_icon.
ELSE.
MOVE icon_red_light TO pc_icon.
ENDIF.
loaded to van status
IF NOT t_data_tab-zvan_no IS INITIAL.
MOVE icon_green_light TO lv_icon.
ELSE.
MOVE icon_red_light TO lv_icon.
ENDIF.
van manifest status
IF NOT t_data_tab-zvan_print IS INITIAL.
MOVE icon_green_light TO vm_icon.
ELSE.
MOVE icon_red_light TO vm_icon.
ENDIF.
Start of changes by ANV SR#11523
Shipment status
IF NOT t_data_tab-tknum IS INITIAL.
MOVE icon_green_light TO sp_icon.
ELSE.
MOVE icon_red_light TO sp_icon.
ENDIF.
End of changes by ANV SR#11523
end of day manifest status
IF NOT t_data_tab-zeod_print IS INITIAL.
MOVE icon_green_light TO em_icon.
ELSE.
MOVE icon_red_light TO em_icon.
ENDIF.
move working data table to display table
MOVE-CORRESPONDING t_data_tab TO w_disp_tab.
w_disp_tab-ov_icon = ov_icon.
w_disp_tab-gi_icon = gi_icon.
w_disp_tab-to_icon = to_icon.
w_disp_tab-lp_icon = lp_icon.
w_disp_tab-pc_icon = pc_icon.
w_disp_tab-lv_icon = lv_icon.
w_disp_tab-vm_icon = vm_icon.
w_disp_tab-em_icon = em_icon.
w_disp_tab-sp_icon = sp_icon. "ANV SR#11523
w_disp_tab-color = w_color.
fill N/A values for initial fields for display
IF w_disp_tab-packvorschr IS INITIAL.
w_disp_tab-packvorschr = 'N/A'.
ENDIF.
IF w_disp_tab-exidv IS INITIAL.
w_disp_tab-exidv = 'N/A'.
ENDIF.
IF w_disp_tab-zpallet_no IS INITIAL.
WRITE 'N/A' TO w_disp_tab-zpallet_no.
ENDIF.
IF w_disp_tab-zvan_no IS INITIAL.
WRITE 'N/A' TO w_disp_tab-zvan_no.
ENDIF.
display different color for new doc number
AT END OF vbeln.
IF w_color = c_col1.
w_color = c_col2.
ELSEIF w_color = c_col2.
w_color = c_col1.
ENDIF.
ENDAT.
APPEND w_disp_tab TO t_disp_tab.
CLEAR w_disp_tab.
ENDLOOP.
we have all the icons in display but need to check the overall status
as this refers to the line items
green and amber statuses already set and use the same criteria as the
goods issue status unless detected as red here
DATA: ov_stat_red(1).
CLEAR w_disp_tab.
SORT t_disp_tab BY vbeln.
LOOP AT t_disp_tab INTO w_disp_tab.
AT NEW vbeln.
check all line items for delivery
LOOP AT t_data_tab WHERE vbeln = w_disp_tab-vbeln.
IF t_data_tab-lvsta = c_a.
set overall status to red
ov_stat_red = c_yes.
EXIT.
ELSE.
leave green/amber status icon as previosly determined
ENDIF.
ENDLOOP.
IF ov_stat_red = c_yes.
set overall status to red for all items in that delivery
CLEAR ov_stat_red.
MOVE icon_red_light TO w_disp_tab-ov_icon.
MODIFY t_disp_tab FROM w_disp_tab TRANSPORTING ov_icon
WHERE vbeln = w_disp_tab-vbeln.
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM. " select_icons
*& Form fill_layout
fill ALV layout parameters
FORM fill_layout.
CLEAR g_layout.
g_layout-colwidth_optimize = c_yes. " column width optimisation
g_layout-zebra = space. " alternate line colors
g_layout-box_fieldname = 'MARK'. " checkbox fieldname
g_layout-info_fieldname = 'COLOR'. " highlight row indicator
g_layout-no_vline = space. " vertical line
g_layout-key_hotspot = space. " hotspot field
g_layout-f2code = 'PICK'. " F2 ok_code
g_layout-numc_sum = c_yes. " sum numc fields
g_layout-box_tabname = 't_disp_head'. " checkbox table name
g_layout-expand_fieldname = 'EXPAND'. " expand field name
ENDFORM. " fill_layout
*& Form fill_sort
fill ALV sort table
FORM fill_sort.
DATA: w_g_sort TYPE slis_sortinfo_alv.
w_g_sort-spos = 1.
w_g_sort-fieldname = 'LGTOR'.
w_g_sort-tabname = 't_disp_tab'.
w_g_sort-up = c_yes.
APPEND w_g_sort TO g_sort.
w_g_sort-spos = 2.
w_g_sort-fieldname = 'VBELN'.
w_g_sort-tabname = 't_disp_tab'.
w_g_sort-up = c_yes.
APPEND w_g_sort TO g_sort.
w_g_sort-spos = 3.
w_g_sort-fieldname = 'POSNR'.
w_g_sort-tabname = 't_disp_tab'.
w_g_sort-up = c_yes.
APPEND w_g_sort TO g_sort. -
Regarding ALV ( To be displayed in Tree Format)
Hi all,
I am working on a ALV report which is to be displayed in Tree Structure . I found some demo programs within SAP .. but do we have an Alternative .. all those Demos use OOPS concept .. Can this Report be done without using OOPS in ALV.
Please Suggest.
Thanks & Regards
SrinivasHi,
This is a ALV Report with tree structure.
report zwmr_pick_status_report no standard page heading
message-id zw.
Type Pools *
type-pools: icon, slis.
Tables *
tables: tvst,
likp,
t30b,
vekp,
zpallettr,
zvantr.
Types *
types:
begin of ty_data,
lgtor like likp-lgtor, " door
vbeln like likp-vbeln, " delivery
wbstk like vbuk-wbstk, " Goods movement status
kostk like vbuk-kostk, " Picking status
posnr like lips-posnr, " item
route like likp-route, " route
wadat like likp-wadat, " goods issue date
lvsta like vbup-lvsta, " warehouse status
packvorschr like vekp-packvorschr, " pack mnemonic
exidv like vekp-exidv, " handling unit
zpallet_no(10), "like zpallettr-zpallet_no, " pallet no
zcount_check like zpallettr-zcount_check," count check flag
zvan_no(10), "like zvantr-zvan_no, " van no
zvan_print like zvantr-zvan_print, " van manifest print
zeod_print like zvantr-zeod_print, " eod manifest print
zzpackclass like vekp-zzpackclass, " package class
zzti like vekp-zzti, " T.I. value
end of ty_data.
Data *
ranges: r_del for likp-vbeln,
r_lgtor for likp-lgtor.
ranges: r_vanno for zvantr-zvan_no,
r_palno for zpallettr-zpallet_no.
data: begin of number_range occurs 0,
mark(1),
id(3),
num(10) type n,
desc like zpalletmd-zdesc,
end of number_range.
data: t_disp_tab type standard table of zpickdisp,
t_data_tab type ty_data occurs 0 with header line,
t_disp_head type standard table of zpickhead.
data: w_numrnge like number_range,
w_number(10) type n.
data: t_likp like likp occurs 0 with header line,
t_lips like lips occurs 0 with header line,
t_vbuk like vbuk occurs 0 with header line,
t_vbup like vbup occurs 0 with header line,
t_vepo like vepo occurs 0 with header line,
t_vekp like vekp occurs 0 with header line,
t_vantr like zvantr occurs 0 with header line,
t_pallettr like zpallettr occurs 0 with header line,
w_likp like likp,
w_lips like lips,
w_vbuk like vbuk,
w_vbup like vbup,
w_vepo like vepo,
w_vekp like vekp.
ALV DATA *****
data:
g_grid type ref to cl_gui_alv_grid,
g_sort type slis_t_sortinfo_alv,
g_custom_container type ref to cl_gui_custom_container,
g_layout type slis_layout_alv,
gt_fieldcat type slis_t_fieldcat_alv,
t_fldcat like line of gt_fieldcat,
g_keyinfo type slis_keyinfo_alv,
gt_events type slis_t_event,
gs_event type slis_alv_event,
w_sy_repid like sy-repid.
data: begin of seltab occurs 0.
include structure rsparams.
data: end of seltab.
SYSTEM GENERATED TABLE CONTROL DATA ********
DECLARATION OF TABLECONTROL 'TC_TABCON' ITSELF
controls: tc_tabcon type tableview using screen 0100.
LINES OF TABLECONTROL 'TC_TABCON'
data: g_tc_tabcon_lines like sy-loopc.
data: ok_code like sy-ucomm.
Constants *
constants: c_data_class like klah-class value 'DG_DATA',
c_mat_class like rmclf-klart value '001',
c_pack like lips-mtart value 'VERP',
c_a(1) value 'A',
c_b(1) value 'B',
c_c(1) value 'C',
c_yes(1) value 'X',
c_no(1) value ' '.
Selection screen *
standard report select options block
selection-screen begin of block a with frame title text-002.
select-options:
s_wadat for likp-wadat no-extension obligatory. " Goods Issue Date
*parameters: "TR01-
p_vstel like tvst-vstel obligatory. " Shipping Point "TR01-
select-options: "TR01+
p_vstel for tvst-vstel. " Shipping Point "TR01+
select-options:
s_lfart for likp-lfart, " Delivery type
s_lgtor for t30b-lgtor, " Door selection
s_exidv for vekp-exidv, " Handling Unit
s_vbeln for likp-vbeln. " Delivery
parameters:
p_exdata as checkbox. " Show extra columns flag
selection-screen end of block a.
van/pallet specific select options block
selection-screen begin of block b with frame title text-001.
select-options:
s_palno for zpallettr-zpallet_no, " no-extension,
s_vanno for zvantr-zvan_no. " no-extension.
selection-screen end of block b.
Value Request Events *
at selection-screen on value-request for s_palno-low.
clear: number_range, w_number .
refresh number_range.
select numbers and display pop up screen for selection
perform select_pal_nos.
s_palno-low = w_number.
at selection-screen on value-request for s_palno-high.
clear: number_range, w_number .
refresh number_range.
select numbers and display pop up screen for selection
perform select_pal_nos.
s_palno-high = w_number.
at selection-screen on value-request for s_vanno-low.
clear: number_range, w_number .
refresh number_range.
select numbers and display pop up screen for selection
perform select_van_nos.
s_vanno-low = w_number.
at selection-screen on value-request for s_vanno-high.
clear: number_range, w_number .
refresh number_range.
select numbers and display pop up screen for selection
perform select_van_nos.
s_vanno-high = w_number.
At Selection Screen *
at selection-screen.
perform validate_selections.
Initialization *
initialization.
Start of selection *
start-of-selection.
clear all data tables
clear: t_likp,
t_lips,
t_vbuk,
t_vbup,
t_vepo,
t_vantr,
t_pallettr,
w_likp,
w_lips,
w_vbuk,
w_vbup,
w_vepo,
w_vekp.
refresh: t_likp,
t_lips,
t_vbuk,
t_vbup,
t_vepo,
t_vantr,
t_pallettr.
select data for ALV
due to different input parameters being used, to streamline the data
selection process, different selection methods are required
if not s_vanno is initial
or not s_palno is initial.
if selecting by van/pallet number, need to select the data from the
handling unit upwards to delivery
perform select_data_up.
else.
otherwise the data can be selected from the delivery downwards
perform select_data_down.
endif.
End of selection *
end-of-selection.
call hierarchical ALV display function module
call function 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
exporting
i_callback_program = 'ZWMR_PICK_STATUS_REPORT'
i_callback_pf_status_set = 'SET_STATUS'
i_callback_user_command =
'USER_COMMAND' "custom gui status form
is_layout = g_layout "user command form
it_fieldcat = gt_fieldcat
it_sort = g_sort
it_events = gt_events
i_tabname_header = 't_disp_head'
i_tabname_item = 't_disp_tab'
i_structure_name_header = 'ZPICKHEAD'
i_structure_name_item = 'ZPICKDISP'
is_keyinfo = g_keyinfo
tables
t_outtab_header = t_disp_head
t_outtab_item = t_disp_tab.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
FORMS *
Includes inserted by Screen Painter Wizard. DO NOT CHANGE THIS LINE!
include zwmr_pick_status_reporto01 .
include zwmr_pick_status_reporti01 .
include zwmr_pick_status_reportf01 .
*& Form select_pal_nos
select pallet numbers for search help
form select_pal_nos.
data: begin of t_palno occurs 0,
zpallet_no like zpallettr-zpallet_no,
end of t_palno.
select all available pallet numbers
select distinct zpallet_no from zpallettr
into corresponding fields of table t_palno.
loop at t_palno.
get pallet id
select single zpallet_id from zpallettr
into number_range-id
where zpallet_no = t_palno-zpallet_no.
get pallet description
select single zdesc from zpalletmd
into number_range-desc
where zpallet_id = number_range-id.
number_range-num = t_palno-zpallet_no.
append to search help table
append number_range.
endloop.
call pop up dialog box
call screen 0100 starting at 5 5.
endform. " select_pal_nos
*& Form select_van_nos
select van numbers for search help
form select_van_nos.
data: begin of t_vanno occurs 0,
zvan_no like zvantr-zvan_no,
end of t_vanno.
select available van numbers
select distinct zvan_no from zvantr
into corresponding fields of table t_vanno.
loop at t_vanno.
select van id
select single zvan_id from zvantr
into number_range-id
where zvan_no = t_vanno-zvan_no.
select van description (maintained in pallet tables)
select single zdesc from zpalletmd
into number_range-desc
where zpallet_id = number_range-id.
number_range-num = t_vanno-zvan_no.
append to search help table
append number_range.
endloop.
call pop up dialog box
call screen 0100 starting at 5 5.
endform. " select_van_nos
*& Form select_data_down
select data if selecting from delivery down
form select_data_down.
select all deliveries from LIKP that fulfill selection criteria
select * from likp into table t_likp
where vbeln in s_vbeln
and vstel eq p_vstel "TR01-
and vstel in p_vstel
and lgtor in s_lgtor
and wadat in s_wadat
and lfart in s_lfart.
if sy-subrc ne 0.
no data found
message i007.
exit.
endif.
if not t_likp[] is initial.
select sales document headers from VBUK
select * from vbuk into table t_vbuk
for all entries in t_likp
where vbeln eq t_likp-vbeln.
select all relevant delivery items from LIPS
select * from lips into table t_lips
for all entries in t_likp
where vbeln eq t_likp-vbeln
and pstyv ne 'ZPAC'
and pstyv ne 'ZGDP' "TR02+
and lfimg gt 0. "TR01+
endif.
if not t_lips[] is initial.
select all sales document line items from VBUP
select * from vbup into table t_vbup
for all entries in t_lips
where vbeln eq t_lips-vbeln
and posnr = t_lips-posnr.
select corresponding handling unit ID's (venum)
TR03 Replace start
select * from vepo appending corresponding fields of table t_vepo
for all entries in t_lips
where vbeln = t_lips-vbeln
and posnr = t_lips-posnr
and matnr = t_lips-matnr
and charg = t_lips-charg.
select * from vepo
inner join vekp on vepovenum = vekpvenum
appending corresponding fields of table t_vepo
for all entries in t_lips
where vepo~vbeln = t_lips-vbeln
and vepo~posnr = t_lips-posnr
and vepo~matnr = t_lips-matnr
and vepo~charg = t_lips-charg
and vekp~exidv in s_exidv.
TR03 Replace end
endif.
build process table
perform move_to_table.
endform. "select_data_down
*& Form select_data_up
select data if selecting from van/pallet up
form select_data_up.
if not s_vanno is initial.
if van then select van numbers and hence pallet numbers
select * from zvantr into table t_vantr
where zvan_no in s_vanno.
and vstel eq p_vstel."TR01-
if not t_vantr[] is initial.
select * from zpallettr into table t_pallettr
for all entries in t_vantr
where zpallet_no eq t_vantr-zpallet_no.
and vstel eq p_vstel."TR01-
endif.
else.
otherwise can get pallet numbers directly
select * from zpallettr into table t_pallettr
where zpallet_no in s_palno.
and vstel eq p_vstel."TR01-
endif.
if not t_pallettr[] is initial.
from the pallet nos. we can select the handling units
select * from vekp into table t_vekp
for all entries in t_pallettr
where exidv eq t_pallettr-exidv
and exidv ne space
and exidv in s_exidv "TR03+
and ( exida = 'E' "TR01+
or exida = 'F' ). "TR01+
endif.
if not t_vekp[] is initial.
build vbeln range from t_vekp.
loop at t_vekp.
r_del-sign = 'I'.
r_del-option = 'EQ'.
r_del-low = t_vekp-vpobjkey.
append r_del.
endloop.
select all deliveries from LIKP that correspond to HU's
select * from likp into table t_likp
where vbeln in r_del
and wadat in s_wadat
and lfart in s_lfart.
endif.
if not t_likp[] is initial.
select sales document headers from VBUK
select * from vbuk into table t_vbuk
for all entries in t_likp
where vbeln eq t_likp-vbeln.
select all relevant delivery items from LIPS
select * from lips into table t_lips
for all entries in t_likp
where vbeln eq t_likp-vbeln
and pstyv ne 'ZPAC'
and pstyv ne 'ZGDP' "TR02+
and lfimg gt 0. "TR01+
endif.
if not t_lips[] is initial.
select all sales document line items from VBUP
select * from vbup into table t_vbup
for all entries in t_lips
where vbeln eq t_lips-vbeln
and posnr = t_lips-posnr.
select corresponding handling unit ID's (venum)
select * from vepo appending corresponding fields of table t_vepo
for all entries in t_lips
where vbeln = t_lips-vbeln
and posnr = t_lips-posnr
and matnr = t_lips-matnr
and charg = t_lips-charg.
endif.
build process table
perform move_to_table.
endform. "select_data_up
*& Form move_to_table
move data to processing table
form move_to_table.
loop at t_vepo.
clear t_data_tab.
delivery lines.
clear w_lips.
read table t_lips with key vbeln = t_vepo-vbeln
posnr = t_vepo-posnr
into w_lips.
move-corresponding w_lips to t_data_tab.
sales document line items
clear w_vbup.
read table t_vbup with key vbeln = t_vepo-vbeln
posnr = t_vepo-posnr
into w_vbup.
if w_vbup-kosta = space. "TR01-
not relevant for picking
delete t_vepo. "TR01-
continue. "TR01-
else. "TR01-
move-corresponding w_vbup to t_data_tab.
endif. "TR01-
sales doc header
clear w_vbuk.
read table t_vbuk with key vbeln = t_vepo-vbeln
into w_vbuk.
move-corresponding w_vbuk to t_data_tab.
delivery header
clear w_likp.
read table t_likp with key vbeln = t_vepo-vbeln
into w_likp.
move-corresponding w_likp to t_data_tab.
select handling unit info using vepo entry
clear w_vekp.
if t_vekp[] is initial.
select single * from vekp into w_vekp
where venum = t_vepo-venum.
else.
read table t_vekp with key venum = t_vepo-venum
into w_vekp.
if sy-subrc ne 0.
select single * from vekp into w_vekp
where venum = t_vepo-venum.
endif.
endif.
move-corresponding w_vekp to t_data_tab.
select pallet / van load information
select single zpallet_no zcount_check from zpallettr
into (t_data_tab-zpallet_no,
t_data_tab-zcount_check)
where exidv eq w_vekp-exidv.
if not t_data_tab-zpallet_no in s_palno. "TR01+
continue. "TR01+
endif. "TR01+
if sy-subrc = 0.
select single zvan_no zvan_print zeod_print from zvantr
into (t_data_tab-zvan_no,
t_data_tab-zvan_print,
t_data_tab-zeod_print)
where zpallet_no eq t_data_tab-zpallet_no.
if not t_data_tab-zvan_no in s_vanno. "TR01+
continue. "TR01+
endif. "TR01+
endif.
append t_data_tab.
endloop.
*-----> TR01+ start
If the delivery has yet to be packed, then need to include in report
Thus delete t_lips here and if any entries left after looping through
t_vepo, these will also need to be added to t_data_tab
if the selection is by handling unit though we do not want these"TR03+
if s_exidv is initial. "TR03+
loop at t_vepo.
read table t_lips with key vbeln = t_vepo-vbeln
posnr = t_vepo-posnr.
if sy-subrc = 0.
delete t_lips index sy-tabix.
endif.
endloop.
if not t_lips[] is initial.
move any unpacked items to the data table
perform move_lips_to_table.
endif.
endif. "TR03+
*<---- TR01+ End
get relevant status icons
perform select_icons.
prepare ALV data
perform prepare_alv.
endform. " select_data
*& Form select_icons
select icons for display and move data to display table
form select_icons.
data: w_disp_tab like zpickdisp,
w_disp_head like zpickhead,
w_color like zpickdisp-color,
ov_icon like zpickdisp-ov_icon,
gi_icon like zpickdisp-gi_icon,
to_icon like zpickdisp-to_icon,
lp_icon like zpickdisp-lp_icon,
pc_icon like zpickdisp-pc_icon,
lv_icon like zpickdisp-lv_icon,
vm_icon like zpickdisp-vm_icon,
em_icon like zpickdisp-em_icon,
t_ovst_tab like t_disp_tab with header line.
constants: c_col1(3) value 'C10',
c_col2(3) value 'C20'.
sort t_data_tab by lgtor vbeln.
w_color = c_col2.
loop at t_data_tab.
at new lgtor.
fill ALV header table
clear w_disp_head.
w_disp_head-lgtor = t_data_tab-lgtor.
append w_disp_head to t_disp_head.
endat.
goods issue status & overall amber/green only
case t_data_tab-wbstk.
when c_c.
move icon_green_light to gi_icon.
move icon_green_light to ov_icon.
when others.
move icon_red_light to gi_icon.
move icon_yellow_light to ov_icon.
endcase.
transfer order status
case t_data_tab-lvsta.
when c_a.
move icon_red_light to to_icon.
when c_b.
move icon_yellow_light to to_icon.
when c_c.
move icon_green_light to to_icon.
when space.
write N/A
to_icon = 'N/A'.
endcase.
loaded to pallet status
if not t_data_tab-zpallet_no is initial.
move icon_green_light to lp_icon.
else.
move icon_red_light to lp_icon.
endif.
pallet count status
if not t_data_tab-zcount_check is initial.
move icon_green_light to pc_icon.
else.
move icon_red_light to pc_icon.
endif.
loaded to van status
if not t_data_tab-zvan_no is initial.
move icon_green_light to lv_icon.
else.
move icon_red_light to lv_icon.
endif.
van manifest status
if not t_data_tab-zvan_print is initial.
move icon_green_light to vm_icon.
else.
move icon_red_light to vm_icon.
endif.
end of day manifest status
if not t_data_tab-zeod_print is initial.
move icon_green_light to em_icon.
else.
move icon_red_light to em_icon.
endif.
move working data table to display table
move-corresponding t_data_tab to w_disp_tab.
w_disp_tab-ov_icon = ov_icon.
w_disp_tab-gi_icon = gi_icon.
w_disp_tab-to_icon = to_icon.
w_disp_tab-lp_icon = lp_icon.
w_disp_tab-pc_icon = pc_icon.
w_disp_tab-lv_icon = lv_icon.
w_disp_tab-vm_icon = vm_icon.
w_disp_tab-em_icon = em_icon.
w_disp_tab-color = w_color.
fill N/A values for initial fields for display
if w_disp_tab-packvorschr is initial.
w_disp_tab-packvorschr = 'N/A'.
endif.
if w_disp_tab-exidv is initial.
w_disp_tab-exidv = 'N/A'.
endif.
if w_disp_tab-zpallet_no is initial.
write 'N/A' to w_disp_tab-zpallet_no.
endif.
if w_disp_tab-zvan_no is initial.
write 'N/A' to w_disp_tab-zvan_no.
endif.
display different color for new doc number
at end of vbeln.
if w_color = c_col1.
w_color = c_col2.
elseif w_color = c_col2.
w_color = c_col1.
endif.
endat.
append w_disp_tab to t_disp_tab.
clear w_disp_tab.
endloop.
we have all the icons in display but need to check the overall status
as this refers to the line items
green and amber statuses already set and use the same criteria as the
goods issue status unless detected as red here
data: ov_stat_red(1).
clear w_disp_tab.
sort t_disp_tab by vbeln.
loop at t_disp_tab into w_disp_tab.
at new vbeln.
check all line items for delivery
loop at t_data_tab where vbeln = w_disp_tab-vbeln.
if t_data_tab-lvsta = c_a.
set overall status to red
ov_stat_red = c_yes.
exit.
else.
leave green/amber status icon as previosly determined
endif.
endloop.
if ov_stat_red = c_yes.
set overall status to red for all items in that delivery
clear ov_stat_red.
move icon_red_light to w_disp_tab-ov_icon.
modify t_disp_tab from w_disp_tab transporting ov_icon
where vbeln = w_disp_tab-vbeln.
endif.
endat.
endloop.
endform. " select_icons
*& Form fill_layout
fill ALV layout parameters
form fill_layout.
clear g_layout.
g_layout-colwidth_optimize = c_yes. " column width optimisation
g_layout-zebra = space. " alternate line colors
g_layout-box_fieldname = 'MARK'. " checkbox fieldname
g_layout-info_fieldname = 'COLOR'. " highlight row indicator
g_layout-no_vline = space. " vertical line
g_layout-key_hotspot = space. " hotspot field
g_layout-f2code = 'PICK'. " F2 ok_code
g_layout-numc_sum = c_yes. " sum numc fields
g_layout-box_tabname = 't_disp_head'. " checkbox table name
g_layout-expand_fieldname = 'EXPAND'. " expand field name
endform. " fill_layout
*& Form fill_sort
fill ALV sort table
form fill_sort.
data: w_g_sort type slis_sortinfo_alv.
w_g_sort-spos = 1.
w_g_sort-fieldname = 'LGTOR'.
w_g_sort-tabname = 't_disp_tab'.
w_g_sort-up = c_yes.
append w_g_sort to g_sort.
w_g_sort-spos = 2.
w_g_sort-fieldname = 'VBELN'.
w_g_sort-tabname = 't_disp_tab'.
w_g_sort-up = c_yes.
append w_g_sort to g_sort.
w_g_sort-spos = 3.
w_g_sort-fieldname = 'POSNR'.
w_g_sort-tabname = 't_disp_tab'.
w_g_sort-up = c_yes.
append w_g_sort to g_sort.
w_g_sort-spos = 4.
w_g_sort-fieldname = 'WADAT'.
w_g_sort-tabname = 't_disp_tab'.
w_g_sort-up = c_yes.
append w_g_sort to g_sort.
endform. " fill_sort
*& Form fill_fieldcat
Fill field category structure for ALV
form fill_fieldcat.
clear t_fldcat.
create field catalogue for header table
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = 'ZWMR_PICK_STATUS_REPORT'
i_internal_tabname = 't_disp_head'
i_structure_name = 'ZPICKHEAD'
i_client_never_display = c_yes
changing
ct_fieldcat = gt_fieldcat[].
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
ceate field catalogue for items table
call function 'REUSE_ALV_FIELDCATALOG_MERGE'
exporting
i_program_name = 'ZWMR_PICK_STATUS_REPORT'
i_internal_tabname = 't_disp_tab'
i_structure_name = 'ZPICKDISP'
i_client_never_display = c_yes
changing
ct_fieldcat = gt_fieldcat[].
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
modify field catalogue for this report
set no display flag if not requested on selection screen
if p_exdata ne c_yes.
t_fldcat-no_out = c_yes.
modify gt_fieldcat from t_fldcat transporting no_out
where fieldname eq 'PACKVORSCHR'
or fieldname eq 'EXIDV'
or fieldname eq 'ZPALLET_NO'
or fieldname eq 'ZVAN_NO'
or fieldname eq 'ZZPACKCLASS'
or fieldname eq 'ZZTI'.
endif.
set no display flag for item level LGTOR field
t_fldcat-no_out = c_yes.
modify gt_fieldcat from t_fldcat transporting no_out
where fieldname eq 'LGTOR'
and tabname eq 't_disp_tab'.
prevent display of technical fields
t_fldcat-tech = c_yes.
modify gt_fieldcat from t_fldcat transporting tech
where fieldname eq 'EXPAND'
or fieldname eq 'SELKZ'.
set vbeln as key
t_fldcat-key = c_yes.
modify gt_fieldcat from t_fldcat transporting key
where fieldname eq 'VBELN'.
prevent scrolling for info fields
t_fldcat-fix_column = c_yes.
modify gt_fieldcat from t_fldcat transporting fix_column
where fieldname eq 'VBELN'.
endform. " fill_fieldcat
*& Form prepare_ALV
Fill ALV parameters
form prepare_alv.
fill ALV key info
g_keyinfo-header01 = 'LGTOR'.
g_keyinfo-item01 = 'LGTOR'.
fill ALV events
gs_event-name = 'TOP_OF_PAGE'.
gs_event-form = 'TOP_OF_PAGE'.
append gs_event to gt_events.
fill ALV sort table
perform fill_sort.
fill ALV layout structure
perform fill_layout.
fill ALV field category
perform fill_fieldcat.
endform. " prepare_ALV
*& Form user_command
form called on user command from ALV list
form user_command using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
data: index type i,
w_disp_head like line of t_disp_head,
w_door like likp-lgtor.
clear r_lgtor. refresh r_lgtor.
case r_ucomm.
when 'PICK'. " Double click line
when 'VANM'. " Van Manifest button
read the header table where has been selected
loop at t_disp_head into w_disp_head where mark = c_yes.
r_lgtor-sign = 'I'.
r_lgtor-option = 'EQ'.
r_lgtor-low = w_disp_head-lgtor.
append r_lgtor.
endloop.
print the van manifest
perform print_van_manifest tables r_lgtor.
when 'EODM'. " EOD Manifest button
read the header table where has been selected
loop at t_disp_head into w_disp_head where mark = c_yes.
r_lgtor-sign = 'I'.
r_lgtor-option = 'EQ'.
r_lgtor-low = w_disp_head-lgtor.
append r_lgtor.
endloop.
print the end of day manifest
perform print_eod_manifest tables r_lgtor.
when 'REFR'. "Refresh
refresh display
w_sy_repid = sy-repid.
call function 'RS_REFRESH_FROM_SELECTOPTIONS'
exporting
curr_report = w_sy_repid
tables
selection_table = seltab.
exceptions
not_found = 1
no_report = 2
others = 3.
if sy- -
Script Print Program Logic.......
Hi All
This is the print program of my script, i am not getting the logic..can any body help me with this..
INCLUDE rvadtabl.
TABLES: vbuk, "Vertriebsbeleg (Kopf)-Status
vbco3, "Schlüsselfelder Vertriebsbeleg
vbpla, "Allgemeine Transportdaten
vbplk, "Versandelement Kopfdaten
vbplp, "Versandelement Positionsdaten
vbpls, "Verpackung Summendaten
vekp,
adrc,
vbfa. "DEVK937590
TABLES: vbkd. "DEVK942078
*DEVK9A0EB4 - Add define
TYPES:
ty_itcsy TYPE STANDARD TABLE OF itcsy.
start of change for DEVK937590
DATA: BEGIN OF t_deliveryflow OCCURS 0, "VBFA delivery flow
vbeln LIKE vbfa-vbeln, "Subsequent sales and distribu
END OF t_deliveryflow.
DATA: v_lin TYPE i.
CONSTANTS: c_x(1) TYPE c VALUE 'X'.
end of change for DEVK937590
DATA: BEGIN OF xvbplk OCCURS 10.
INCLUDE STRUCTURE vbplk.
DATA: END OF xvbplk.
DATA : BEGIN OF vbdkl OCCURS 10.
INCLUDE STRUCTURE vbdkl.
DATA : END OF vbdkl.
DATA: BEGIN OF tvbdpl OCCURS 0. "Internal table for items
INCLUDE STRUCTURE vbdpl.
DATA: END OF tvbdpl.
DATA: BEGIN OF xvbplp OCCURS 50.
INCLUDE STRUCTURE vbplp.
DATA: END OF xvbplp.
DATA: BEGIN OF xvbpls OCCURS 10.
INCLUDE STRUCTURE vbpls.
DATA: END OF xvbpls.
DATA: retcode LIKE sy-subrc.
DATA: xscreen(1) TYPE c. "Ausgabe auf Drucker oder Bildschirm
DATA: t_vepo LIKE vepo OCCURS 0 WITH HEADER LINE, "VEPO internal table
BEGIN OF t_cartons OCCURS 0, "Internal table for cartons
venum LIKE vepo-venum, "Shipping unit # for carton
END OF t_cartons,
BEGIN OF t_boxes OCCURS 0, "Internal table for BOXES
venum LIKE vepo-venum, "Shipping unit # for BOXES
laeng LIKE vekp-laeng,
breit LIKE vekp-breit,
hoehe LIKE vekp-hoehe,
meabm LIKE vekp-meabm,
END OF t_boxes,
BEGIN OF t_pack_dim OCCURS 0,
laeng LIKE vekp-laeng,
breit LIKE vekp-breit,
hoehe LIKE vekp-hoehe,
meabm LIKE vekp-meabm,
box_qty TYPE i,
END OF t_pack_dim,
v_venum LIKE vepo-venum, "Shipping unit number
i_cartons TYPE i, "# of cartons (Integer type)
i_boxes TYPE i, "# of boxes (Integer type)
i_box_count TYPE i, "# of boxes/carton "DEVK926768
c_cartons(4) TYPE c, "# of cartons (Character type)
c_boxes(4) TYPE c, "# of boxes (Character type)
c_bolnr(35) TYPE c,
v_tel_number LIKE adrc-tel_number,
v_adrnr LIKE adrc-addrnumber,
v_kdmat LIKE lips-kdmat,
v_btgew LIKE likp-btgew,
v_gewei LIKE likp-gewei,
v_arktx LIKE lips-arktx.
******DEVK9A0IK7 Addition by RAMARAJG Starts here
types : BEGIN OF t_item ,
posnr1 type vbplp-posnr,
material1 TYPE mara-matnr,
brgew1 type vbplp-brgew,
vemeh1 type vbplp-vemeh,
item_weight1 TYPE n,
arktx1 type vbplp-arktx,
vboxcnt type n,
end of t_item.
*types : BEGIN OF t_item1 ,
posnr1 type vbplp-posnr,
material1 TYPE mara-matnr,
vemng1 type vbplp-brgew,
vemeh1 type vbplp-vemeh,
item_weight1 TYPE n,
arktx1 type vbplp-arktx,
v_boxcnt type n,
end of t_item1.
DATA: it_item TYPE TABLE OF t_item,
wa_item TYPE t_item.
data: it_item1 type table of t_item,
wa_item1 type t_item.
*data: wa_itab1 like itab1.
data: v_grwt type lips-brgew, "Gross Weight in KG
v_gunit type likp-gewei, "Gross Weight Unit
v_netwt type lips-ntgew, "Net Weight
v_unit type likp-gewei. "Net Weight Unit
v_tboxes type i,
******DEVK9A0IK7 Addition by RAMARAJG ends here
A. Nachricht (allgemein) *
FORM entry USING return_code us_screen.
CLEAR retcode.
xscreen = us_screen.
PERFORM processing USING us_screen.
IF retcode NE 0.
return_code = 1.
ELSE.
return_code = 0.
ENDIF.
ENDFORM. "entry
FORM PROCESSING *
--> PROC_SCREEN *
FORM processing USING proc_screen.
PERFORM get_data. " <-- speziell
PERFORM form_open USING proc_screen vbpla-land1.
CHECK retcode = 0.
PERFORM shipping_point_tel_no.
PERFORM boxes_and_cartons.
PERFORM gross_weight.
***********DEVK9A0IK7 starts here
*******Perform to get the Net weight
*******Perform to get Total weight for each line item
Perform net_weight. "DEVK9A0IK7
Perform Total_weight. "DEVK9A0IK7
***********DEVK9A0IK7 ends here
PERFORM bill_of_lading.
CHECK retcode = 0.
PERFORM check_repeat.
PERFORM text_print. " <-- speziell
begin shb
PERFORM get_end_customer_po.
*end shb
PERFORM packing_dimensions.
PERFORM remarks.
CHECK retcode = 0.
PERFORM form_close.
CHECK retcode = 0.
ENDFORM. "processing
FORM FORM_OPEN *
--> US_SCREEN *
--> US_COUNTRY *
FORM form_open USING us_screen us_country.
INCLUDE rvadopfo.
ENDFORM. "form_open
FORM FORM_CLOSE *
FORM form_close.
CALL FUNCTION 'CLOSE_FORM' "...Ende Formulardruck
EXCEPTIONS OTHERS = 1.
IF sy-subrc NE 0.
retcode = 1.
PERFORM protocol_update.
ENDIF.
SET COUNTRY space.
ENDFORM. "form_close
FORM CHECK_REPEAT *
FORM check_repeat.
SELECT * INTO *nast FROM nast WHERE kappl = nast-kappl
AND objky = nast-objky
AND kschl = nast-kschl
AND spras = nast-spras
AND parnr = nast-parnr
AND parvw = nast-parvw
AND nacha BETWEEN '1' AND '4'.
CHECK *nast-vstat = '1'.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'REPEAT'
window = 'REPEAT'
EXCEPTIONS
element = 1
window = 2.
IF sy-subrc NE 0.
PERFORM protocol_update.
ENDIF.
EXIT.
ENDSELECT.
ENDFORM. "check_repeat
FORM PROTOCOL_UPDATE *
FORM protocol_update.
CHECK xscreen = space.
CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
msg_arbgb = syst-msgid
msg_nr = syst-msgno
msg_ty = syst-msgty
msg_v1 = syst-msgv1
msg_v2 = syst-msgv2
msg_v3 = syst-msgv3
msg_v4 = syst-msgv4
EXCEPTIONS
OTHERS = 1.
ENDFORM. "protocol_update
B. Packliste (speziell) *
Die Verpackung von Lieferungen wird durch Versandelemente (VSE)
realisiert. Technisch ist ein Versandelement ein Beleg mit Kopf-
und Positionsdaten (Strukturen VBPLK/XVBPLK und VBPLP/XVBPLP).
Eine Position in einem VSE ist entweder wieder ein VSE oder Teil
eine Lieferposition (also mit den zum VSE gehörenden Materialen/
Versandhilftsmitteln verpackt). Der Zusammenhang zur Lieferung
wird durch die beiden Felder VBELN (Lieferung) und POSNR (Position)
in der Struktur VBPLP realisiert. Es ist zu beachten, daß ein VSE
keine Positionsdaten enthalten muß: Die Lieferung wurde dann nicht
vollständig verpackt.
Mathematisch gesehen stellen die VSE einen Wald (aus Bäumen) dar.
An den Knoten können noch Lieferpositionsdaten hängen. Um zu
erkennen ob ein Knoten eine Wurzel oder (und) ein Blatt ist, gibt
es im VSE-Kopf Kennzeichen. Ist KZOBE gesetzt, so ist das VSE ein
oberes Element, also eine Wurzel. Ist KZUNT gesetzt, stellt das VSE
ein unteres Element dar, also ein Blatt. Ist keines der beiden
Kennzeichen gesetzt dann ist das VSE ein innerer Knoten. Es ist
zu beachten, daß beiden Kennzeichen gesetzt sein können: Der Baum
besteht aus einem Knoten. Die Tiefe eines Knotens durch das Feld
TIVEL gegeben.
Weiterhin ist der Baum doppelt verkettet. Es ist also möglich,
nicht nur einen Weg von der Wurzel (eines Teilbaums) zu einem
Blatt zu finden, sondern auch umgekehrt von einem Blatt zur Wurzel
zu gelangen. Dazu existiert (im VSE-Kopf) das Feld UEVEL, also
das übergeordnete VSE.
Um schließlich zu entscheiden, ob ein VSE-Position ein VSE oder
eine Lieferposition ist, wird das Feld POSNR ausgewertet. Ist
das Feld initial, stellt die Position ein VSE dar, im anderen Fall
enthält es die Lieferposition. Ist die Position ein VSE, steht im
Feld UNVEL das zugehörige untergeordnete VSE.
FORM get_data.
vbco3-vbeln = nast-objky.
vbco3-spras = nast-spras.
vbco3-kunde = nast-parnr.
vbco3-parvw = nast-parvw.
*mod+
CALL FUNCTION 'RV_DELIVERY_PRINT_VIEW'
EXPORTING
comwa = vbco3
IMPORTING
kopf = vbdkl
TABLES
pos = tvbdpl.
CALL FUNCTION 'SD_PACKING_PRINT_VIEW'
EXPORTING
comwa = vbco3
IMPORTING
vbpla_wa = vbpla
TABLES
vbplk_tab = xvbplk
vbplp_tab = xvbplp
vbpls_tab = xvbpls
EXCEPTIONS
OTHERS = 01.
LOOP AT xvbplk WHERE kzobe = 'X'.
EXIT.
ENDLOOP.
IF sy-subrc > 0.
syst-msgid = 'VL'.
syst-msgno = '490'.
syst-msgty = 'E'.
PERFORM protocol_update.
retcode = 1.
ENDIF.
ENDFORM. "get_data
FORM TEXT_PRINT *
FORM text_print.
Die Kopfdaten werden implizit ausgegeben, ...
... dann die Überschriften der Positionen ...
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'HEADER'
type = 'TOP'.
... und schließlich die Positionen ausgeben ...
LOOP AT xvbplk WHERE kzobe = 'X'.
PERFORM packing_tree USING xvbplk-venum.
ENDLOOP.
ENDFORM. "text_print
Rekursive Prozedur
FORM packing_tree USING value(shenr).
Daten des Versandelements shenr ausgeben, also Wurzel des Teilbaums
MOVE space TO xvbplk.
xvbplk-venum = shenr.
READ TABLE xvbplk.
vbplk = xvbplk.
READ TABLE t_cartons WITH KEY venum = vbplk-venum.
IF sy-subrc = 0.
IF vbplk-brgew <> 0.
PERFORM set_textsymbol USING '&CARTON_WEIGHT&'
vbplk-brgew.
ELSE.
PERFORM set_textsymbol USING '&CARTON_WEIGHT&'
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'SHELEM'.
ENDIF.
Nun die Positionen abarbeiten (Teilbäume durchlaufen).
Hier wäre eventuell ein Sortierung zwischen Lieferpositionen
und weiteren Versandelementen sinnvoll. Alle nachgeordneten
Positionen liegen eine Stufe tiefer.
LOOP AT xvbplp WHERE venum = shenr.
IF xvbplp-posnr IS INITIAL.
Versandelement
PERFORM packing_tree USING xvbplp-unvel.
ELSE.
Lieferposition (Anteil)
vbplp = xvbplp.
PERFORM customer_material.
***ramarajg starts.
perform item_list.
***ramarajg end.
IF vbplp-brgew <> 0.
PERFORM set_textsymbol USING '&ITEM_WEIGHT&'
vbplp-brgew.
ELSE.
PERFORM set_textsymbol USING '&ITEM_WEIGHT&'
ENDIF.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'DELPOS'.
ENDIF.
ENDLOOP.
***ramarajg starts.
perform TOTAL_WEIGHT.
loop at it_item into wa_item.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'ITEMPOS'.
endloop.
break ramarajg.
***ramarajg end.
ENDFORM. "packing_tree
FORM SET_TEXTSYMBOL *
FORM set_textsymbol USING text_symbol
text_value.
CALL FUNCTION 'TEXT_SYMBOL_SETVALUE'
EXPORTING
name = text_symbol
value = text_value.
ENDFORM. "set_textsymbol
*& Form BOXES_AND_CARTONS
text
--> p1 text
<-- p2 text
FORM boxes_and_cartons.
CLEAR: t_cartons,
t_boxes,
i_cartons,
i_boxes.
REFRESH: t_cartons,
t_boxes.
start of change for DEVK937590
CLEAR t_deliveryflow[].
SELECT vbeln
FROM vbfa
INTO CORRESPONDING FIELDS OF TABLE t_deliveryflow
WHERE vbelv = vbpla-vbeln AND vbtyp_n = c_x.
Select data
DESCRIBE TABLE t_deliveryflow LINES v_lin.
CHECK v_lin GT 0.
SELECT venum vbeln
FROM vepo
INTO CORRESPONDING FIELDS OF TABLE t_vepo
FOR ALL ENTRIES IN t_deliveryflow
WHERE venum = t_deliveryflow-vbeln.
SELECT VENUM
VBELN
FROM VEPO
INTO CORRESPONDING FIELDS OF TABLE T_VEPO
WHERE VBELN = VBPLA-VBELN.
end of change for DEVK937590
SORT t_vepo BY venum.
DELETE ADJACENT DUPLICATES FROM t_vepo COMPARING venum.
Determine the number of cartons and boxes to be shipped.
To determine the number of cartons, shipping unit number (VENUM) is
checked if it a lower-level shipping unit. This is done by reading
table VEPO and checking if VENUM exist in UNVEL (Lower-level shipping
unit). If it does, this means that VENUM is contained within
another container. If it does not exist, it is considered the highest
level of packing for that specific delivery.
LOOP AT t_vepo.
check if VENUM is a lower level shipping unit.
SELECT SINGLE venum INTO v_venum
FROM vepo
WHERE unvel = t_vepo-venum.
If shipping unit number is found, count as carton.
IF sy-subrc = 0.
check if carton already exist for the carton.
READ TABLE t_cartons WITH KEY venum = v_venum.
if carton does not exist, append table
IF sy-subrc <> 0.
t_cartons-venum = v_venum.
APPEND t_cartons.
ENDIF.
ENDIF.
ENDLOOP.
count boxes and cartons
DESCRIBE TABLE t_vepo LINES i_boxes.
DESCRIBE TABLE t_cartons LINES i_cartons.
Convert cartons and boxes field values to CHARACTER type FORMAT.
In order to save the output values to the output fields, the
fields are converted to CHARACTER type formats.
MOVE: i_cartons TO c_cartons,
i_boxes TO c_boxes.
PERFORM set_textsymbol USING '&BOXES&'
c_boxes.
PERFORM set_textsymbol USING '&CARTONS&'
c_cartons.
ENDFORM. " BOXES_AND_CARTONS
*& Form BILL_OF_LADING
text
--> p1 text
<-- p2 text
FORM bill_of_lading.
SELECT SINGLE bolnr
FROM likp
INTO c_bolnr
WHERE vbeln = vbpla-vbeln.
PERFORM set_textsymbol USING '&BILL_OF_LADING&'
c_bolnr.
ENDFORM. " BILL_OF_LADING
*& Form PACKING_DIMENSIONS
text
--> p1 text
<-- p2 text
FORM packing_dimensions.
CLEAR: T_BOXES,
T_PACK_DIM.
REFRESH: T_BOXES,
T_PACK_DIM.
SELECT VENUM
LAENG
BREIT
HOEHE
MEABM
FROM VEKP
INTO CORRESPONDING FIELDS OF TABLE T_BOXES
FOR ALL ENTRIES IN T_VEPO
WHERE VENUM = T_VEPO-VENUM.
LOOP AT T_BOXES.
READ TABLE T_PACK_DIM WITH KEY LAENG = T_BOXES-LAENG
BREIT = T_BOXES-BREIT
HOEHE = T_BOXES-HOEHE
MEABM = T_BOXES-MEABM.
IF SY-SUBRC = 0.
T_PACK_DIM-BOX_QTY = T_PACK_DIM-BOX_QTY + 1.
MODIFY T_PACK_DIM INDEX SY-TABIX.
ELSE.
T_PACK_DIM-LAENG = T_BOXES-LAENG.
T_PACK_DIM-BREIT = T_BOXES-BREIT.
T_PACK_DIM-HOEHE = T_BOXES-HOEHE.
T_PACK_DIM-MEABM = T_BOXES-MEABM.
T_PACK_DIM-BOX_QTY = 1.
APPEND T_PACK_DIM.
ENDIF.
ENDLOOP.
LOOP AT T_PACK_DIM.
AT FIRST.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'PACKING_DIMENSIONS_HEADER'.
ENDAT.
CLEAR: VEKP,
C_BOXES.
VEKP-LAENG = T_PACK_DIM-LAENG.
VEKP-BREIT = T_PACK_DIM-BREIT.
VEKP-HOEHE = T_PACK_DIM-HOEHE.
VEKP-MEABM = T_PACK_DIM-MEABM.
MOVE: T_PACK_DIM-BOX_QTY TO C_BOXES.
PERFORM SET_TEXTSYMBOL USING '&BOX_QTY&'
C_BOXES.
IF VEKP-LAENG <> 0 AND
VEKP-BREIT <> 0 AND
VEKP-HOEHE <> 0.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'PACKING_DIMENSIONS'.
ENDIF.
ENDLOOP.
ENDFORM. " PACKING_DIMENSIONS
*& Form REMARKS
text
--> p1 text
<-- p2 text
FORM remarks.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
element = 'REMARKS'.
ENDFORM. " REMARKS
*& Form SHIPPING_POINT_TEL_NO
text
--> p1 text
<-- p2 text
FORM shipping_point_tel_no.
SELECT SINGLE adrnr
FROM tvst
INTO v_adrnr
WHERE vstel = vbpla-vstel.
SELECT SINGLE tel_number
FROM adrc
INTO adrc-tel_number
WHERE addrnumber = v_adrnr.
ENDFORM. " SHIPPING_POINT_TEL_NO
*& Form CUSTOMER_MATERIAL
text
--> p1 text
<-- p2 text
FORM customer_material.
CLEAR: v_kdmat.
begin of mod*
IF vbdkl-lfart = 'LO'.
SELECT SINGLE kdmat postx
INTO (v_kdmat , v_arktx)
FROM knmt
WHERE vkorg = vbdkl-vkorg
AND vtweg = '01'
AND kunnr = vbdkl-kunag
AND matnr = vbplp-matnr.
IF NOT v_kdmat IS INITIAL.
vbplp-matnr = v_kdmat.
vbplp-arktx = v_arktx.
ENDIF.
ELSE.
SELECT SINGLE kdmat
FROM lips
INTO v_kdmat
WHERE vbeln = vbplp-vbeln AND
posnr = vbplp-posnr AND
matnr = vbplp-matnr.
ENDIF.
**ramarajg
IF v_kdmat <> ' '.
PERFORM set_textsymbol USING '&MATERIAL&'
v_kdmat.
ELSE.
PERFORM set_textsymbol USING '&MATERIAL&'
vbplp-matnr.
ENDIF.
ENDFORM. " CUSTOMER_MATERIAL
FORM ITEM_WEIGHTS *
--> IN_TAB4 *
--> OUT_TAB4 *
FORM item_weights TABLES in_tab4 STRUCTURE itcsy
out_tab4 STRUCTURE itcsy.
DATA: n_vbeln(10) TYPE n,
v_btgew LIKE likp-btgew,
v_ntgew1 LIKE vekp-ntgew,
v_btgew1 LIKE likp-btgew,
v_ntgew2 LIKE likp-ntgew,
v_btgew2 LIKE likp-btgew,
BEGIN OF t_venum OCCURS 0,
venum LIKE vepo-venum,
END OF t_venum.
READ TABLE in_tab4 INDEX 1.
CHECK sy-subrc = 0.
MOVE in_tab4-value TO n_vbeln. "convert to numeric type.
start of change for DEVK937590
*break ramarajg.
CLEAR t_deliveryflow[].
SELECT vbeln
FROM vbfa
INTO CORRESPONDING FIELDS OF TABLE t_deliveryflow
WHERE vbelv = n_vbeln AND vbtyp_n = c_x.
Select data
DESCRIBE TABLE t_deliveryflow LINES v_lin.
CHECK v_lin GT 0.
SELECT venum
FROM vepo
INTO CORRESPONDING FIELDS OF TABLE t_venum
FOR ALL ENTRIES IN t_deliveryflow
WHERE venum = t_deliveryflow-vbeln.
SELECT VENUM
FROM VEPO
INTO CORRESPONDING FIELDS OF TABLE T_VENUM
WHERE VBELN = N_VBELN.
end of change for DEVK937590
CLEAR v_btgew.
DESCRIBE TABLE t_venum LINES v_lin. "DEVK937590
CHECK v_lin GT 0. "DEVK937590
SELECT ntgew
FROM vekp
INTO v_btgew
FOR ALL ENTRIES IN t_venum
WHERE venum = t_venum-venum.
v_btgew1 = v_btgew1 + v_btgew.
ENDSELECT.
SELECT SUM( ntgew )
FROM lips
INTO v_ntgew1
WHERE vbeln = n_vbeln.
SELECT SINGLE ntgew
btgew
FROM likp
INTO (v_ntgew2, v_btgew2)
WHERE vbeln = n_vbeln.
IF v_ntgew1 = v_ntgew2 AND
v_btgew1 = v_btgew2.
READ TABLE out_tab4 WITH KEY name = 'PRINT_WEIGHT'.
IF sy-subrc = 0 .
out_tab4-value = 'X'.
ELSE.
out_tab4-value = ' '.
ENDIF.
MODIFY out_tab4 INDEX sy-tabix.
ENDIF.
ENDFORM. "item_weights
*& Form GROSS_WEIGHT
text
--> p1 text
<-- p2 text
FORM gross_weight.
CLEAR: v_btgew.
SELECT SINGLE btgew
gewei
FROM likp
INTO (v_btgew, v_gewei)
WHERE vbeln = vbpla-vbeln.
PERFORM set_textsymbol USING '&GROSS_WEIGHT&'
v_btgew.
PERFORM set_textsymbol USING '&GROSS_WEIGHT_UNIT&'
v_gewei.
changes added by RAMARAJG starts here
clear v_grwt.
clear v_gunit.
v_grwt = v_btgew.
v_gunit = v_gewei.
if v_gunit = 'G'.
v_grwt = v_grwt / 1000.
v_gunit = 'KG'.
endif.
PERFORM set_textsymbol USING '&GROSS_WEIGHT1&'
v_grwt.
PERFORM set_textsymbol USING '&GROSS_WEIGHT_UNIT1&'
v_gunit.
changes added by RAMARAJG ends here
ENDFORM. " GROSS_WEIGHT
*& Form GET_END_CUSTOMER_PO
Retrieve End Customer PO#
--> p1 text
<-- p2 text
FORM get_end_customer_po.
DATA: v_zvgbel LIKE lips-vgbel.
DATA v_bstkd_e TYPE bstkd_e.
CLEAR: v_bstkd_e, v_zvgbel.
SELECT SINGLE vgbel INTO v_zvgbel
FROM lips
WHERE vbeln = vbpla-vbeln.
SELECT SINGLE bstkd_e INTO v_bstkd_e
FROM vbkd
WHERE vbeln = v_zvgbel
AND bstkd_e > ''.
PERFORM set_textsymbol USING '&V_BSTKD_E&'
v_bstkd_e.
ENDFORM. " GET_END_CUSTOMER_PO
*DEVK9A0EB4 - Add a form
*& Form shipper_acct
Get shipper account at customer
FORM shipper_acct TABLES in_tab1 TYPE ty_itcsy
out_tab1 TYPE ty_itcsy.
DATA: v_kunag TYPE likp-kunag, " Sold to party
v_eikto TYPE knvv-eikto. "Shipper account number at customer
DATA v_strlen(10) TYPE c.
DATA wa_tab1 TYPE itcsy.
DATA n_vbeln(10) TYPE n.
Get kunnr from likp
CLEAR wa_tab1.
READ TABLE in_tab1 INTO wa_tab1 WITH KEY name = 'VBPLA-VBELN'.
IF sy-subrc = 0.
n_vbeln = vbpla-vbeln.
ENDIF.
CHECK sy-subrc = 0.
SELECT kunag
FROM likp
INTO v_kunag
WHERE vbeln = n_vbeln.
ENDSELECT.
IF sy-subrc = 0.
Get shipper account
SELECT eikto INTO v_eikto
FROM knvv
WHERE kunnr = v_kunag.
ENDSELECT.
IF sy-subrc = 0.
*append the field to the out_tab1 printing output
wa_tab1-name = 'VKNN-EIKTO'.
wa_tab1-value = v_eikto.
APPEND wa_tab1 TO out_tab1.
ENDIF.
ENDIF.
ENDFORM. "shipper_acct
***********DEVK9A0IK7 starts here
*& Form net_weight
text
--> p1 text
<-- p2 text
form net_weight .
CLEAR: v_btgew.
SELECT SINGLE ntgew
gewei
FROM likp
INTO (v_netwt, v_unit)
WHERE vbeln = vbpla-vbeln.
if v_unit = 'G'.
v_netwt = v_netwt / 1000.
v_unit = 'KG'.
endif.
PERFORM set_textsymbol USING '&NET_WEIGHT&'
v_netwt.
PERFORM set_textsymbol USING '&NET_WEIGHT_UNIT&'
v_unit.
endform. " net_weight
***********DEVK9A0IK7 ends here
*& Form item_list
text
--> p1 text
<-- p2 text
form item_list.
move vbplp-posnr to wa_item-posnr1.
*move material to wa_itab1-material1.
move vbplp-brgew to wa_item-brgew1.
move vbplp-vemeh to wa_item-vemeh1.
*move item_weight to wa_itab1-item_weight1.
*move gross_weight_unit to wa_itab1-gross_weight_unit1.
move v_arktx to wa_item-arktx1.
if v_kdmat <> ' '.
move v_kdmat to wa_item-material1.
else.
move vbplp-matnr to wa_item-material1.
endif.
wa_item-vboxcnt = 1.
append wa_item TO it_item.
CLEAR : wa_item1, wa_item.
it_item1[] = it_item[].
REFRESH it_item[].
break-point.
endform. " item_list
*& Form TOTAL_WEIGHT
text
--> p1 text
<-- p2 text
form TOTAL_WEIGHT .
LOOP AT it_item1 into wa_item1.
READ TABLE it_item INTO wa_item WITH KEY material1 = wa_item1-material1 posnr1 = wa_item1-posnr1.
IF sy-subrc NE 0.
APPEND wa_item1 TO it_item.
ELSE.
wa_item1-brgew1 = wa_item1-brgew1 + wa_item-brgew1.
Wa_item1-vboxcnt = wa_item1-vboxcnt + wa_item-vboxcnt.
MODIFY it_item FROM wa_item1 TRANSPORTING brgew1 vboxcnt
WHERE material1 = wa_item1-material1
AND posnr1 = wa_item1-posnr1.
ENDIF.
ENDLOOP.
endform. " TOTAL_WEIGHTthe Logic to be added is this
b. Remove the carton ID & box ID from the print out, the line item should just print the total delivery quantity, do not split the printing by different box ID or carton ID.
i. Delivery Item= LIPS-POSNR
ii. Delivery Qty for Item = LIPSD-G_LFIMG= LIPSD-PIKMG
c. Add Total Boxes for each item, this should be a calculation field for each material HUMV4-MATNR, count how many handling unit VEKPVB-EXIDV has been used to pack the same material , output the total boxes for each delivery item.
d. Add Gross Weight for each item , retrieve data from LIPS-BRGEW
e. Add Net weight to the print out, below the gross weight retrieve data from LIKP-NTGEW
Maybe you are looking for
-
Counting date transactions for last six months
Post Author: crystalrook CA Forum: Formula Any help is greatly appreciated. I am running Crystal XI. I have an order field (PurchaseOders.PODatePlaced) for each item. There can be multiple orders in the same month for each item of course. I would l
-
New PAR file not appearing in the Portal Archive Selection list
Hello Knowledgeable Portal Ones, I am on EP6.0 SP13. A developer on the team created a new PAR. It was uploaded, and it is now showing in my portalapps directory. A super-admin for the portal can successfully create an iView using it (New from PAR)
-
Lumia 620 overheating on 3G network
I've been using my lumia on DOCOMO 3G network and found that its back portion, particularly the camera region gets incredulously hot. I dont face the same problem while on 2G network. Is something wrong with my phone, or all the 620s or is it a commo
-
When is flash player going to be available
when is flash player going to be available for the ipad/iphone
-
N9 and Google contacts sync issue (via MfE)
Hi, When syncing my Google contacts using a mail for exchange account I've come across a small problem. The problem is that only one phone number of the same type is being synced. I.e. if I have two mobile phone numbers for a contact then only the fi