Sie sind auf Seite 1von 61

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

*& Include
ZLEW_HU_LIVE_LOAD_COCKPIT_CLS
*&---------------------------------------------------------------------*
*& Functional Spec: JAX Live Load - Truck Complete Cockpit
*& Version
: 1.0
*& Author
: SHAPX525 - Pankaj Sharma
*& Creation date : 10/06/2011
*& Description
: While RF truck complete allows to create STO, Dlvry
*&
& TO, this report transaction allows RF function +
*&
truck load complete for Sales Order too.
*&
*&---------------------------------------------------------------------*
* Modification History
*
*----------------------------------------------------------------------*
* Date
| User ID/Name | Description of Change
*----------------------------------------------------------------------*
* 08/27/2013 | MARSX557
| Added logic to remove line items from STO
*
|
| which are marked for deletion.
*----------------------------------------------------------------------*
CLASS: lcl_main_process DEFINITION DEFERRED,
lcl_alv_process DEFINITION DEFERRED.
DATA: main_process
alv_process
popup_alv
gv_container
gv_popcontainer
gv_alv
gv_popalv

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

REF
REF
REF
REF
REF
REF
REF

TO
TO
TO
TO
TO
TO
TO

lcl_main_process,
lcl_alv_process,
lcl_alv_process,
cl_gui_custom_container,
cl_gui_dialogbox_container,
cl_gui_alv_grid,
cl_gui_alv_grid.

*&---------------------------------------------------------------------*
*&
Class LCL_MAIN_PROCESS
*&---------------------------------------------------------------------*
*
Text
*----------------------------------------------------------------------*
CLASS lcl_main_process DEFINITION.
"#EC *
PUBLIC SECTION.
DATA: t_outtab
wa_outtab
v_matnr

TYPE STANDARD TABLE OF zlew_live_load_s,


TYPE zlew_live_load_s,
TYPE matnr.

DATA: BEGIN OF ls_doors,


lgnum
TYPE lgnum,
lgpla
TYPE lgpla,
complete TYPE char1,
END OF ls_doors.
*-- Method Definition
METHODS: constructor,
process_sto,
process_sales_order,
process_shipment,
assign_delivery_to_shipment
IMPORTING im_shipment TYPE tknum
im_delivery TYPE vbeln_vl,
validate_pallet_item EXPORTING ex_process TYPE char01,
validate_pkg
EXPORTING ex_process TYPE char01.

*-- Static Variables/Structure/Workareas


CLASS-DATA: v_ivakt
TYPE lvs_ivakt,
v_pkgmat
TYPE matnr,
s_lgpla
TYPE ty_lgpla,
wa_vbap
TYPE ty_vbap,
wa_doorcont TYPE ty_door,
wa_makt
TYPE ty_makt,
wa_popout TYPE zlew_live_load_pop_s_new,
wa_doors
TYPE zlew_trck_cmplt,
wa_rettab TYPE ddshretval,
old_sto
TYPE char10,
old_del
TYPE char10,
old_shpmnt type char10.
*-- Static Internal Tables
CLASS-DATA: t_vbap
t_quants
t_doorcont
t_makt
t_exst_sto
t_popout
t_doors
t_rettab

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
LIKE
TYPE

STANDARD
STANDARD
STANDARD
STANDARD
STANDARD
STANDARD
STANDARD
STANDARD

TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE

OF
OF
OF
OF
OF
OF
OF
OF

ty_vbap,
ty_lqua,
ty_door,
ty_makt,
ty_exst_sto,
zlew_live_load_pop_s_new,
ls_doors,
ddshretval.

*-- Static Method Definition


CLASS-METHODS: initialization,
"Get initial user data
hide_fields,
"Hide fields on screen
show_fields,
"Show fields based on radio button
show_shipment,
hide_shipment,
validate_matnr,
validate_swerks,
validate_rwerks,
validate_lgort,
validate_lgpla,
validate_sto,
validate_vbeln,
validate_truck,
calculate_pallets,
handle_screen_buttons,
get_door_content,
validate_shmt,
"KAPRX003/09/03/2015
show_old_doc_nos,
door_f4_help IMPORTING im_status TYPE char01 OPTIONAL
EXPORTING ex_lgpla TYPE lgpla,
get_tax_assignment IMPORTING im_matnr TYPE mara-matnr
im_werks TYPE ewerk
im_bukrs TYPE bukrs
CHANGING ex_knttp TYPE knttp
ex_mwskz TYPE mwskz.
PRIVATE SECTION.
DATA: BEGIN OF w_lips,
vbeln
TYPE
posnr
TYPE
matnr
TYPE
lgort
TYPE
lfimg
TYPE
lgnum
TYPE

lips-vbeln,
lips-posnr,
lips-matnr,
lips-lgort,
lips-lfimg,
lips-lgnum,

END OF w_lips.
*-- Variables
DATA: v_po
v_vbeln
v_shipment
v_tanum
v_item

TYPE
TYPE
TYPE
TYPE
TYPE

ebeln,
vbeln_vl,
bapishipmentids-shipmentnum,
tanum,
ebelp.

*-- Internal Tables


DATA: t_lqua
t_lips
t_return
t_delit
t_poitem
t_poitemx
t_posched
t_poschedx
t_reftosto
t_slsitem

TYPE
LIKE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

STANDARD
TABLE OF
STANDARD
STANDARD
STANDARD
STANDARD
STANDARD
STANDARD
STANDARD
STANDARD

TABLE OF
w_lips,
TABLE OF
TABLE OF
TABLE OF
TABLE OF
TABLE OF
TABLE OF
TABLE OF
TABLE OF

ty_lqua,
bapiret2,
l03b_delit,
bapimepoitem,
bapimepoitemx,
bapimeposchedule,
bapimeposchedulx,
bapidlvreftosto,
bapidlvreftosalesorder.

*-- Structures / Work Areas


DATA: wa_lqua
TYPE ty_lqua,
wa_lips
TYPE lips,
wa_return
TYPE bapiret2,
wa_delit
TYPE l03b_delit,
wa_exst_sto TYPE ty_exst_sto,
wa_poitem
TYPE bapimepoitem,
wa_poitemx
TYPE bapimepoitemx,
wa_posched
TYPE bapimeposchedule,
wa_poschedx TYPE bapimeposchedulx,
wa_reftosto TYPE bapidlvreftosto,
wa_slsitem
TYPE bapidlvreftosalesorder,
s_poheader
TYPE bapimepoheader,
s_poheaderx TYPE bapimepoheaderx.
*-- Method Definition
METHODS: select_data,
create_sto,
create_delivery_frm_sto,
create_to_for_delnote,
create_delivery_frm_sls_order.
ENDCLASS.

"Select
"Create
"Create
"Create
"Create

Data in Constructor
STO
Delivery from STO
TO from Delivery
Delivery from SO

"LCL_MAIN_PROCESS

*----------------------------------------------------------------------*
*
CLASS LCL_ALV_PROCESS DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_alv_process DEFINITION.
"#EC *
PUBLIC SECTION.
METHODS: constructor
IMPORTING
im_type TYPE char03,
prepare_alv_report,
prepare_popalv.

PRIVATE SECTION.
*-- Internal Tables
DATA: t_ind_row
t_row_no
t_fcat
lt_sort
*-- Structures / Work
DATA: s_variant
s_layout
wa_button

TYPE
TYPE
TYPE
TYPE

lvc_t_row,
lvc_t_roid,
STANDARD TABLE OF lvc_s_fcat,
TABLE OF lvc_s_sort.

Areas
TYPE disvariant,
TYPE lvc_s_layo,
TYPE stb_button.

*-- Method Definition


METHODS:
create_object_log,
create_object_popup,
create_field_catalog,
display_alv_report,
create_popalv_fcat,
display_popalv,
handle_hotspot FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id
e_column_id
es_row_no,
handle_toolbar_button FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object
e_interactive,
add_deatils_button FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object
e_interactive,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
user_command_on_popup_alv FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
handle_close_popup
ENDCLASS.

FOR EVENT close OF cl_gui_dialogbox_container.


"LCL_ALV_PROCESS DEFINITION

********************************************************************************
*******
*&---------------------------------------------------------------------*
* Modification History
*
*----------------------------------------------------------------------*
* Date
| User ID/Name | Description of Change
*----------------------------------------------------------------------*
* 08/27/2013 | MARSX557
| Added logic to remove line items from STO
*
|
| which are marked for deletion.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Include
ZLEW_HU_LIVE_LOAD_COCKPIT_TOP
*&---------------------------------------------------------------------*

TABLES: sscrfields.
*-- Types
TYPES: BEGIN OF ty_matnr,
matnr TYPE matnr,
mtart TYPE mtart,
meins TYPE meins,
END OF ty_matnr.
TYPES: BEGIN OF ty_lqua,
lgnum TYPE lgnum,
matnr TYPE matnr,
lgpla TYPE lgpla,
verme TYPE lqua_verme,
meins TYPE meins,
*
lenum type lenum,
bestq TYPE bestq, " **** Addition -- KUMJX005 -- 08/03/2016 revtrac
- 555195
END OF ty_lqua.
TYPES: BEGIN OF ty_vbap,
vbeln TYPE vbeln_va,
posnr TYPE posnr_va,
matnr TYPE matnr,
kwmeng TYPE kwmeng,
vrkme TYPE vrkme,
END OF ty_vbap.
TYPES: BEGIN OF ty_lgpla,
lgtyp TYPE lgtyp,
lgpla TYPE lgpla,
END OF ty_lgpla.
TYPES: BEGIN OF ty_mlgn,
matnr TYPE matnr,
lhmg1 TYPE lvs_lhmng1,
END OF ty_mlgn.
TYPES: BEGIN OF ty_door,
matnr TYPE matnr,
werks TYPE werks_d,
charg TYPE charg_d,
bestq TYPE bestq,
lgpla TYPE lgpla,
meins TYPE meins,
verme TYPE lqua_verme,
mgewi TYPE lqua_mgewi,
gewei TYPE gewei,
END OF ty_door.
TYPES: BEGIN OF ty_makt,
matnr TYPE matnr,
maktx TYPE maktx,
lhmg1 TYPE lvs_lhmng1,
END OF ty_makt.
TYPES: BEGIN OF ty_exst_sto,
ebeln TYPE ebeln,
ebelp TYPE ebelp,

menge TYPE menge_d,


meins TYPE meins,
END OF ty_exst_sto.
TYPES: BEGIN OF ty_ccode,
bwkey TYPE bwkey,
bukrs TYPE bukrs,
END OF ty_ccode.
** Start of change by MARSX557:11/14/2012
TYPES: BEGIN OF ty_lqua1,
matnr TYPE matnr,
werks TYPE werks_d,
bestq TYPE bestq,
lgpla TYPE lgpla,
gesme TYPE lqua_gesme,
END OF ty_lqua1,
BEGIN OF ty_ekpo,
ebeln TYPE ebeln,
ebelp TYPE ebelp,
matnr TYPE matnr,
menge TYPE menge_d,
meins TYPE meins,
insmk TYPE insmk,
END OF ty_ekpo.
** End of change by MARSX557:11/14/2012
** Start of change by KOHPX001:12/05/2012
DATA: BEGIN OF lw_ekbe,
ebeln TYPE ekbe-ebeln,
ebelp TYPE ekbe-ebelp,
zekkn TYPE ekbe-zekkn,
vgabe TYPE ekbe-vgabe,
gjahr TYPE ekbe-gjahr,
belnr TYPE ekbe-belnr,
buzei TYPE ekbe-buzei,
END OF lw_ekbe.
** End of change by KOHPX001:12/05/2012
*-- Constants
CONSTANTS: c_a
TYPE char01 VALUE 'A',
c_col
TYPE char01 VALUE 'S',
c_d
TYPE char01 VALUE 'D',
c_e
TYPE char01 VALUE 'E',
c_x
TYPE char01 VALUE 'X',
c_pgi
TYPE char03 VALUE 'PGI',
c_shpc
TYPE char04 VALUE 'SHPC',
c_det
TYPE char3
VALUE 'DET',
c_fert
TYPE mtart
VALUE 'FERT',
c_hawa
TYPE mtart
VALUE 'HAWA',
c_zert
TYPE mtart
VALUE 'ZERT',
c_seprtr
TYPE char04 VALUE 'SEP1',
c_field
TYPE fieldname VALUE 'LGPLA',
c_tabname TYPE tabname VALUE 'ZLEW_TRCK_CMPLT',
c_struc
TYPE tabname VALUE 'ZLEW_LIVE_LOAD_S',
c_popstruc TYPE tabname VALUE 'ZLEW_LIVE_LOAD_POP_S_NEW',
c_container TYPE char12 VALUE 'GV_CONTAINER',
c_popcntnr TYPE char15 VALUE 'GV_POPCONTAINER'.
*
gc_q
TYPE char01
VALUE 'Q', "Added by MARSX557:11/15/2012
*
gc_i
TYPE char01
VALUE 'I'. "Added by MARSX557:11/15/2012

DATA: gv_okcode
TYPE syucomm,
gv_cursor
TYPE char10,
gv_process
TYPE char01,
g_sbukrs
TYPE bukrs,
g_rbukrs
TYPE bukrs,
gs_wkqu
TYPE lrf_wkqu,
gs_functxt
TYPE smp_dyntxt,
gs_load_comp
TYPE zdps_lewt_ld_com,
gwa_lqua
TYPE ty_lqua,
gwa_mlgn
TYPE ty_mlgn,
l_werks
TYPE werks_d,
gv_ur_stock
TYPE c,
" Unrestricted stock
gv_q_stock
TYPE c.
" Quality inspection
*
gv_qi_flag
TYPE c,
"Added by
12
*
gv_mode
TYPE c VALUE 'N',
"Added by
12
*
gv_vbeln
TYPE vbeln_va,
"Added by
12
*
gw_lqua1
TYPE ty_lqua1,
"Added by
12
*
gw_bdcdata
TYPE bdcdata,
"Added by
12
*
gw_zlew_shipqi_cntl TYPE zlew_shipqi_cntl,
"Added by
12
*
GV_ERR1(8)
TYPE c,
"Added by
12
*
gv_po(10)
TYPE c,
"Added by
12
*
gv_err2(22)
TYPE c,
"Added by
12
*
STO
type EBELN,
"Added by
12
*
MSG(10)
type c,
"Added by
12
**
STO_AND_BIN(3)
type c,
*
STO1(33)
type c,
"Added by
12
*
gv_qterror
type char01,
"Added by
12
*
gv_tyerror
type char01,
"Added by
12
*
gv_error
type char50.
"Added by
12
*&--Begin of change KAPRX003/09/03/2015
DATA: g_del
TYPE likp-vbeln,
g_sto
TYPE lips-vgbel.
DATA: gwa_bdcdata TYPE bdcdata,
gt_bdcdata LIKE TABLE OF gwa_bdcdata,
gt_reftosto TYPE STANDARD TABLE OF bapidlvreftosto.
*&--End of change KAPRX003/09/03/2015
*-- Internal Table
DATA: gt_lqua
TYPE STANDARD TABLE
gt_lqua1
TYPE STANDARD TABLE
gt_mlgn
TYPE STANDARD TABLE
gt_ccode
TYPE STANDARD TABLE

OF
OF
OF
OF

ty_lqua,
ty_lqua,
ty_mlgn,
ty_ccode.

stock
MARSX557:11/14/20
MARSX557:11/14/20
MARSX557:11/14/20
MARSX557:11/14/20
MARSX557:11/14/20
MARSX557:11/14/20
MARSX557:11/14/20
MARSX557:11/14/20
MARSX557:11/14/20
KOHPX001:12/04/20
KOHPX001:12/04/20
KOHPX001:12/04/20
KOHPX001:12/04/20
KOHPX001:12/04/20
KOHPX001:12/04/20

** Start of change by MARSX557:11/14/2012


*DATA: gt_lqua2
TYPE TABLE OF ty_lqua1 WITH HEADER LINE,
*
gt_ekpo
TYPE TABLE OF ty_ekpo,
*
gt_zlew_shipqi_cntl TYPE TABLE OF zlew_shipqi_cntl,
*
gt_bdcdata
TYPE TABLE OF bdcdata,
*
gt_messtab
TYPE TABLE OF bdcmsgcoll,
*
lt_ekbe
LIKE TABLE OF lw_ekbe WITH HEADER LINE. "Added by KOH
PX001:12/05/2012
** End of change by MARSX557:11/14/2012
*----------------------------------------------------------------------*
* SELECTION-SCREEN Tool bar
*----------------------------------------------------------------------*
SELECTION-SCREEN FUNCTION KEY 1.
"Truck Complete
SELECTION-SCREEN FUNCTION KEY 2.
"Cancel Truck Complete
SELECTION-SCREEN FUNCTION KEY 3.
"Door/Truck contents
SELECTION-SCREEN FUNCTION KEY 4.
"Open Orders
*----------------------------------------------------------------------*
* SELECTION-SCREEN
*----------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-b01.
SELECTION-SCREEN: BEGIN OF BLOCK b2 WITH FRAME TITLE text-b02.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: rb_sto RADIOBUTTON GROUP grp1 USER-COMMAND chk DEFAULT 'X'.
SELECTION-SCREEN: COMMENT 5(5) text-002 FOR FIELD rb_sto,
POSITION 31.
PARAMETERS chk_shmt AS CHECKBOX USER-COMMAND chk1.
SELECTION-SCREEN COMMENT 32(10) text-026 FOR FIELD chk_shmt.
SELECTION-SCREEN: END OF LINE.
PARAMETER rb_so RADIOBUTTON GROUP grp1.
SELECTION-SCREEN: END OF BLOCK b2.
SELECTION-SCREEN: BEGIN OF BLOCK b3 WITH FRAME TITLE text-b03.
PARAMETERS: p_lgnum TYPE lgnum OBLIGATORY,
p_vbeln TYPE vbeln_va MODIF ID md2.
SELECT-OPTIONS s_swerks FOR l_werks NO-EXTENSION
NO INTERVALS MODIF ID md1.
PARAMETERS: p_rwerks TYPE werks_d MODIF ID md1,
p_lgort TYPE lgort_d MODIF ID md1,
p_lgpla TYPE char10,
p_sto
TYPE ebeln
MODIF ID md1,
p_shmt
TYPE tknum
MODIF ID md5.
SELECTION-SCREEN: BEGIN OF BLOCK b4 WITH FRAME TITLE text-b04.
PARAMETERS: cb_item AS CHECKBOX USER-COMMAND chk MODIF ID md1,
p_item
TYPE matnr MODIF ID md3,
p_pal
TYPE char04 MODIF ID md3,
cb_pkg
AS CHECKBOX USER-COMMAND chk MODIF ID md1,
p_pkg
TYPE matnr MODIF ID md4,
p_shell TYPE char04 MODIF ID md4.
SELECTION-SCREEN: END OF BLOCK b4.
SELECTION-SCREEN: END OF BLOCK b3.
SELECTION-SCREEN: END OF BLOCK b1.
SELECTION-SCREEN: BEGIN OF BLOCK b5 WITH FRAME TITLE text-b05.
PARAMETERS: p_door TYPE char10.
SELECTION-SCREEN: END OF BLOCK b5.

SELECTION-SCREEN: BEGIN OF BLOCK b6 WITH


PARAMETERS: p_old1 TYPE char10 MODIF ID
p_old2 TYPE char10 MODIF ID
p_shmnt TYPE char10 MODIF ID
SELECTION-SCREEN: END OF BLOCK b6.

FRAME TITLE text-b06.


md6,"Old STO/SO No
md6,"Old Delivery No
md6."Old Shipment No

********************************************************************************
***
*&---------------------------------------------------------------------*
*& Include
ZLEW_HU_LIVE_LOAD_COCKPIT_M01
*&---------------------------------------------------------------------*
*& Functional Spec: JAX Live Load - Truck Complete Cockpit
*& Version
: 1.0
*& Author
: SHAPX525 - Pankaj Sharma
*& Creation date : 10/06/2011
*& Description
: While RF truck complete allows to create STO, Dlvry
*&
& TO, this report transaction allows RF function +
*&
truck load complete for Sales Order too.
*&
*&---------------------------------------------------------------------*
* Modification History
*
*----------------------------------------------------------------------*
* Date
| User ID/Name | Description of Change
*----------------------------------------------------------------------*
* 08/27/2013 | MARSX557
| Added logic to remove line items from STO
*
|
| which are marked for deletion.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&
Class (Implementation) main_process
*&---------------------------------------------------------------------*
*
Text
*----------------------------------------------------------------------*
CLASS lcl_main_process IMPLEMENTATION.
METHOD constructor.
CALL METHOD me->select_data.
ENDMETHOD.
"constructor
*&---------------------------------------------------------------------*
*&
Class (Implementation) main_process
*&---------------------------------------------------------------------*
* Select Pallet(materials) on the floor, from LQUA. Only when they are
* not already selected.
*----------------------------------------------------------------------*
METHOD select_data.
DATA: lw_ccode TYPE ty_ccode.
gv_process = c_x.
CLEAR : gv_ur_stock , gv_q_stock.
* assign p_sto to v_po since its already being used.
IF p_sto IS NOT INITIAL.
v_po = p_sto.
ENDIF.
* check if Door is not empty, we cannot do it on selection screen which
* will block the whole screen, which we don't want since user might want
* display or complete the door using screen button, hence doing here.

IF p_lgpla IS INITIAL.
MESSAGE s001(00) WITH text-m11.
gv_process = space.
ENDIF.
CHECK gs_load_comp IS INITIAL AND
gt_lqua
IS INITIAL.
SELECT SINGLE *
FROM zdps_lewt_ld_com
INTO gs_load_comp
WHERE lgnum = p_lgnum
AND swerks IN s_swerks
AND rwerks = p_rwerks
AND lgort = p_lgort.
IF gs_load_comp-vltyp IS INITIAL.
gs_load_comp-vltyp = 'STG'.
ENDIF.
SELECT lgnum
" Warehouse Number
matnr
" Material Number
lgpla
" Bin
verme
" Available Stock
meins
" UOM
*
lenum
bestq
FROM lqua
INTO TABLE gt_lqua
WHERE lgnum = p_lgnum
AND werks IN s_swerks
AND lgtyp = gs_load_comp-vltyp
AND lgpla = p_lgpla
*
AND bestq = space.
"Available Stock
" Commented -- KUM
JX005 -- 08/03/2016 revtrac - 555195
****
Begin of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
AND bestq IN (' ' , 'Q' ).
** if gt_lqua table contains more than one entry, then only is the possibility
of having Mix stock
IF sy-dbcnt GT 1.
LOOP AT gt_lqua INTO gwa_lqua.
IF gwa_lqua-bestq EQ ' '.
gv_ur_stock = 'X'.
ELSEIF gwa_lqua-bestq EQ 'Q'.
gv_q_stock = 'X'.
ENDIF.
ENDLOOP.
****
if both flags are set to 'X', an error message should be there as ther
e can either be Unrestricted stock or Quality inspection stock
IF gv_ur_stock = 'X' AND gv_q_stock = 'X'.
MESSAGE 'Mix stock category is not allowed. Please correct' TYPE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
ELSE.
READ TABLE gt_lqua INTO gwa_lqua WITH KEY bestq = 'Q'.
IF sy-subrc EQ 0.
gv_q_stock = 'X'.
ENDIF.

ENDIF.
End of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
CLEAR gt_ccode.

****

* Get valuation key and company code from table T001K


* access using key field BWKEY
SELECT bwkey bukrs
FROM t001k
INTO TABLE gt_ccode
WHERE bwkey = gs_load_comp-swerks
OR bwkey = gs_load_comp-rwerks.
IF sy-subrc = 0.
SORT gt_ccode BY bwkey bukrs.
* Get Supplying Company Code
READ TABLE gt_ccode INTO lw_ccode
WITH KEY bwkey = gs_load_comp-swerks
BINARY SEARCH.
IF sy-subrc = 0.
g_sbukrs = lw_ccode-bukrs.
ENDIF.
* Get Receiving Company Code
READ TABLE gt_ccode INTO lw_ccode
WITH KEY bwkey = gs_load_comp-rwerks
BINARY SEARCH.
IF sy-subrc = 0.
g_rbukrs = lw_ccode-bukrs.
ENDIF.
ENDIF.
*&--Begin of change KAPRX003/09/03/2015
*&--Get Delivery and STO/SO from shipment
IF NOT p_shmt IS INITIAL.
SELECT SINGLE vbeln INTO g_del FROM vttp WHERE tknum = p_shmt.
IF sy-subrc = 0.
SELECT SINGLE vgbel INTO g_sto FROM lips WHERE vbeln = g_del.
IF sy-subrc NE 0.
CLEAR g_sto.
ENDIF.
ELSE.
CLEAR g_del.
ENDIF.
ENDIF.
*&--If SO is blank but shipment has value
IF t_vbap[] IS INITIAL AND rb_so = 'X'.
p_vbeln = g_sto.
SELECT vbeln
posnr
matnr
kwmeng
vrkme
FROM vbap
INTO TABLE t_vbap
WHERE vbeln = g_sto.
IF sy-subrc = 0.

SORT t_vbap BY vbeln.


ENDIF.
ENDIF.
*&--end of change KAPRX003/09/03/2015
ENDMETHOD.
"select_data
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'PROCESS_STO'
***--------------------------------------------------------------------*
***
If STO process is chosen, create STO, Delivery & TO.
***--------------------------------------------------------------------*
METHOD process_sto.
DATA: l_sto_no TYPE seqg3-garg,
lt_lock TYPE TABLE OF seqg3,
lw_lock TYPE seqg3.
* First check if fields we need are duly populated.
CHECK rb_sto IS NOT INITIAL.
IF ( NOT
NOT
NOT
NOT
( NOT
NOT

s_swerks
p_rwerks
p_lgort
p_lgpla
p_sto
p_lgpla

IS
IS
IS
IS
IS
IS

INITIAL
INITIAL
INITIAL
INITIAL
INITIAL
INITIAL

AND
AND
AND
) OR
AND
).

* Create STO
CALL METHOD me->create_sto.
* Create Outbound Delivery if STO is created else error log
IF NOT v_po IS INITIAL.
CLEAR l_sto_no.
CONCATENATE sy-mandt v_po INTO l_sto_no.
DO 15 TIMES.
CLEAR lt_lock.
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
gname
= 'EKKO'
garg
= l_sto_no
TABLES
enq
= lt_lock
EXCEPTIONS
communication_failure = 1
system_failure
= 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.
IF lt_lock IS INITIAL.
CALL METHOD me->create_delivery_frm_sto.
EXIT.
ELSE.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDDO.

*&--Begin of change KAPRX003/09/03/2015


ELSEIF v_po IS INITIAL AND NOT g_sto IS INITIAL.
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'Outbound Delivery'(003).
wa_outtab-intrldoctyp = 'DEL'.
wa_outtab-document = g_del.
APPEND wa_outtab TO t_outtab.
*&--End of change KAPRX003/09/03/2015
ELSE.
wa_outtab-status = icon_red_light.
wa_outtab-doctyp = 'Outbound Delivery'(003).
wa_outtab-intrldoctyp = 'DEL'.
wa_outtab-message = 'No PO. No Delivery / TO'(014).
APPEND wa_outtab TO t_outtab.
ENDIF.
* If Shipment checkbox is selected - Create/Delivery/TO
*&--Begin of change KAPRX003/09/03/2015
IF v_vbeln IS INITIAL.
v_vbeln = g_del.
ENDIF.
*&--End of change KAPRX003/09/03/2015
IF v_vbeln IS NOT INITIAL.
CALL METHOD me->process_shipment.
ELSE.
wa_outtab-status = icon_red_light.
wa_outtab-doctyp = 'Shipment'(026).
wa_outtab-intrldoctyp = 'SHMT'.
wa_outtab-message = 'No Shipment. No TO'(027).
APPEND wa_outtab TO t_outtab.
ENDIF.
CALL METHOD me->assign_delivery_to_shipment
EXPORTING
im_shipment = v_shipment
im_delivery = v_vbeln.
* Create TO only if Outbound Delivery is created else error log
IF v_vbeln IS NOT INITIAL.
CALL METHOD me->create_to_for_delnote.
ELSE.
wa_outtab-status = icon_red_light.
wa_outtab-doctyp = 'Transfer Order'(005).
wa_outtab-intrldoctyp = 'TO'.
wa_outtab-message = 'No Delivery. No TO'(011).
APPEND wa_outtab TO t_outtab.
ENDIF.
ENDIF.
CLEAR: wa_outtab.
ENDMETHOD.
"process_sto
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'PROCESS_SALES_ORDER'
***--------------------------------------------------------------------*
METHOD process_sales_order.
*** If Sales Order process, create Delivery & TO.
*** We already have Sales Order.
IF NOT rb_so IS INITIAL AND

NOT p_vbeln IS INITIAL AND


NOT p_lgpla IS INITIAL.
lcl_main_process=>old_sto = p_vbeln.
CALL METHOD me->create_delivery_frm_sls_order.
* If Shipment checkbox is selected - Create/Delivery/TO
IF v_vbeln IS NOT INITIAL.
CALL METHOD me->process_shipment.
ELSE.
wa_outtab-status = icon_red_light.
wa_outtab-doctyp = 'Shipment'(026).
wa_outtab-intrldoctyp = 'SHMT'.
wa_outtab-message = 'No Shipment. No TO'(027).
APPEND wa_outtab TO t_outtab.
ENDIF.
* Assign delivery to shipment
CALL METHOD me->assign_delivery_to_shipment
EXPORTING
im_shipment = v_shipment
im_delivery = v_vbeln.
* Create TO only if Outbound Delivery is created else error log
IF v_vbeln IS NOT INITIAL.
CALL METHOD me->create_to_for_delnote.
ELSE.
wa_outtab-status = icon_red_light.
wa_outtab-doctyp = 'Transfer Order'(005).
wa_outtab-intrldoctyp = 'TO'.
wa_outtab-message = 'No Delivery. No TO'(011).
APPEND wa_outtab TO t_outtab.
ENDIF.
ENDIF.
ENDMETHOD.
"process_sales_order
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'PROCESS_SHIPMENT'
***--------------------------------------------------------------------*
METHOD process_shipment.
DATA: lt_bapiret TYPE TABLE OF bapiret2,
lw_header TYPE bapishipmentheader,
l_tplst
TYPE ttplst-tplst,
l_tknum
TYPE vttk-tknum.
IF chk_shmt IS NOT INITIAL.
IF p_shmt IS INITIAL.
IF v_vbeln IS NOT INITIAL.
SELECT SINGLE a~tplst INTO l_tplst
FROM ttplst AS a INNER JOIN likp AS b
ON a~vstel EQ b~vstel
WHERE b~vbeln EQ v_vbeln.
IF sy-subrc EQ 0.
lw_header-trans_plan_pt = l_tplst.
lw_header-shipment_type = 'Z121'.
CALL FUNCTION 'BAPI_SHIPMENT_CREATE'

EXPORTING
headerdata = lw_header
IMPORTING
transport = v_shipment
TABLES
return
= lt_bapiret.
ENDIF.
IF v_shipment IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
lcl_main_process=>old_shpmnt = v_shipment.
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'Shipment'(026).
wa_outtab-intrldoctyp = 'SHMT'.
wa_outtab-document = v_shipment.
APPEND wa_outtab TO t_outtab.
ENDIF.
ENDIF.
ELSE.
SELECT SINGLE tknum FROM vttk INTO l_tknum WHERE tknum EQ p_shmt.
IF sy-subrc EQ 0.
v_shipment = l_tknum.
CLEAR wa_outtab.
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'Shipment'(026).
wa_outtab-intrldoctyp = 'SHMT'.
wa_outtab-document = v_shipment.
APPEND wa_outtab TO t_outtab.
ELSE.
MESSAGE i418(zlew02) DISPLAY LIKE 'E'."Invalid Shipment
RETURN.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
"process_shipment
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'ASSIGN_DELIVERY_TO_SHIPMENT'
***--------------------------------------------------------------------*
METHOD assign_delivery_to_shipment.
IF ( im_shipment IS INITIAL ) OR ( im_delivery IS INITIAL ).
EXIT.
ENDIF.
DATA: BEGIN OF lw_vttp,
tknum TYPE vttp-tknum,
tpnum TYPE vttp-tpnum,
vbeln TYPE vttp-vbeln,
END OF lw_vttp.
DATA: BEGIN OF lw_ekbe,
ebeln TYPE ekbe-ebeln,
ebelp TYPE ekbe-ebelp,
zekkn TYPE ekbe-zekkn,
vgabe TYPE ekbe-vgabe,

gjahr TYPE ekbe-gjahr,


belnr TYPE ekbe-belnr,
buzei TYPE ekbe-buzei,
END OF lw_ekbe.
DATA: BEGIN OF lw_vbfa,
vbelv TYPE vbfa-vbelv,
posnv TYPE vbfa-posnv,
vbeln TYPE vbfa-vbeln,
posnn TYPE vbfa-posnn,
vbtyp_n TYPE vbfa-vbtyp_n,
END OF lw_vbfa.
DATA: lt_vttp LIKE TABLE OF lw_vttp,
lt_ekbe LIKE TABLE OF lw_ekbe,
lt_vbfa LIKE TABLE OF lw_vbfa.
DATA: lt_xvttp TYPE
lt_yvttp TYPE
lt_xvtsp TYPE
lt_yvtsp TYPE
lt_deliveries
lw_deliveries
lt_xtrlk TYPE
lt_xtrlp TYPE
lt_xvtts TYPE
lt_xvttk TYPE
lw_xvttk TYPE

TABLE OF vttpvb,
TABLE OF vttpvb,
TABLE OF vtspvb,
TABLE OF vtspvb,
TYPE TABLE OF ship_deliv,
TYPE ship_deliv,
TABLE OF vtrlk,
TABLE OF vtrlp,
TABLE OF vttsvb,
TABLE OF vttkvb,
vttkvb.

DATA: lt_vttp1 TYPE TABLE OF vttp,


lw_vttp1 TYPE vttp,
l_count TYPE i.
FIELD-SYMBOLS:
<lfs_xvttp> TYPE vttpvb.
*

Fetching deliveries assigned to shipment


SELECT * FROM vttp INTO TABLE lt_vttp1 WHERE tknum EQ im_shipment.

*
*

Building Delivery table which needs to be passed to FM


Filling newly created delivery
lw_deliveries-vbeln = im_delivery.
lw_deliveries-tprfo = 1.
APPEND lw_deliveries TO lt_deliveries.

Filling old delivery attached to shipment


CLEAR: lw_vttp1, l_count.
l_count = 1.
LOOP AT lt_vttp1 INTO lw_vttp1.
l_count = l_count + 1.
CLEAR lw_deliveries.
lw_deliveries-vbeln = lw_vttp1-vbeln.
lw_deliveries-tprfo = l_count.
APPEND lw_deliveries TO lt_deliveries.
ENDLOOP.

*
*
*
*

IF ( im_shipment IS NOT INITIAL ) AND


( ( p_sto IS NOT INITIAL ) OR ( p_vbeln IS NOT INITIAL ) ).
SELECT SINGLE * FROM vttk INTO CORRESPONDING FIELDS OF lw_xvttk

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

WHERE tknum EQ im_shipment.


SELECT tknum tpnum vbeln FROM vttp INTO TABLE lt_vttp
WHERE tknum EQ im_shipment.
IF lt_vttp IS NOT INITIAL.
IF p_sto IS NOT INITIAL.
REFRESH lt_ekbe.
SELECT ebeln ebelp zekkn vgabe gjahr belnr buzei FROM ekbe
INTO TABLE lt_ekbe FOR ALL ENTRIES IN lt_vttp
WHERE belnr EQ lt_vttp-vbeln
AND bewtp EQ 'L'.
READ TABLE lt_ekbe INTO lw_ekbe WITH KEY ebeln = p_sto.
IF sy-subrc NE 0.
MESSAGE i419(zlew02) DISPLAY LIKE 'E' WITH im_shipment p_sto.
RETURN.
ENDIF.
ELSEIF p_vbeln IS NOT INITIAL.
SELECT vbelv posnv vbeln posnn vbtyp_n FROM vbfa
INTO TABLE lt_vbfa FOR ALL ENTRIES IN lt_vttp
WHERE vbelv EQ p_vbeln
AND vbeln EQ lt_vttp-vbeln
AND vbtyp_n EQ 'J'.
IF sy-subrc NE 0.
MESSAGE i420(zlew02) DISPLAY LIKE 'E' WITH im_shipment p_vbeln.
RETURN.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CLEAR: lw_xvttk, lt_xvttk.
SELECT SINGLE * FROM vttk INTO CORRESPONDING FIELDS OF lw_xvttk
WHERE tknum EQ im_shipment.
APPEND lw_xvttk TO lt_xvttk.
CALL FUNCTION 'SD_SHIPMENT_DELIVERY_VIEW'
TABLES
i_deliv
= lt_deliveries
c_vtrlk
= lt_xtrlk
EXCEPTIONS
no_deliveries
= 1
error_reading_delivery_header = 2
error_reading_partner_table = 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 'SD_DELIVERY_ASSIGN_TO_SHIPMENT'
EXPORTING
i_tknum
= im_shipment
TABLES
c_xvttp
= lt_xvttp
c_yvttp
= lt_yvttp
c_xvtsp
= lt_xvtsp

c_yvtsp
i_deliveries
i_xtrlk
i_xtrlp
i_xvtts
CHANGING
c_xvttk
EXCEPTIONS
no_transport_relevance
OTHERS

=
=
=
=
=

lt_yvtsp
lt_deliveries
lt_xtrlk
lt_xtrlp
lt_xvtts

= lw_xvttk
= 1
= 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.
UNASSIGN <lfs_xvttp>.
LOOP AT lt_xvttp ASSIGNING <lfs_xvttp>.
READ TABLE lt_vttp1 INTO lw_vttp
WITH KEY vbeln = <lfs_xvttp>-vbeln.
IF sy-subrc EQ 0.
<lfs_xvttp>-updkz = 'U'.
ENDIF.
ENDLOOP.
CALL FUNCTION 'SD_SHIPMENTS_SAVE'
EXPORTING
i_transaktionstyp
= 'V'
TABLES
i_xvttk
= lt_xvttk
i_yvttk
= lt_xvttk
i_xvttp
= lt_xvttp
i_yvttp
= lt_xvttp
EXCEPTIONS
no_change
= 1
delivery_split_error = 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.
COMMIT WORK AND WAIT.
ENDMETHOD.
"assign_delivery_to_shipment
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'INITIALIZATION'
***--------------------------------------------------------------------*
METHOD initialization.
* Read user parameters for Storage location
GET PARAMETER ID '91E' FIELD p_lgort.
GET PARAMETER ID 'LGN' FIELD p_lgnum.
* Toolbar Buttons:
* 1. Truck Complete
gs_functxt-icon_id

= icon_locked.

gs_functxt-icon_text = text-019.
gs_functxt-quickinfo = text-019.
sscrfields-functxt_01 = gs_functxt.
* 2. Cancel Truck Complete
gs_functxt-icon_id = icon_unlocked.
gs_functxt-icon_text = text-020.
gs_functxt-quickinfo = text-020.
sscrfields-functxt_02 = gs_functxt.
* 3. Display Door content
gs_functxt-icon_id = icon_display.
gs_functxt-icon_text = text-021.
gs_functxt-quickinfo = text-021.
sscrfields-functxt_03 = gs_functxt.
* 4. Open Orders(VA05)
gs_functxt-icon_id = icon_generate.
gs_functxt-icon_text = text-022.
gs_functxt-quickinfo = text-022.
sscrfields-functxt_04 = gs_functxt.
* Get User Assignment Queue data
SELECT SINGLE * FROM lrf_wkqu
INTO gs_wkqu
WHERE bname EQ sy-uname
AND statu EQ c_x.

"#EC CI_NOFIRST

IF NOT gs_wkqu IS INITIAL.


p_lgnum = gs_wkqu-lgnum.
ENDIF.
ENDMETHOD.
"initialization
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'HIDE_FIELDS'
***--------------------------------------------------------------------*
***
Hide the fields based on Radio Button/Check box selected.
***--------------------------------------------------------------------*
METHOD hide_fields.
* Radio Button - STO
IF rb_sto IS INITIAL.
LOOP AT SCREEN.
IF screen-group1 = 'MD1' OR
screen-group1 = 'MD3' OR
screen-group1 = 'MD4'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
CLEAR: cb_item, cb_pkg.
ENDIF.
* Radio Button - Sales Order
IF rb_so IS INITIAL.
LOOP AT SCREEN.
IF screen-group1 = 'MD2'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.

ENDLOOP.
ENDIF.
* Check Box - Shipment
IF chk_shmt IS INITIAL.
LOOP AT SCREEN.
IF screen-group1 = 'MD5'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
* Check Box - Pallet line item
IF cb_item IS INITIAL.
LOOP AT SCREEN.
IF screen-group1 = 'MD3'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
CLEAR: p_item, p_pal.
ENDIF.
* Check Box - Packaging line item
IF cb_pkg IS INITIAL.
LOOP AT SCREEN.
IF screen-group1 = 'MD4'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
CLEAR: p_pkg, p_shell.
ENDIF.
LOOP AT SCREEN.
IF screen-group1 = 'MD6'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMETHOD.
"hide_fields
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'SHOW_SHIPMENT'
***--------------------------------------------------------------------*
METHOD show_shipment.
LOOP AT SCREEN.
IF screen-group1 = 'MD5'.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMETHOD.
"show_shipment
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'HIDE_SHIPMENT'
***--------------------------------------------------------------------*
METHOD hide_shipment.
LOOP AT SCREEN.
IF screen-group1 = 'MD5'.
screen-active = 0.

MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMETHOD.
"hide_shipment
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'SHOW_FIELDS'
***--------------------------------------------------------------------*
***
Show the fields based on Radio Button selected.
***--------------------------------------------------------------------*
METHOD show_fields.
* Radio Button - STO
LOOP AT SCREEN.
IF screen-group1 = 'MD1'.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMETHOD.
"show_fields
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_MATNR'
***--------------------------------------------------------------------*
***
Validating Material number
***--------------------------------------------------------------------*
METHOD validate_matnr.
"#EC NEEDED
ENDMETHOD.
"validate_matnr
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_SWERKS'
***--------------------------------------------------------------------*
***
Validating Sending Plant
***--------------------------------------------------------------------*
METHOD validate_swerks.
CHECK s_swerks IS NOT INITIAL.
SELECT SINGLE werks
FROM t001w
INTO (s_swerks-low)
WHERE werks IN s_swerks.
IF sy-subrc NE 0.
MESSAGE e001(00) WITH 'Invalid Sending Plant or blank'(m02).
ENDIF.
ENDMETHOD.
"validate_swerks
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_RWERKS'
***--------------------------------------------------------------------*
***
Validating Receiving Plant
***--------------------------------------------------------------------*
METHOD validate_rwerks.
CHECK p_rwerks IS NOT INITIAL.
SELECT SINGLE werks
FROM t001w
INTO p_rwerks
WHERE werks = p_rwerks.
IF sy-subrc NE 0.
MESSAGE e001(00) WITH 'Invalid Receiving Plant or blank'(m03).
ENDIF.
ENDMETHOD.
"validate_plants
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_LGORT'

***--------------------------------------------------------------------*
***
Validating Receiving Plant
***--------------------------------------------------------------------*
METHOD validate_lgort.
CHECK p_lgort IS NOT INITIAL AND
s_swerks IS NOT INITIAL.
SELECT SINGLE lgort
FROM t001l
INTO p_lgort
WHERE werks IN s_swerks
AND lgort = p_lgort.
IF sy-subrc NE 0.
MESSAGE e001(00) WITH 'Invalid Storage Location or blank'(m04).
ENDIF.
ENDMETHOD.

"validate_lgort

***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_LGPLA'
***--------------------------------------------------------------------*
***
Validating Door/Bin for existence or if there is any active
***
Inventory or if this Door/Bin is not complete.
***--------------------------------------------------------------------*
METHOD validate_lgpla.
DATA: ls_lgpla

TYPE ty_lgpla.

CHECK p_lgpla IS NOT INITIAL.


SELECT lgtyp lgpla UP TO 1 ROWS FROM lagp
INTO ls_lgpla WHERE lgnum EQ p_lgnum
AND lgpla EQ p_lgpla AND skzue EQ c_x.
ENDSELECT.
IF NOT ls_lgpla IS INITIAL.
SELECT SINGLE ivakt
FROM link
INTO v_ivakt
WHERE lgnum = p_lgnum
AND lgtyp = ls_lgpla-lgtyp
AND ivakt = c_x.
* Active Inventory found.
IF v_ivakt EQ c_x.
MESSAGE e208(zlew02) WITH p_lgpla.
ENDIF.
ELSE.
MESSAGE e001(00) WITH text-m12.
ENDIF.
ENDMETHOD.

"validate_lgpla

***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_STO'
***--------------------------------------------------------------------*
***
Validate STO exists & get the required data.
***--------------------------------------------------------------------*
METHOD validate_sto.

IF p_sto IS NOT INITIAL.


SELECT ebeln
ebelp
menge
meins
FROM ekpo
INTO TABLE t_exst_sto
WHERE ebeln = p_sto
AND loekz = space.
*
AND eglkz = space. "JAIAX524 - Bethlehem " Commented -- KUMJX005
-- 08/03/2016 revtrac - 555195
IF t_exst_sto IS INITIAL.
MESSAGE e368(00) WITH text-m10 p_sto.
ENDIF.
ENDIF.
ENDMETHOD.
"validate_sto
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_VBELN'
***--------------------------------------------------------------------*
***
Validating Sales Order
***--------------------------------------------------------------------*
METHOD validate_vbeln.
CHECK p_vbeln IS NOT INITIAL.
SELECT vbeln
posnr
matnr
kwmeng
vrkme
FROM vbap
INTO TABLE t_vbap
WHERE vbeln = p_vbeln.
IF sy-subrc NE 0.
MESSAGE e001(00) WITH 'Invalid Sales Order or blank'(m05).
ENDIF.
ENDMETHOD.
"validate_vbeln
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_PALLET_ITEM'
***--------------------------------------------------------------------*
***
Validate Pallet Material. Calculate Pallets for all the
***
Materials on the Door(Bin)
***--------------------------------------------------------------------*
METHOD validate_pallet_item.
CHECK cb_item IS NOT INITIAL.
IF p_item IS NOT INITIAL.
SELECT SINGLE matnr
FROM mara
INTO v_matnr
WHERE matnr = p_item.
IF NOT v_matnr IS INITIAL.
*-- Select data and Calculate Pallets
CALL METHOD lcl_main_process=>calculate_pallets.
ELSE.
ex_process = space.

MESSAGE s001(00) WITH text-m13 DISPLAY LIKE 'S'.


ENDIF.
ELSE.
ex_process = space.
MESSAGE i001(00) WITH text-m14 DISPLAY LIKE 'S'.
ENDIF.
ENDMETHOD.
"validate_second_item
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_TRUCK'
***--------------------------------------------------------------------*
***
Validate Truck (to be complete/cancelled)
***--------------------------------------------------------------------*
METHOD validate_truck.
CHECK p_door IS NOT INITIAL.
CLEAR s_lgpla.
SELECT SINGLE lgtyp
lgpla
FROM lagp
INTO s_lgpla
WHERE lgnum = p_lgnum
AND lgpla = p_door.
IF s_lgpla IS INITIAL.
MESSAGE e001(00) WITH text-m15.
ENDIF.
ENDMETHOD.
"VALIDATE_TRUCK
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_SHMT'
***--------------------------------------------------------------------*
***
Validating Shipment Number
***--------------------------------------------------------------------*
METHOD validate_shmt.
DATA: lw_vttk TYPE vttk.
CHECK p_shmnt IS NOT INITIAL.
SELECT SINGLE *
FROM vttk
INTO lw_vttk
WHERE tknum = p_shmt.
IF sy-subrc NE 0.
MESSAGE e001(00) WITH text-m21.
ENDIF.
ENDMETHOD.
"validate_shmt
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'VALIDATE_PKG'
***--------------------------------------------------------------------*
METHOD validate_pkg.
CLEAR v_pkgmat.
CHECK cb_pkg IS NOT INITIAL.
IF p_pkg IS NOT INITIAL.
SELECT SINGLE matnr
FROM mara
INTO v_pkgmat
WHERE matnr = p_pkg.

IF v_pkgmat IS INITIAL.
ex_process = space.
MESSAGE i001(00) WITH text-m16 DISPLAY LIKE 'S'.
ENDIF.
ELSE.
ex_process = space.
MESSAGE i001(00) WITH text-m17 DISPLAY LIKE 'S'.
ENDIF.
ENDMETHOD.
"validate_pkg
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'CALCULATE_PALLETS'
***--------------------------------------------------------------------*
***
Calculate Pallets for Pallet item to be used on STO
***--------------------------------------------------------------------*
METHOD calculate_pallets.
DATA: lv_qty TYPE char04.
CHECK p_item IS NOT INITIAL AND
p_pal IS INITIAL.
CLEAR gs_load_comp.
SELECT SINGLE *
FROM zdps_lewt_ld_com
INTO gs_load_comp
WHERE lgnum = p_lgnum
AND swerks IN s_swerks
AND rwerks = p_rwerks
AND lgort = p_lgort.
IF gs_load_comp-vltyp IS INITIAL.
gs_load_comp-vltyp = 'STG'.
ENDIF.
* Get all the material and quantities lying on the Door
SELECT lgnum
" Warehouse Number
matnr
" Material Number
lgpla
" Bin
verme
" Available Stock
meins
" UOM
*
lenum
bestq
FROM lqua
INTO TABLE gt_lqua
WHERE lgnum = p_lgnum
AND werks IN s_swerks
AND lgtyp = gs_load_comp-vltyp
AND lgpla = p_lgpla
AND bestq = space.
"Available Stock
SORT gt_lqua BY lgnum matnr.
CHECK gt_lqua IS NOT INITIAL.
* Get LE Quantity for all the selected materials
SELECT matnr
lhmg1
FROM mlgn
INTO TABLE gt_mlgn
FOR ALL ENTRIES IN gt_lqua

WHERE lgnum = p_lgnum


AND matnr = gt_lqua-matnr
AND lvorm = space.
* Calculate Pallets for Pallet item to be used on STO
LOOP AT gt_mlgn INTO gwa_mlgn.
READ TABLE gt_lqua INTO gwa_lqua
WITH KEY matnr = gwa_mlgn-matnr
BINARY SEARCH.
IF NOT gwa_mlgn-lhmg1 IS INITIAL.
lv_qty = lv_qty + ( gwa_lqua-verme / gwa_mlgn-lhmg1 ).
ENDIF.
CLEAR gwa_lqua.
ENDLOOP.
p_pal = ceil( lv_qty ).
CONDENSE p_pal.
ENDMETHOD.
"calculate_pallets
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'DOOR_F4_HELP'
***--------------------------------------------------------------------*
***
F4 value request for Door/Bin. This will show the status of
***
ALL doors.
***--------------------------------------------------------------------*
METHOD door_f4_help.
*
*
*
*

IF im_status EQ c_x.
SELECT lgnum lgpla skzue AS complete FROM lagp
INTO TABLE t_doors
WHERE lgnum EQ p_lgnum
AND skzue EQ im_status.
SELECT a~lgnum a~lgpla b~skzue AS complete
FROM zlew_trck_cmplt AS a
INNER JOIN lagp AS b
ON a~lgnum EQ b~lgnum
AND a~lgpla EQ b~lgpla
INTO TABLE t_doors
WHERE a~lgnum EQ p_lgnum
AND b~skzue EQ im_status.

*
*
*

ELSE.
SELECT lgnum lgpla skzue AS complete FROM lagp
INTO TABLE t_doors
WHERE lgnum EQ p_lgnum.
SELECT a~lgnum a~lgpla b~skzue AS complete
FROM zlew_trck_cmplt AS a
INNER JOIN lagp AS b
ON a~lgnum EQ b~lgnum
AND a~lgpla EQ b~lgpla
INTO TABLE t_doors
WHERE a~lgnum EQ p_lgnum.
ENDIF.
SORT t_doors BY lgnum lgpla.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'


EXPORTING
ddic_structure = c_tabname
retfield
= c_field
window_title
= text-013
value_org
= c_col
TABLES
value_tab
= t_doors
return_tab
= t_rettab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS
= 3.
IF sy-subrc EQ 0.
READ TABLE t_rettab INTO wa_rettab INDEX 1.
ex_lgpla = wa_rettab-fieldval.
ELSE.
IF im_status = c_x.
MESSAGE s001(00) WITH text-m18.
ENDIF.
ENDIF.
ENDMETHOD.
"door_f4_help
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'HANDLE_SCREEN_BUTTONS'
***--------------------------------------------------------------------*
***
Just handling screen buttons
***--------------------------------------------------------------------*
METHOD handle_screen_buttons.
DATA: lwa_trck_cmplt
ls_lgpla
lw_lagpv
lt_lagpv
l_lines
user

TYPE
TYPE
TYPE
LIKE
TYPE
LIKE

CHECK sscrfields-ucomm
sscrfields-ucomm
sscrfields-ucomm
sscrfields-ucomm

EQ
EQ
EQ
EQ

zlew_trck_cmplt,
ty_lgpla,
lagpv,
TABLE OF lw_lagpv,
i,
sy-uname.
'FC01'
'FC02'
'FC03'
'FC04'

OR
OR
OR
.

*-- Open Orders. Since Open Orders doesn't need Door, it should be
*-- handled separately. Once back from VA05, dont check for p_door
*-- therefor EXIT.
IF sscrfields-ucomm = 'FC04'.
CALL TRANSACTION 'VA05'.
EXIT.
ENDIF.
IF NOT p_door IS INITIAL.
CASE sscrfields-ucomm.
*-- Truck Complete
WHEN 'FC01'.
*
Checking the Bin
CLEAR lt_lagpv.
SELECT * FROM lagp INTO CORRESPONDING FIELDS OF TABLE lt_lagpv
WHERE lgnum EQ p_lgnum
AND lgpla EQ p_door.

IF sy-subrc EQ 0.
CLEAR l_lines.
DESCRIBE TABLE lt_lagpv LINES l_lines.
IF l_lines GT 1.
MESSAGE w416(zlew02) WITH p_door p_lgnum.
ENDIF.
CLEAR lw_lagpv.
READ TABLE lt_lagpv INTO lw_lagpv INDEX 1.
*
*
*

Check if Bin is already bloked or not


IF lw_lagpv-skzue IS NOT INITIAL.
Truck is already marked complete
MESSAGE w415(zlew02).
ELSE."IF lw_lagpv-skzue IS NOT INITIAL.
Block the Bin
MOVE: sy-uname TO lw_lagpv-uname,
sy-datlo TO lw_lagpv-laedt,
c_x
TO lw_lagpv-skzue.
Locking Bin to modify
CALL FUNCTION 'ENQUEUE_ELLAGPE'
EXPORTING
lgnum
= lw_lagpv-lgnum
lgtyp
= lw_lagpv-lgtyp
lgpla
= lw_lagpv-lgpla
EXCEPTIONS
foreign_lock = 1
system_failure = 2.
CASE sy-subrc.
WHEN 1.
user = sy-msgv1.
blocked by user ...
MESSAGE e593(l1) WITH lw_lagpv-lgpla user.
WHEN 2. MESSAGE e595(l1).
ENDCASE.

Modifying the Bin


CALL FUNCTION 'L_LAGP_VERAENDERN'
EXPORTING
xlagpv = lw_lagpv.

Removing the lock


CALL FUNCTION 'DEQUEUE_ELLAGPE'
EXPORTING
lgnum = lw_lagpv-lgnum
lgtyp = lw_lagpv-lgtyp
lgpla = lw_lagpv-lgpla.
MESSAGE s001(00) WITH 'Truck marked Complete'(m06).
ENDIF."IF lw_lagpv-skzue IS NOT INITIAL.
ELSE."IF sy-subrc EQ 0.
"No Entry exist for &1 &2 &3
MESSAGE e414(zlew02) WITH p_lgnum p_door.
ENDIF."IF sy-subrc EQ 0.

*-- Cancel Truck Complete

*
*

WHEN 'FC02'.
Checking the Bin
CLEAR lw_lagpv.
SELECT * FROM lagp UP TO 1 ROWS INTO CORRESPONDING FIELDS OF lw_lagpv
WHERE lgnum EQ p_lgnum
AND lgpla EQ p_door.
ENDSELECT.
IF sy-subrc EQ 0.
Check if Bin is already bloked or not
IF lw_lagpv-skzue IS NOT INITIAL.
Unblock the Bin
MOVE: sy-uname TO lw_lagpv-uname,
sy-datlo TO lw_lagpv-laedt.
CLEAR lw_lagpv-skzue.
Locking Bin to modify
CALL FUNCTION 'ENQUEUE_ELLAGPE'
EXPORTING
lgnum
= lw_lagpv-lgnum
lgtyp
= lw_lagpv-lgtyp
lgpla
= lw_lagpv-lgpla
EXCEPTIONS
foreign_lock = 1
system_failure = 2.
CASE sy-subrc.
WHEN 1.
user = sy-msgv1.
blocked by user ...
MESSAGE e593(l1) WITH lw_lagpv-lgpla user.
WHEN 2. MESSAGE e595(l1).
ENDCASE.

Modifying the Bin


CALL FUNCTION 'L_LAGP_VERAENDERN'
EXPORTING
xlagpv = lw_lagpv.

Removing the lock


CALL FUNCTION 'DEQUEUE_ELLAGPE'
EXPORTING
lgnum = lw_lagpv-lgnum
lgtyp = lw_lagpv-lgtyp
lgpla = lw_lagpv-lgpla.
MESSAGE s001(00) WITH 'Truck marked Cancelled'(m08).
ENDIF."IF lw_lagpv-skzue IS NOT INITIAL.
ELSE."IF sy-subrc EQ 0.
"No Entry exist for &1 &2 &3
MESSAGE e414(zlew02) WITH p_lgnum p_door.
ENDIF."IF sy-subrc EQ 0.

*-- Display Door Content


WHEN 'FC03'.
CALL METHOD lcl_main_process=>get_door_content.
CALL SCREEN 2010.
ENDCASE.
ELSE.

MESSAGE e001(00) WITH 'Please enter Truck to Complete/Cancel/Display'(m09)


.
ENDIF.
ENDMETHOD.
"handle_screen_buttons
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'GET_DOOR_CONTENT'
***--------------------------------------------------------------------*
***
Select the data from LQUA to find the content on the door/truck
***--------------------------------------------------------------------*
METHOD get_door_content.
DATA t_popout_tmp LIKE t_popout.
REFRESH: t_doorcont,
t_makt,
t_popout.
* Get list of Materials on Truck(Bin)
SELECT matnr
werks
charg
bestq
lgpla
meins
verme
mgewi
gewei
FROM lqua
INTO TABLE t_doorcont
WHERE lgnum = p_lgnum
*
AND lgtyp = s_lgpla-lgtyp
AND lgpla = p_door.
CHECK t_doorcont IS NOT INITIAL.
* Get the material text & LE qty (for calculating Pallets)
SELECT a~matnr
a~maktx
b~lhmg1
FROM makt AS a
INNER JOIN mlgn AS b
ON a~matnr = b~matnr
INTO TABLE t_makt
FOR ALL ENTRIES IN t_doorcont
WHERE a~matnr = t_doorcont-matnr
AND a~spras = sy-langu
AND b~lgnum = p_lgnum
AND b~lvorm = space.
SORT: t_doorcont BY matnr,
t_makt
BY matnr.
* Populate list of materials of Truck to be displayed on
* next screen 3010.
LOOP AT t_doorcont INTO wa_doorcont.
READ TABLE t_makt INTO wa_makt
WITH KEY matnr = wa_doorcont-matnr
BINARY SEARCH.
* Removing leading zeros from Materials

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'


EXPORTING
input = wa_makt-matnr
IMPORTING
output = wa_makt-matnr.
wa_popout-lgnum
wa_popout-matnr
wa_popout-maktx
wa_popout-werks
wa_popout-charg
wa_popout-bestq
wa_popout-lgpla
wa_popout-meins
wa_popout-verme
wa_popout-mgewi
wa_popout-gewei

=
=
=
=
=
=
=
=
=
=
=

p_lgnum.
wa_makt-matnr.
wa_makt-maktx.
wa_doorcont-werks.
wa_doorcont-charg.
wa_doorcont-bestq.
wa_doorcont-lgpla.
wa_doorcont-meins.
wa_doorcont-verme.
wa_doorcont-mgewi.
wa_doorcont-gewei.

* Calculate no. of Pallets


IF NOT wa_makt-lhmg1 IS INITIAL.
wa_popout-pal = ceil( wa_doorcont-verme / wa_makt-lhmg1 ).
ENDIF.
APPEND wa_popout TO t_popout.
CLEAR: wa_popout, wa_makt.
ENDLOOP.
REFRESH t_popout_tmp.
t_popout_tmp[] = t_popout[].
REFRESH t_popout.
SORT t_popout_tmp BY matnr charg bestq.
LOOP AT t_popout_tmp INTO wa_popout.
COLLECT wa_popout INTO t_popout.
ENDLOOP.
ENDMETHOD.
"get_door_content
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'CREATE_STO'
***--------------------------------------------------------------------*
***
Create STO using BAPI 'BAPI_PO_CREATE1' if user didn't enter
***
existing STO.
***--------------------------------------------------------------------*
METHOD create_sto.
DATA: l_ebeln TYPE ebeln,
l_vendor TYPE elifn,
lt_poitem_chg TYPE STANDARD TABLE OF bapimepoitem,
lw_poitem_chg TYPE bapimepoitem,
lw_poitem2 TYPE bapimepoitem,
l_sto_no TYPE seqg3-garg,
lt_lock TYPE TABLE OF seqg3.
*&--Begin of change KAPRX003/09/03/2015
IF NOT p_shmt IS INITIAL AND NOT g_sto IS INITIAL
AND p_sto IS INITIAL.
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'STO'(002).
wa_outtab-intrldoctyp = 'STO'.

wa_outtab-document = g_sto.
APPEND wa_outtab TO t_outtab.
lcl_main_process=>old_sto = g_sto.
EXIT.
ENDIF.
IF NOT p_shmt IS INITIAL AND NOT p_sto IS INITIAL.
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'STO'(002).
wa_outtab-intrldoctyp = 'STO'.
wa_outtab-document = p_sto.
APPEND wa_outtab TO t_outtab.
lcl_main_process=>old_sto = p_sto.
EXIT.
ENDIF.
*&--End of change KAPRX003/09/03/2015
*
*
*
*

IF p_sto IS INITIAL.
Prepare PO Header Structure
Add check to determine whether it is an intra-company or
intercompany STO.
Then assign value (swerks) to appropriate fields
IF g_sbukrs = g_rbukrs.
s_poheader-suppl_plnt = gs_load_comp-swerks.
s_poheaderx-suppl_plnt = c_x.
ELSE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_load_comp-swerks
IMPORTING
output = l_vendor.
s_poheader-vendor = l_vendor.
s_poheaderx-vendor = c_x.
ENDIF.
s_poheader-doc_type
s_poheader-purch_org
s_poheader-comp_code
s_poheader-pur_group
s_poheader-doc_date

=
=
=
=
=

s_poheaderx-doc_type
s_poheaderx-purch_org
s_poheaderx-comp_code
s_poheaderx-pur_group
s_poheaderx-doc_date

gs_load_comp-bsart.
gs_load_comp-ekorg.
gs_load_comp-bukrs.
gs_load_comp-ekgrp.
sy-datum.
=
=
=
=
=

c_x.
c_x.
c_x.
c_x.
c_x.

REFRESH gt_lqua1.
LOOP AT gt_lqua INTO gwa_lqua.
COLLECT gwa_lqua INTO gt_lqua1.
ENDLOOP.
REFRESH gt_lqua.
gt_lqua[] = gt_lqua1[].

* Fill Item table for Purchase Order


LOOP AT gt_lqua INTO gwa_lqua.
v_item = v_item + 10.
*Select the correct Item Category (PSTYP) base on
*Document Type (BSART)
CALL FUNCTION 'WGEN_DETERMINE_PO_PSTYP'
EXPORTING
im_bsart
= gs_load_comp-bsart
im_fb_typ
= c_a
IMPORTING
ex_pstyp
= wa_poitem-item_cat
EXCEPTIONS
no_valid_pstyp_found_for_bsart = 1
OTHERS
= 2.
wa_poitem-po_item
wa_poitem-material
wa_poitem-plant
wa_poitem-quantity
wa_poitem-po_unit

=
=
=
=
=

v_item.
gwa_lqua-matnr.
p_rwerks.
gwa_lqua-verme.
gwa_lqua-meins.

****** Tax Code and Account Assignment ******


CALL METHOD lcl_main_process=>get_tax_assignment
EXPORTING
im_matnr = gwa_lqua-matnr
im_werks = wa_poitem-plant
im_bukrs = gs_load_comp-bukrs
CHANGING
ex_knttp = wa_poitem-acctasscat
ex_mwskz = wa_poitem-tax_code.
IF wa_poitem-acctasscat IS NOT INITIAL.
wa_poitemx-acctasscat = c_x.
ENDIF.
IF wa_poitem-tax_code IS NOT INITIAL.
wa_poitemx-tax_code = c_x.
ENDIF.
****** Tax Code and Account Assignment ******
* Assigning supplying storage location
wa_poitem-suppl_stloc = gs_load_comp-slgort.
****
Begin of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
IF gv_q_stock = 'X'..
wa_poitem-qual_insp = 'X'.
ENDIF.
****
End of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
lw_poitem_chg-po_item = v_item.
lw_poitem_chg-material = gwa_lqua-matnr.
lw_poitem_chg-quantity = gwa_lqua-verme.
APPEND lw_poitem_chg TO lt_poitem_chg.
APPEND wa_poitem TO t_poitem.
CLEAR wa_poitem.
wa_poitemx-po_item = v_item.
wa_poitemx-material = c_x.
wa_poitemx-plant
= c_x.

wa_poitemx-item_cat = c_x.
wa_poitemx-quantity = c_x.
wa_poitemx-po_unit = c_x.
wa_poitemx-suppl_stloc = c_x.
wa_poitemx-qual_insp = c_x.
APPEND wa_poitemx TO t_poitemx.
CLEAR wa_poitemx.
wa_posched-po_item
= v_item.
wa_posched-delivery_date = sy-datum.
wa_posched-quantity
= gwa_lqua-verme.
APPEND wa_posched TO t_posched.
CLEAR wa_posched.
wa_poschedx-po_item = v_item.
wa_poschedx-sched_line = '0001'.
wa_poschedx-delivery_date = c_x.
wa_poschedx-quantity = c_x.
APPEND wa_poschedx TO t_poschedx.
CLEAR: wa_poschedx, gwa_lqua.
ENDLOOP.
* Fill item table for Pallet Items, if add pallet is checked
IF NOT cb_item IS INITIAL.
v_item = v_item + 10.
wa_poitem-po_item
wa_poitem-material
wa_poitem-plant
wa_poitem-item_cat
wa_poitem-quantity
wa_poitem-po_unit

=
=
=
=
=
=

v_item.
p_item.
p_rwerks.
'7'.
p_pal.
'PAL'.

* Assigning supplying storage location


wa_poitem-suppl_stloc = gs_load_comp-slgort.
APPEND wa_poitem TO t_poitem.
CLEAR wa_poitem.
wa_poitemx-po_item = v_item.
wa_poitemx-material = c_x.
wa_poitemx-plant
= c_x.
wa_poitemx-item_cat = c_x.
wa_poitemx-quantity = c_x.
wa_poitemx-po_unit = c_x.
wa_poitemx-suppl_stloc = c_x.
APPEND wa_poitemx TO t_poitemx.
CLEAR wa_poitemx.
wa_posched-po_item
= v_item.
wa_posched-delivery_date = sy-datum.
wa_posched-quantity
= p_pal.
APPEND wa_posched TO t_posched.
CLEAR wa_posched.
wa_poschedx-po_item = v_item.
wa_poschedx-sched_line = '0001'.
wa_poschedx-delivery_date = c_x.
wa_poschedx-quantity = c_x.
APPEND wa_poschedx TO t_poschedx.

CLEAR: wa_poschedx, gwa_lqua.


ENDIF.
* Fill item table for Pallet Items, if add pallet is checked
IF NOT cb_pkg IS INITIAL.
v_item = v_item + 10.
wa_poitem-po_item
= v_item.
wa_poitem-material = p_pkg.
wa_poitem-plant
= p_rwerks.
wa_poitem-item_cat = '7'.
wa_poitem-quantity = p_shell.
wa_poitem-po_unit
= 'EA'.
* Assigning supplying storage location
wa_poitem-suppl_stloc = gs_load_comp-slgort.
APPEND wa_poitem TO t_poitem.
CLEAR wa_poitem.
wa_poitemx-po_item = v_item.
wa_poitemx-material = c_x.
wa_poitemx-plant
= c_x.
wa_poitemx-item_cat = c_x.
wa_poitemx-quantity = c_x.
wa_poitemx-po_unit = c_x.
wa_poitemx-suppl_stloc = c_x.
APPEND wa_poitemx TO t_poitemx.
CLEAR wa_poitemx.
wa_posched-po_item
= v_item.
wa_posched-delivery_date = sy-datum.
wa_posched-quantity
= p_shell.
APPEND wa_posched TO t_posched.
CLEAR wa_posched.
wa_poschedx-po_item = v_item.
wa_poschedx-sched_line = '0001'.
wa_poschedx-delivery_date = c_x.
wa_poschedx-quantity = c_x.
APPEND wa_poschedx TO t_poschedx.
CLEAR: wa_poschedx, gwa_lqua.
ENDIF.
* BAPI to create STO
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader
= s_poheader
poheaderx
= s_poheaderx
IMPORTING
exppurchaseorder = v_po
TABLES
return
= t_return
poitem
= t_poitem
poitemx
= t_poitemx
poschedule
= t_posched
poschedulex
= t_poschedx.
* Populate Output Log table accordingly
IF NOT v_po IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING

wait = c_x.
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'STO'(002).
wa_outtab-intrldoctyp = 'STO'.
wa_outtab-document = v_po.
APPEND wa_outtab TO t_outtab.
lcl_main_process=>old_sto = v_po.
* Assigning supplying storage location
*
*

Loop 3 times to allow buffer time for PO


to be created
CLEAR l_ebeln.
DO 3 TIMES.
SELECT SINGLE ebeln
INTO l_ebeln
FROM ekko
WHERE ebeln = v_po.
IF sy-subrc = 0.
EXIT.
ELSE.
WAIT UP TO 3 SECONDS.
ENDIF.
ENDDO.

* Start of MANAX017 6/11/2012


DO 15 TIMES.
CLEAR lt_lock.
CONCATENATE sy-mandt v_po INTO l_sto_no.
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
gname
= 'EKKO'
garg
= l_sto_no
TABLES
enq
= lt_lock
EXCEPTIONS
communication_failure = 1
system_failure
= 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.
IF lt_lock IS INITIAL.
EXIT.
ELSE.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDDO.
* End of MANAX017
*
*

Loop through to update the quantity


if changed by Material Master after PO created
LOOP AT lt_poitem_chg INTO lw_poitem_chg.

READ TABLE t_poitem INTO lw_poitem2


WITH KEY material = lw_poitem_chg-material.
IF sy-subrc = 0.
lw_poitem2-quantity = lw_poitem_chg-quantity.
MODIFY t_poitem FROM lw_poitem2
TRANSPORTING quantity
WHERE material = lw_poitem_chg-material.
ENDIF.
ENDLOOP.
*
*

Change PO to maintain PO quantity


if changed by Material Master after PO created
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = v_po
TABLES
return
= t_return
poitem
= t_poitem
poitemx
= t_poitemx.

Commit changes after it is created


CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
CALL FUNCTION
EXPORTING
mode_ekko
mandt
ebeln

'DEQUEUE_EMEKKOE'
= 'E'
= sy-mandt
= v_po.

ELSE.
wa_outtab-status = icon_red_light.
wa_outtab-doctyp = 'STO'(002).
wa_outtab-intrldoctyp = 'STO'.
LOOP AT t_return INTO wa_return
WHERE type = c_e.
* Dont consider first bapi msg, that one is useless
IF wa_return-id
= 'BAPI' AND
wa_return-number = '001'.
CONTINUE.
ENDIF.
CONCATENATE wa_outtab-message wa_return-message
INTO wa_outtab-message SEPARATED BY '/'.
ENDLOOP.
APPEND wa_outtab TO t_outtab.
ENDIF.
ELSE.
Begin of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
If STO is entered on selections sreen and it is for Quality stock
then set the stock type Quality inspection' in delivery tab in STO.
IF gv_q_stock = 'X'.

****
****
****

DATA : temp_ekpo TYPE STANDARD TABLE OF ty_ekpo,


wa_ekpo LIKE LINE OF temp_ekpo.
REFRESH : t_poitem , t_poitemx , t_return.
CLEAR : wa_poitem , wa_poitemx , wa_return.
SELECT
ebeln ebelp matnr menge meins insmk
FROM ekpo
INTO TABLE temp_ekpo
WHERE ebeln = p_sto.
LOOP AT temp_ekpo INTO wa_ekpo.
wa_poitem-po_item = wa_ekpo-ebelp.
wa_poitem-material = wa_ekpo-matnr.
wa_poitem-qual_insp = 'X'.
" Quality Inspection
APPEND wa_poitem TO t_poitem.
wa_poitemx-qual_insp
wa_poitemx-po_item
wa_poitemx-material
APPEND wa_poitemx TO
CLEAR : wa_poitemx ,
ENDLOOP.

= c_x.
= wa_ekpo-ebelp.
= c_x.
t_poitemx.
wa_ekpo , wa_poitem..

CALL FUNCTION 'BAPI_PO_CHANGE'


EXPORTING
purchaseorder = p_sto
TABLES
return
= t_return
poitem
= t_poitem
poitemx
= t_poitemx.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
REFRESH : t_poitem , t_poitemx , t_return.
CLEAR : wa_poitem , wa_poitemx , wa_return.
ENDIF.
****

End of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195


wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'STO'(002).
wa_outtab-intrldoctyp = 'STO'.
wa_outtab-document = v_po.
APPEND wa_outtab TO t_outtab.
lcl_main_process=>old_sto = v_po.
ENDIF.

CLEAR wa_outtab.
ENDMETHOD.
"create_sto
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'CREATE_DELIVERY_FRM_STO'
***--------------------------------------------------------------------*
*** Create Delivery for STO using BAPI 'BAPI_OUTB_DELIVERY_CREATE_STO'
*** Either t_exst_sto or t_po_item will be populated. So its not reqd.
*** to check if user entered STO number or not, its very streamlined.
***--------------------------------------------------------------------*
METHOD create_delivery_frm_sto.

DATA: BEGIN OF lw_lqua,


lgnum
TYPE
matnr
TYPE
lgpla
TYPE
verme
TYPE
meins
TYPE
lenum
TYPE
END OF lw_lqua.

lqua-lgnum,
lqua-matnr,
lqua-lgpla,
lqua-verme,
lqua-meins,
lqua-lenum,

"
"
"
"
"
"

DATA: BEGIN OF lw_ekpo,


ebeln
TYPE
ebelp
TYPE
matnr
TYPE
menge
TYPE
meins
TYPE
loekz
TYPE
END OF lw_ekpo.

ekpo-ebeln,
ekpo-ebelp,
ekpo-matnr,
ekpo-menge,
ekpo-meins,
ekpo-loekz,

" Added by MARSX557:08/27/2013

DATA: lv_vstel
lt_lqua
lt_lqua_tmp
l_lines1
l_lines2
lt_ekpo_tmp
lt_ekpo

TYPE
LIKE
LIKE
TYPE
TYPE
LIKE
LIKE

vstel,
TABLE OF
TABLE OF
i,
i,
TABLE OF
TABLE OF

CONSTANTS: lc_l

TYPE c VALUE 'L'.

Warehouse Number
Material Number
Bin
Available Stock
UOM
SU

lw_lqua,
lw_lqua,
lw_ekpo,
lw_ekpo.

REFRESH: t_return.
*-- Either t_exst_sto or t_po_item will be populated. So its not reqd.
*-- to check if user entered STO number or not, its very streamlined.
LOOP AT lcl_main_process=>t_exst_sto INTO wa_exst_sto.
wa_reftosto-ref_doc
= wa_exst_sto-ebeln.
wa_reftosto-ref_item = wa_exst_sto-ebelp.
wa_reftosto-dlv_qty
= wa_exst_sto-menge.
wa_reftosto-sales_unit = wa_exst_sto-meins.
APPEND wa_reftosto TO t_reftosto.
CLEAR: wa_reftosto.
ENDLOOP.
LOOP AT t_poitem INTO wa_poitem WHERE deliv_compl = space. "JAIAX524 - Bethl
ehem
wa_reftosto-ref_doc
= v_po.
wa_reftosto-ref_item = sy-tabix.
wa_reftosto-dlv_qty
= wa_poitem-quantity.
wa_reftosto-sales_unit = wa_poitem-po_unit.
APPEND wa_reftosto TO t_reftosto.
CLEAR: wa_reftosto.
ENDLOOP.
* Determine Shipping point for STO
SELECT SINGLE vstel FROM ekpv
INTO lv_vstel
WHERE ebeln = v_po.
* Validating STO quantity with Bin quantity
SELECT a~ebeln a~ebelp a~matnr a~menge a~meins a~loekz FROM ekpo AS a
" LOEKZ Added by MARSX557:08/27/2013
INNER JOIN mara AS b

ON a~matnr EQ b~matnr
INTO TABLE lt_ekpo_tmp
WHERE a~ebeln EQ v_po
AND b~mtart IN ('FERT', 'ZERT').
** Start of change by MARSX557:08/27/2013
* Remove the line items which are marked for deletion
IF lt_ekpo_tmp IS NOT INITIAL.
DELETE lt_ekpo_tmp WHERE loekz EQ lc_l.
ENDIF.
** End of change by MARSX557:08/27/2013
*
*

Adding material quantity beacuse there can be a case when


a single STO would contain two line items of the same matnr
CLEAR lt_ekpo.
LOOP AT lt_ekpo_tmp INTO lw_ekpo.
CLEAR: lw_ekpo-ebeln, lw_ekpo-ebelp.
COLLECT lw_ekpo INTO lt_ekpo.
ENDLOOP.
SELECT SINGLE *
FROM zdps_lewt_ld_com
INTO gs_load_comp
WHERE lgnum = p_lgnum
AND swerks IN s_swerks
AND rwerks = p_rwerks
AND lgort = p_lgort.
IF gs_load_comp-vltyp IS INITIAL.
gs_load_comp-vltyp = 'STG'.
ENDIF.

SELECT lgnum
matnr
lgpla
verme
meins
lenum
FROM lqua
INTO TABLE lt_lqua
WHERE lgnum = p_lgnum
AND werks IN s_swerks
AND lgtyp = gs_load_comp-vltyp
AND lgpla = p_lgpla
*
AND bestq = space.
"Available Stock
" Commented -- KUM
JX005 -- 08/03/2016 revtrac - 555195
****
Begin of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
AND bestq IN (' ' , 'Q' ).
****
End of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
LOOP AT lt_lqua INTO lw_lqua.
CLEAR lw_lqua-lenum.
COLLECT lw_lqua INTO lt_lqua_tmp.
ENDLOOP.
*

Compareing LAQA and LIPS data


DESCRIBE TABLE lt_lqua_tmp LINES l_lines1.
DESCRIBE TABLE lt_ekpo LINES l_lines2.
IF l_lines1 NE l_lines2.

MESSAGE i421(zlew02) DISPLAY LIKE 'E'.


RETURN.
ENDIF.
LOOP AT lt_lqua_tmp INTO lw_lqua.
READ TABLE lt_ekpo INTO lw_ekpo WITH KEY matnr = lw_lqua-matnr
menge = lw_lqua-verme.
IF sy-subrc NE 0.
MESSAGE i421(zlew02) DISPLAY LIKE 'E'.
RETURN.
ENDIF.
ENDLOOP.
* Create Outbount Delivery for STO created earlier
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
EXPORTING
ship_point
= lv_vstel
due_date
= sy-datum
IMPORTING
delivery
= v_vbeln
TABLES
stock_trans_items = t_reftosto
return
= t_return.
* Populate Output Log table accordingly
IF NOT v_vbeln IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'Outbound Delivery'(003).
wa_outtab-intrldoctyp = 'DEL'.
wa_outtab-document = v_vbeln.
APPEND wa_outtab TO t_outtab.
lcl_main_process=>old_del = v_vbeln.
Begin of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
IF gv_q_stock EQ 'X'.
PERFORM update_shipqi USING v_vbeln.
ENDIF.
*
IF gv_q_stock EQ 'X'. " BDC code will be executed only in case of Qualit
y Stock
*
gt_reftosto = t_reftosto.
*
PERFORM bdc_vl02n USING v_vbeln. " This will update field 'Ship QI St
ock' in Custom tab 'User Data' in VL02N transaction.
*
COMMIT WORK AND WAIT.
*
ENDIF.
****
End of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
ELSE.
****

wa_outtab-status = icon_red_light.
wa_outtab-doctyp = 'Outbound Delivery'(003).
wa_outtab-intrldoctyp = 'DEL'.
LOOP AT t_return INTO wa_return
WHERE type = c_e .
CONCATENATE wa_outtab-message wa_return-message
INTO wa_outtab-message SEPARATED BY '/'.
ENDLOOP.
APPEND wa_outtab TO t_outtab.

ENDIF.
CLEAR: wa_outtab.
ENDMETHOD.
"create_delivery_frm_sto
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'CREATE_DELIVERY_FRM_SLS_ORDER'
***--------------------------------------------------------------------*
*** Create Delivery for STO using BAPI 'BAPI_OUTB_DELIVERY_CREATE_SLS'
***--------------------------------------------------------------------*
METHOD create_delivery_frm_sls_order.
DATA: BEGIN OF lw_vbap,
vbeln
TYPE vbap-vbeln,
posnr
TYPE vbap-posnr,
matnr
TYPE vbap-matnr,
kwmeng
TYPE vbap-kwmeng,
vrkme
TYPE vbap-vrkme,
END OF lw_vbap.
DATA: BEGIN OF lw_lqua,
lgnum
TYPE
matnr
TYPE
lgpla
TYPE
verme
TYPE
meins
TYPE
lenum
TYPE
END OF lw_lqua.
DATA: lt_vbap_tmp
lt_vbap
lt_lqua
lt_lqua_tmp
l_lines1
l_lines2
DATA: lv_vstel TYPE

lqua-lgnum,
lqua-matnr,
lqua-lgpla,
lqua-verme,
lqua-meins,
lqua-lenum,

LIKE TABLE
LIKE TABLE
LIKE TABLE
LIKE TABLE
TYPE i,
TYPE i.
vstel.

OF
OF
OF
OF

"
"
"
"
"
"

Warehouse Number
Material Number
Bin
Available Stock
UOM
SU

lw_vbap,
lw_vbap,
lw_lqua,
lw_lqua,

REFRESH t_return.
LOOP AT t_vbap INTO wa_vbap.
wa_slsitem-ref_doc
= wa_vbap-vbeln.
wa_slsitem-ref_item = wa_vbap-posnr.
wa_slsitem-dlv_qty
= wa_vbap-kwmeng.
wa_slsitem-sales_unit = wa_vbap-vrkme.
APPEND wa_slsitem TO t_slsitem.
CLEAR wa_slsitem.
ENDLOOP.
* Since we already have Sales order, just append the info to output log
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'Sales Order'(004).
wa_outtab-intrldoctyp = 'SO'.
wa_outtab-document = wa_vbap-vbeln.
APPEND wa_outtab TO t_outtab.
CLEAR: wa_outtab, wa_vbap.
*Comparing SO data with Bin data
SELECT a~vbeln a~posnr a~matnr a~kwmeng a~vrkme FROM vbap AS a
INNER JOIN mara AS b
ON a~matnr EQ b~matnr

INTO TABLE lt_vbap_tmp


WHERE a~vbeln EQ p_vbeln
AND b~mtart IN ('FERT', 'ZERT').
*
*

Adding material quantity beacuse there can be a case when


a single SO would contain two line items of the same matnr
CLEAR lt_vbap.
LOOP AT lt_vbap_tmp INTO lw_vbap.
CLEAR: lw_vbap-vbeln, lw_vbap-posnr.
COLLECT lw_vbap INTO lt_vbap.
ENDLOOP.
SELECT SINGLE *
FROM zdps_lewt_ld_com
INTO gs_load_comp
WHERE lgnum = p_lgnum
AND swerks IN s_swerks
AND rwerks = p_rwerks
AND lgort = p_lgort.
IF gs_load_comp-vltyp IS INITIAL.
gs_load_comp-vltyp = 'STG'.
ENDIF.
SELECT lgnum
matnr
lgpla
verme
meins
lenum
FROM lqua
INTO TABLE lt_lqua
WHERE lgnum = p_lgnum
AND werks IN s_swerks
AND lgtyp = gs_load_comp-vltyp
AND lgpla = p_lgpla
AND bestq = space.
LOOP AT lt_lqua INTO lw_lqua.
CLEAR lw_lqua-lenum.
COLLECT lw_lqua INTO lt_lqua_tmp.
ENDLOOP.
DESCRIBE TABLE lt_lqua_tmp LINES l_lines1.
DESCRIBE TABLE lt_vbap LINES l_lines2.
IF l_lines1 NE l_lines2.
MESSAGE i422(zlew02) DISPLAY LIKE 'E'.
RETURN.
ENDIF.
LOOP AT lt_lqua_tmp INTO lw_lqua.
READ TABLE lt_vbap INTO lw_vbap WITH KEY matnr = lw_lqua-matnr
kwmeng = lw_lqua-verme.
IF sy-subrc NE 0.
MESSAGE i422(zlew02) DISPLAY LIKE 'E'.
RETURN.
ENDIF.
ENDLOOP.

* Determine Shipping point for Sales Order


SELECT SINGLE vstel FROM vbap
INTO lv_vstel
WHERE vbeln = p_vbeln.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
EXPORTING
ship_point
= lv_vstel
due_date
= sy-datum
IMPORTING
delivery
= v_vbeln
TABLES
sales_order_items = t_slsitem
return
= t_return.
IF NOT v_vbeln IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = c_x.
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'Outbound Delivery'(003).
wa_outtab-intrldoctyp = 'DEL'.
wa_outtab-document = v_vbeln.
APPEND wa_outtab TO t_outtab.
lcl_main_process=>old_del = v_vbeln.
*&--Begin of change KAPRX003/09/03/2015
ELSEIF v_vbeln IS INITIAL AND NOT g_del IS INITIAL.
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'Outbound Delivery'(003).
wa_outtab-intrldoctyp = 'DEL'.
wa_outtab-document = g_del.
APPEND wa_outtab TO t_outtab.
lcl_main_process=>old_del = v_vbeln = g_del.
*&--end of change KAPRX003/09/03/2015
ELSE.
wa_outtab-status = icon_red_light.
wa_outtab-doctyp = 'Outbound Delivery'(003).
wa_outtab-intrldoctyp = 'DEL'.
LOOP AT t_return INTO wa_return
WHERE type = c_e .
CONCATENATE wa_outtab-message wa_return-message
INTO wa_outtab-message SEPARATED BY '/'.
ENDLOOP.
APPEND wa_outtab TO t_outtab.
ENDIF.
CLEAR: wa_outtab.
ENDMETHOD.

"create_delivery_frm_sls_order

***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'CREATE_TO_FOR_DELNOTE'
***--------------------------------------------------------------------*
***
Create Transfer Order for Delivery

***--------------------------------------------------------------------*
METHOD create_to_for_delnote.
DATA: BEGIN OF lw_lqua,
lgnum
TYPE lqua-lgnum,
" Warehouse Number
matnr
TYPE lqua-matnr,
" Material Number
lgpla
TYPE lqua-lgpla,
" Bin
verme
TYPE lqua-verme,
" Available Stock
meins
TYPE lqua-meins,
" UOM
lenum
TYPE lqua-lenum,
" SU
END OF lw_lqua.
DATA: lv_lgnum
lt_lqua
lt_lqua_tmp
lt_lqua_tmp1
l_lines1
l_lines2
lw_lips
lw_lagpv
user
lv_msgtxt

TYPE
LIKE
LIKE
LIKE
TYPE
TYPE
LIKE
TYPE
TYPE
TYPE

lgnum,
TABLE OF lw_lqua,
TABLE OF lw_lqua,
TABLE OF lw_lqua,
i,
i,
LINE OF t_lips,
lagpv,
sy-uname,
string.

DATA: lt_ltak
TYPE TABLE OF ltak_vb,
lt_ltap_vb
TYPE TABLE OF ltap_vb,
lw_ltap_vb
TYPE ltap_vb,
lt_ltap_conf TYPE TABLE OF ltap_conf,
lw_ltap_conf TYPE ltap_conf,
lt_ltap_conf_hu TYPE TABLE OF ltap_conf_hu,
lw_ltap_conf_hu TYPE ltap_conf_hu.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = v_vbeln
IMPORTING
output = v_vbeln.
* Select items for the Delivery we just created.
REFRESH t_lips.
SELECT a~vbeln a~posnr a~matnr a~lgort a~lfimg a~lgnum
INTO TABLE t_lips
FROM lips AS a INNER JOIN vbup AS b
ON a~vbeln EQ b~vbeln
AND a~posnr EQ b~posnr
WHERE a~vbeln EQ v_vbeln
AND b~kosta NE 'C'.
SELECT SINGLE *
FROM zdps_lewt_ld_com
INTO gs_load_comp
WHERE lgnum = p_lgnum
AND swerks IN s_swerks
AND rwerks = p_rwerks
AND lgort = p_lgort.
IF gs_load_comp-vltyp IS INITIAL.
gs_load_comp-vltyp = 'STG'.
ENDIF.
** Start of change by MARSX557:11/20/2012
SELECT lgnum

matnr
lgpla
verme
meins
lenum
*
bestq
FROM lqua
INTO TABLE lt_lqua
WHERE lgnum = p_lgnum
AND werks IN s_swerks
AND lgtyp = gs_load_comp-vltyp
AND lgpla = p_lgpla
*
AND bestq = space.
"Available Stock
" Commented -- KUMJX
005 -- 08/03/2016 revtrac - 555195
****
Begin of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
AND bestq IN (' ' , 'Q' ).
***
End of Addition -- KUMJX005 -- 08/03/2016 revtrac - 555195
*
IF NOT gv_qi_flag EQ c_x.
*
SELECT lgnum matnr lgpla verme meins lenum
*
FROM lqua
*
INTO TABLE lt_lqua
*
WHERE lgnum = p_lgnum
*
AND werks IN s_swerks
*
AND lgtyp = gs_load_comp-vltyp
*
AND lgpla = p_lgpla
*
AND bestq = space.
*
ELSE.
*
SELECT lgnum matnr lgpla verme meins lenum
*
FROM lqua
*
INTO TABLE lt_lqua
*
WHERE lgnum = p_lgnum
*
AND werks IN s_swerks
*
AND lgtyp = gs_load_comp-vltyp
*
AND lgpla = p_lgpla
*
AND bestq = gc_q.
*
ENDIF.
** End of change by MARSX557:11/20/2012
LOOP AT lt_lqua INTO lw_lqua.
COLLECT lw_lqua INTO lt_lqua_tmp1.
CLEAR lw_lqua-lenum.
COLLECT lw_lqua INTO lt_lqua_tmp.
ENDLOOP.
CLEAR lw_lqua.
LOOP AT lt_lqua_tmp1 INTO lw_lqua.
CLEAR wa_delit.
READ TABLE t_lips INTO lw_lips WITH KEY matnr = lw_lqua-matnr.
IF sy-subrc EQ 0.
lv_lgnum = lw_lips-lgnum.
wa_delit-posnr = lw_lips-posnr.
ENDIF.
wa_delit-anfme = lw_lqua-verme.
wa_delit-altme = lw_lqua-meins.
wa_delit-nltyp = '916'.
wa_delit-nlpla = v_vbeln.
wa_delit-vltyp = gs_load_comp-vltyp.

wa_delit-vlber = gs_load_comp-vlber.
wa_delit-vlpla = p_lgpla.
wa_delit-vlenr = lw_lqua-lenum.
APPEND wa_delit TO t_delit.
ENDLOOP.
* Create Transfer order for Truck
CALL FUNCTION 'L_TO_CREATE_DN'
EXPORTING
i_lgnum
i_vbeln
*
i_squit
i_commit_work
it_delit
IMPORTING
e_tanum
TABLES
t_ltak
t_ltap_vb
EXCEPTIONS
foreign_lock
dn_completed
partial_delivery_forbidden
xfeld_wrong
ldest_wrong
drukz_wrong
dn_wrong
squit_forbidden
no_to_created
teilk_wrong
update_without_commit
no_authority
no_picking_allowed
dn_hu_not_choosable
error_message
OTHERS

"#EC *
= lv_lgnum
= v_vbeln
= c_x
= space
= t_delit
= v_tanum
= lt_ltak
= lt_ltap_vb
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16.

IF lt_ltak IS NOT INITIAL.


COMMIT WORK AND WAIT.
LOOP AT lt_ltap_vb INTO lw_ltap_vb.
REFRESH: lt_ltap_conf_hu, lt_ltap_conf.
lw_ltap_conf-tanum = lw_ltap_vb-tanum.
lw_ltap_conf-tapos = lw_ltap_vb-tapos.
lw_ltap_conf-squit = c_x.
APPEND lw_ltap_conf TO lt_ltap_conf.
lw_ltap_conf_hu-tanum = lw_ltap_vb-tanum.
lw_ltap_conf_hu-tapos = lw_ltap_vb-tapos.
lw_ltap_conf_hu-vonhu = lw_ltap_vb-vlenr.
lw_ltap_conf_hu-nachu = lw_ltap_vb-vlenr.
lw_ltap_conf_hu-menga = lw_ltap_vb-vsolm.
lw_ltap_conf_hu-altme = lw_ltap_vb-altme.
lw_ltap_conf_hu-huent = c_x.
APPEND lw_ltap_conf_hu TO lt_ltap_conf_hu.
CALL FUNCTION 'L_TO_CONFIRM'
EXPORTING
i_lgnum

= lv_lgnum

i_tanum
i_update_task
i_commit_work
TABLES
t_ltap_conf
t_ltap_conf_hu
EXCEPTIONS
to_confirmed
to_doesnt_exist
item_confirmed
item_subsystem
item_doesnt_exist
item_without_zero_stock_check
item_with_zero_stock_check
one_item_with_zero_stock_check
item_su_bulk_storage
item_no_su_bulk_storage
one_item_su_bulk_storage
foreign_lock
squit_or_quantities
vquit_or_quantities
bquit_or_quantities
quantity_wrong
double_lines
kzdif_wrong
no_difference
no_negative_quantities
wrong_zero_stock_check
su_not_found
no_stock_on_su
su_wrong
too_many_su
nothing_to_do
no_unit_of_measure
xfeld_wrong
update_without_commit
no_authority
lqnum_missing
charg_missing
no_sobkz
no_charg
nlpla_wrong
two_step_confirmation_required
two_step_conf_not_allowed
pick_confirmation_missing
quknz_wrong
hu_data_wrong
no_hu_data_required
hu_data_missing
hu_not_found
picking_of_hu_not_possible
not_enough_stock_in_hu
serial_number_data_wrong
serial_numbers_not_required
no_differences_allowed
serial_number_not_available
serial_number_data_missing
to_item_split_not_allowed
input_wrong
OTHERS

= lw_ltap_conf-tanum
= 'X'
= ' '
= lt_ltap_conf
= lt_ltap_conf_hu
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
INTO lv_msgtxt
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
wa_outtab-status = icon_red_light.
wa_outtab-doctyp = 'Transfer Order'(005).
wa_outtab-intrldoctyp = 'TO'.
wa_outtab-document = lw_ltap_conf-tanum.
wa_outtab-message = lv_msgtxt.
APPEND wa_outtab TO t_outtab.
ELSE.
COMMIT WORK AND WAIT.
wa_outtab-status = icon_green_light.
wa_outtab-doctyp = 'Transfer Order'(005).
wa_outtab-intrldoctyp = 'TO'.
wa_outtab-document = lw_ltap_conf-tanum.
APPEND wa_outtab TO t_outtab.
ENDIF.
ENDLOOP.
*<----Removing putaway block
*
checking the bin
CLEAR lw_lagpv.
SELECT * FROM lagp UP TO 1 ROWS INTO CORRESPONDING FIELDS OF lw_lagpv
WHERE lgnum EQ p_lgnum
AND lgpla EQ p_lgpla.
ENDSELECT.
*
*

IF sy-subrc EQ 0.
Check if Bin is already bloked or not
IF lw_lagpv-skzue IS NOT INITIAL.
Unblock the Bin
MOVE: sy-uname TO lw_lagpv-uname,
sy-datlo TO lw_lagpv-laedt.
CLEAR lw_lagpv-skzue.
Locking Bin to modify
CALL FUNCTION 'ENQUEUE_ELLAGPE'
EXPORTING
lgnum
= lw_lagpv-lgnum
lgtyp
= lw_lagpv-lgtyp
lgpla
= lw_lagpv-lgpla
EXCEPTIONS
foreign_lock = 1
system_failure = 2.
CASE sy-subrc.
WHEN 1.
user = sy-msgv1.
blocked by user ...
MESSAGE i593(l1) DISPLAY LIKE 'E'
WITH lw_lagpv-lgpla user.
EXIT.
WHEN 2. MESSAGE e595(l1).
ENDCASE.
Modifying the Bin
CALL FUNCTION 'L_LAGP_VERAENDERN'
EXPORTING
xlagpv = lw_lagpv.

Removing the lock


CALL FUNCTION 'DEQUEUE_ELLAGPE'
EXPORTING
lgnum = lw_lagpv-lgnum
lgtyp = lw_lagpv-lgtyp
lgpla = lw_lagpv-lgpla.
ENDIF."IF lw_lagpv-skzue IS NOT INITIAL.
ELSE."IF sy-subrc EQ 0.
"No Entry exist for &1 &2 &3
MESSAGE i414(zlew02) DISPLAY LIKE 'E'
WITH p_lgnum p_door.
EXIT.
ENDIF."IF sy-subrc EQ 0.

*-----End -->
ELSE.
wa_outtab-status = icon_red_light.
wa_outtab-doctyp = 'Transfer Order'(005).
wa_outtab-intrldoctyp = 'TO'.
wa_outtab-message = 'Transfer Order not created'(006).
APPEND wa_outtab TO t_outtab.
ENDIF.
ENDMETHOD.
"create_to_for_delnote
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'GET_TAX_ASSIGNMENT'
***--------------------------------------------------------------------*
METHOD get_tax_assignment.
DATA: lw_general
lw_t134m
lv_land1
lv_value

TYPE
TYPE
TYPE
TYPE

bapimatdoa,
t134m,
t001-land1,
zlewm_config-zvar_value.

CONSTANTS: lc_z TYPE c VALUE 'Z',


lc_us(2)
lc_ca(2)
lc_sto_pal_tax_us(14)
lc_sto_pal_tax_ca(14)

TYPE
TYPE
TYPE
TYPE

c
c
c
c

CLEAR: ex_mwskz, ex_knttp.


*

Exit if material code is blank


IF im_matnr IS INITIAL.
EXIT.
ENDIF.

Get material general information


CALL FUNCTION 'BAPI_MATERIAL_GET_DETAIL'
EXPORTING
material
= im_matnr
IMPORTING
material_general_data = lw_general.

Exit if nothing found


IF lw_general IS INITIAL.
EXIT.
ENDIF.

VALUE
VALUE
VALUE
VALUE

'US',
'CA',
'STO_PAL_TAX_US',
'STO_PAL_TAX_CA'.

SELECT SINGLE * FROM t134m INTO CORRESPONDING FIELDS OF lw_t134m


WHERE bwkey = im_werks AND mtart = lw_general-matl_type.
Exit if nothing found
IF sy-subrc <> 0.
EXIT.
ENDIF.
Account Assignment Category
IF lw_t134m-wertu = space.
ex_knttp = lc_z.
ENDIF.
CHECK im_bukrs IS NOT INITIAL.
SELECT SINGLE land1 FROM t001
INTO lv_land1
WHERE bukrs = im_bukrs.

*
*

return code check done using value in L_LAND1


IF lv_land1 = lc_us.
Get US tax code from table ZLEWM_CONFIG
SELECT SINGLE zvar_value FROM zlewm_config
INTO lv_value
WHERE zvar_name = lc_sto_pal_tax_us.
IF sy-subrc = 0.
ex_mwskz = lv_value.
ENDIF.
ELSEIF lv_land1 = lc_ca.
Get CA tax code from table ZLEWM_CONFIG
SELECT SINGLE zvar_value FROM zlewm_config
INTO lv_value
WHERE zvar_name = lc_sto_pal_tax_ca.
IF sy-subrc = 0.
ex_mwskz = lv_value.
ENDIF.
ENDIF.

ENDMETHOD.
"get_tax_assignment
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'SHOW_OLD_DOC_NOS'
***--------------------------------------------------------------------*
METHOD show_old_doc_nos.
IMPORT old_sto
TO p_old1
old_del
TO p_old2
old_shpmnt TO p_shmnt FROM MEMORY ID 'SAVE'.
ENDMETHOD.
"show_old_doc_nos
ENDCLASS.

"lcl_main_process

*&---------------------------------------------------------------------*
*&
Class (Implementation) lcl_alv_process
*&---------------------------------------------------------------------*
*
Text
*----------------------------------------------------------------------*
CLASS lcl_alv_process IMPLEMENTATION.
METHOD constructor.
CASE im_type.
*-- Output log ALV

WHEN 'ALV'.
CALL METHOD me->create_object_log.
*-- Display Door ALV
WHEN 'POP'.
CALL METHOD me->create_object_popup.
ENDCASE.
ENDMETHOD.
"constructor
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'DISPLAY_OUTPUT_LOG'
***--------------------------------------------------------------------*
***
Create container objects for Output log ALV
***--------------------------------------------------------------------*
METHOD create_object_log.
IF gv_container IS INITIAL.
CREATE OBJECT gv_container
EXPORTING
container_name = c_container.
ENDIF.
CREATE OBJECT gv_alv
EXPORTING
i_parent
= gv_container
i_appl_events = c_x.
ENDMETHOD.
"display_output_log
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'CREATE_OBJECT_POPUP'
***--------------------------------------------------------------------*
***
Create container objects for Display Door popup ALV
***--------------------------------------------------------------------*
METHOD create_object_popup.
IF gv_popcontainer IS INITIAL.
CREATE OBJECT gv_popcontainer
EXPORTING
width = 1000
height = 250
top
= 50
left
= 50
style = 1
caption = text-023.
ENDIF.
CREATE OBJECT gv_popalv
EXPORTING
i_parent
= gv_popcontainer
i_appl_events = c_x.
ENDMETHOD.
"create_object_popup
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'PREPARE_ALV_REPORT'
***--------------------------------------------------------------------*
***
Prepare Output Log ALV Report
***--------------------------------------------------------------------*
METHOD prepare_alv_report.
*-- Event Handlers
SET HANDLER me->handle_hotspot FOR gv_alv.
SET HANDLER me->handle_toolbar_button FOR gv_alv.
SET HANDLER me->handle_user_command FOR gv_alv.

*-- Preppare Field Catalog


CALL METHOD me->create_field_catalog.
*-- Display ALV
CALL METHOD me->display_alv_report.
ENDMETHOD.
"display_output_log
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'FIELD_CATALOG'
***--------------------------------------------------------------------*
METHOD create_field_catalog.
FIELD-SYMBOLS: <l_fcat> TYPE lvc_s_fcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = c_struc
CHANGING
ct_fieldcat
= t_fcat.
LOOP AT t_fcat ASSIGNING <l_fcat>.
CASE <l_fcat>-fieldname.
WHEN 'STATUS'.
<l_fcat>-seltext = 'Status'(007).
<l_fcat>-coltext = 'Status'(007).
<l_fcat>-outputlen = 6.
WHEN 'DOCTYP'.
<l_fcat>-seltext = 'Document Type'(008).
<l_fcat>-coltext = 'Document Type'(008).
<l_fcat>-outputlen = 15.
WHEN 'DOCUMENT'.
<l_fcat>-seltext = 'Document No.'(009).
<l_fcat>-coltext = 'Document No.'(009).
<l_fcat>-outputlen = 15.
<l_fcat>-hotspot = c_x.
WHEN 'MESSAGE'.
<l_fcat>-seltext = 'Error Message'(010).
<l_fcat>-coltext = 'Error Message'(010).
<l_fcat>-outputlen = 100.
WHEN 'INTRLDOCTYP'.
<l_fcat>-no_out = 'X'.
ENDCASE.
ENDLOOP.
ENDMETHOD.
"create_field_catalog
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'DISPLAY_ALV_REPORT'
***--------------------------------------------------------------------*
METHOD display_alv_report.
DATA: lv_text

TYPE lvc_title.

CONCATENATE text-001 p_lgpla INTO lv_text SEPARATED BY space.


* Prepare ALV layout
s_layout-zebra
s_layout-sel_mode
s_layout-stylefname
s_layout-grid_title

=
=
=
=

c_x.
c_d.
'STYLE'.
lv_text.

IF s_variant IS INITIAL.

s_variant-report = sy-repid.
s_variant-username = sy-uname.
s_variant-variant = p_disvar.
ENDIF.
CALL METHOD gv_alv->set_table_for_first_display
EXPORTING
is_variant
= s_variant
i_save
= c_a
i_default
= c_x
is_layout
= s_layout
CHANGING
it_outtab
= main_process->t_outtab
it_fieldcatalog
= t_fcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error
= 2
too_many_lines
= 3
OTHERS
= 4.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDMETHOD.
"display_alv_report
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'HANDLE_HOTSPOT'
***--------------------------------------------------------------------*
METHOD handle_hotspot.
READ TABLE main_process->t_outtab
INTO main_process->wa_outtab INDEX e_row_id-index.
CHECK main_process->wa_outtab-document IS NOT INITIAL.
CASE main_process->wa_outtab-intrldoctyp.
WHEN 'STO'.
SET PARAMETER ID 'BES' FIELD main_process->wa_outtab-document.
CALL TRANSACTION 'ME23N'.
WHEN 'SO'.
SET PARAMETER ID 'AUN' FIELD main_process->wa_outtab-document.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
WHEN 'DEL'.
SET PARAMETER ID 'VL' FIELD main_process->wa_outtab-document.
CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
WHEN 'SHMT'.
SET PARAMETER ID 'TNR' FIELD main_process->wa_outtab-document.
CALL TRANSACTION 'VT02N'.
WHEN 'TO'.
SET PARAMETER ID: 'TAN' FIELD main_process->wa_outtab-document,
'LGN' FIELD p_lgnum.
CALL TRANSACTION 'LT21' AND SKIP FIRST SCREEN.
ENDCASE.
ENDMETHOD.
"handle_hotspot
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'HANDLE_TOOLBAR_BUTTON'
***--------------------------------------------------------------------*
METHOD handle_toolbar_button.
* Separator
wa_button-function = c_seprtr.

wa_button-butn_type = 3.
APPEND wa_button TO e_object->mt_toolbar.
CLEAR wa_button.
* PGI button
wa_button-function = c_pgi.
wa_button-butn_type = 0.
wa_button-quickinfo = 'Post Goods Issue'(012).
wa_button-text
= 'Post Goods Issue'(012).
APPEND wa_button TO e_object->mt_toolbar.
CLEAR wa_button.
* Separator
wa_button-function = c_seprtr.
wa_button-butn_type = 3.
APPEND wa_button TO e_object->mt_toolbar.
CLEAR wa_button.
* Shipment Complete
wa_button-function = c_shpc.
wa_button-butn_type = 0.
wa_button-quickinfo = 'Shipment Complete'(028).
wa_button-text
= 'Shipment Complete'(028).
APPEND wa_button TO e_object->mt_toolbar.
CLEAR wa_button.
ENDMETHOD.
"handle_toolbar
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'ADD_DEATILS_BUTTON'
***--------------------------------------------------------------------*
METHOD add_deatils_button.
REFRESH e_object->mt_toolbar."Clearing all standard Buttons
* Adding Details button
wa_button-function = c_det.
wa_button-icon = icon_overview.
wa_button-butn_type = 0.
wa_button-quickinfo = 'Details'(024).
wa_button-text
= 'Details'(024).
APPEND wa_button TO e_object->mt_toolbar.
CLEAR wa_button.
ENDMETHOD.
"add_deatils_button
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'HANDLE_USER_COMMAND'
***--------------------------------------------------------------------*
METHOD handle_user_command.
CASE e_ucomm.
WHEN c_shpc.
READ TABLE main_process->t_outtab
INTO main_process->wa_outtab WITH KEY intrldoctyp = 'SHMT'.
IF sy-subrc EQ 0 AND main_process->wa_outtab-document IS NOT INITIAL.
SET PARAMETER ID 'TNR' FIELD main_process->wa_outtab-document.
CALL TRANSACTION 'VT02N'.
ENDIF.
* PGI Button
WHEN c_pgi.
READ TABLE main_process->t_outtab
INTO main_process->wa_outtab WITH KEY intrldoctyp = 'DEL'.
IF sy-subrc EQ 0 AND main_process->wa_outtab-document IS NOT INITIAL.

SET PARAMETER ID 'VL' FIELD main_process->wa_outtab-document.


CALL TRANSACTION 'VL02N'.
ENDIF.
ENDCASE.
ENDMETHOD.
"handle_user_command
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'USER_COMMAND_ON_POPUP_ALV'
***--------------------------------------------------------------------*
METHOD user_command_on_popup_alv.
DATA: ls_popout LIKE LINE OF lcl_main_process=>t_popout,
ls_row_no LIKE LINE OF t_row_no,
lw_rspar TYPE rsparams,
lt_rspar LIKE TABLE OF lw_rspar.
REFRESH: t_ind_row, t_row_no.
CASE e_ucomm.
WHEN 'DET'.
CALL METHOD gv_popalv->get_selected_rows
IMPORTING
et_index_rows = t_ind_row
et_row_no
= t_row_no.
CALL METHOD cl_gui_cfw=>flush.
*

Reading at index 1 beacause ALV is single line seletable


READ TABLE t_row_no INTO ls_row_no INDEX 1.
IF sy-subrc NE 0.
EXIT.
ENDIF.
READ TABLE lcl_main_process=>t_popout
INTO ls_popout INDEX ls_row_no-row_id.
IF sy-subrc EQ 0.
lw_rspar-selname =
lw_rspar-kind
=
lw_rspar-low
=
APPEND lw_rspar TO

'S1_LGNUM'.
'P'.
ls_popout-lgnum.
lt_rspar.

lw_rspar-selname =
lw_rspar-kind
=
lw_rspar-sign
=
lw_rspar-option =
lw_rspar-low
=
APPEND lw_rspar TO

'S1_LGPLA'.
'S'.
'I'.
'EQ'.
ls_popout-lgpla.
lt_rspar.

SUBMIT rls10030 "VIA SELECTION-SCREEN


WITH SELECTION-TABLE lt_rspar AND RETURN.
ENDIF.
ENDCASE.
ENDMETHOD.
"user_command_on_popup_alv
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'HANDLE_CLOSE_POPUP'
***--------------------------------------------------------------------*
METHOD handle_close_popup.
* Free the instance that contains the dialog box
CALL METHOD gv_popalv->free.
CLEAR gv_popalv.
CALL METHOD gv_popcontainer->free.

CLEAR gv_popcontainer.
SET SCREEN 0.
LEAVE SCREEN.
ENDMETHOD.
"handle_close_popup
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'PREPARE_POPUP_ALV'
***--------------------------------------------------------------------*
METHOD prepare_popalv.
SET HANDLER me->add_deatils_button FOR gv_popalv.
SET HANDLER me->user_command_on_popup_alv FOR gv_popalv.
*-- Prepare Field Catalog
CALL METHOD me->create_popalv_fcat.
*-- Display ALV
CALL METHOD me->display_popalv.
* Call method 'set_toolbar_interactive' to raise event TOOLBAR.
CALL METHOD gv_popalv->set_toolbar_interactive.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = gv_popalv.
ENDMETHOD.
"prepare_popup_alv
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'CREATE_POPALV_FCAT'
***--------------------------------------------------------------------*
METHOD create_popalv_fcat.
FIELD-SYMBOLS: <l_fcat> TYPE lvc_s_fcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = c_popstruc
CHANGING
ct_fieldcat
= t_fcat.
LOOP AT t_fcat ASSIGNING <l_fcat>.
CASE <l_fcat>-fieldname.
WHEN 'VERME'.
<l_fcat>-seltext = 'Qty on Door'(015).
<l_fcat>-coltext = 'Qty on Door'(015).
<l_fcat>-outputlen = 12.
WHEN 'PAL'.
<l_fcat>-seltext = 'Pallets'(016).
<l_fcat>-coltext = 'Pallets'(016).
<l_fcat>-outputlen = 8.
WHEN 'MEINS'.
<l_fcat>-seltext = 'Unit of Measurement'(018).
<l_fcat>-coltext = 'UoM'(017).
<l_fcat>-outputlen = 5.
WHEN 'GEWEI'.
<l_fcat>-outputlen = 10.
WHEN 'WERKS'.
<l_fcat>-no_out = 'X'.
WHEN 'LGNUM'.
<l_fcat>-no_out = 'X'.
WHEN 'LGTYP'.
<l_fcat>-no_out = 'X'.
WHEN 'LGPLA'.
<l_fcat>-no_out = 'X'.
ENDCASE.

ENDLOOP.
ENDMETHOD.
"create_popalv_fcat
***--------------------------------------------------------------------*
***
METHOD IMPLEMENTATION 'DISPLAY_POPALV'
***--------------------------------------------------------------------*
METHOD display_popalv.
* Prepare ALV layout
s_layout-zebra
s_layout-sel_mode
s_layout-stylefname
s_layout-grid_title
s_layout-sel_mode =

= c_x.
= c_d.
= 'STYLE'.
= p_door.
'B'. "To make ALV single line selectable

IF s_variant IS INITIAL.
s_variant-report = sy-repid.
s_variant-username = sy-uname.
ENDIF.
SET HANDLER popup_alv->handle_close_popup FOR gv_popcontainer.
CALL METHOD gv_popalv->set_table_for_first_display
EXPORTING
is_variant
= s_variant
i_save
= c_a
i_default
= c_x
is_layout
= s_layout
CHANGING
it_outtab
= lcl_main_process=>t_popout
it_fieldcatalog
= t_fcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error
= 2
too_many_lines
= 3
OTHERS
= 4.
ENDMETHOD.
"display_popalv
ENDCLASS.
"lcl_alv_process IMPLEMENTATION
*&---------------------------------------------------------------------*
*&
Module STATUS_2000 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_2000 OUTPUT.
SET PF-STATUS 'ZLIVELOADALV'.
IF alv_process IS INITIAL.
CREATE OBJECT alv_process
EXPORTING
im_type = 'ALV'.
ENDIF.
CALL METHOD alv_process->prepare_alv_report.
ENDMODULE.
" STATUS_2000 OUTPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
*
text

*----------------------------------------------------------------------*
MODULE user_command_2000 INPUT.
DATA: old_sto
TYPE char10,
old_del
TYPE char10,
old_shpmnt TYPE char10.
CASE gv_okcode.
WHEN 'BACK' OR 'CANC' OR 'EXIT'.
old_sto = lcl_main_process=>old_sto.
old_del = lcl_main_process=>old_del.
old_shpmnt = lcl_main_process=>old_shpmnt.
EXPORT old_sto old_del old_shpmnt TO MEMORY ID 'SAVE'
COMPRESSION ON.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
ENDMODULE.
" USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
*&
Module STATUS_2000 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_2010 OUTPUT.
CLEAR gv_okcode.
CREATE OBJECT popup_alv
EXPORTING
im_type = 'POP'.
CALL METHOD popup_alv->prepare_popalv.
ENDMODULE.
" STATUS_2000 OUTPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_2010 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_2010 INPUT.
"#EC NEEDED
ENDMODULE.
" USER_COMMAND_2010 INPUT
*&---------------------------------------------------------------------*
*&
Form BDC_VL02N
*&---------------------------------------------------------------------*
FORM bdc_vl02n USING p_v_vbeln TYPE vbeln_vl .
DATA : lw_bapidlvreftosto TYPE bapidlvreftosto,
lv_fnam(25) TYPE c,
lv_index(2) TYPE n.
MOVE 1 TO lv_index.
PERFORM bdc_dynpro
PERFORM bdc_field
PERFORM bdc_field
PERFORM bdc_field
PERFORM bdc_dynpro
PERFORM bdc_field

USING 'SAPMV50A' '4004'.


USING 'BDC_CURSOR'
'LIKP-VBELN'.
USING 'BDC_OKCODE'
'/00'.
USING 'LIKP-VBELN'
p_v_vbeln.
"'0840245837'.
USING 'SAPMV50A' '1000'.
USING 'BDC_OKCODE'
'ZCHK2'.

LOOP AT gt_reftosto INTO lw_bapidlvreftosto.


*
*
*
*
*
*
*
*
*
*

CLEAR lv_fnam.
PERFORM bdc_dynpro
PERFORM bdc_field

USING 'SAPMV50A' '4004'.


USING 'BDC_CURSOR'
'LIKP-VBELN'.
PERFORM bdc_field
USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field
USING 'LIKP-VBELN'
p_v_vbeln.
"'0840245837'.
PERFORM bdc_dynpro
USING 'SAPMV50A' '1000'.
PERFORM bdc_field
USING 'BDC_OKCODE'
'ZCHK2'.
CONCATENATE 'GS_USERTAB-SHIPQI' '(' lv_index ')' INTO lv_fnam.
CONDENSE lv_fnam.
PERFORM bdc_field
USING 'BDC_CURSOR'
lv_fnam. "'GS_USERTAB-SHIPQI(01)'.
PERFORM bdc_field
USING lv_fnam
"'GS_USERTAB-SHIPQI(01)'
'X'.
lv_index = lv_index + 1.
ENDLOOP.
PERFORM bdc_dynpro
USING 'SAPMV50A' '1000'.
PERFORM bdc_field
USING 'BDC_OKCODE'
'=SICH_T'.
CALL TRANSACTION 'VL02N'
USING gt_bdcdata
MODE 'N'
UPDATE 'S'.

ENDFORM.

" BDC_VL02N

*----------------------------------------------------------------------*
*
-->LP_PROGRAM text
*
-->LP_DYNPRO text
*----------------------------------------------------------------------*
FORM bdc_dynpro USING lp_program lp_dynpro.
CLEAR gwa_bdcdata.
gwa_bdcdata-program = lp_program.
gwa_bdcdata-dynpro = lp_dynpro.
gwa_bdcdata-dynbegin = 'X'.
APPEND gwa_bdcdata TO gt_bdcdata.
ENDFORM.
"BDC_DYNPRO
*&---------------------------------------------------------------------*
*&
Form bdc_field
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->LP_FNAM
text
*
-->LP_FVAL
text
*----------------------------------------------------------------------*
FORM bdc_field USING lp_fnam lp_fval.
CLEAR gwa_bdcdata.
gwa_bdcdata-fnam = lp_fnam.
gwa_bdcdata-fval = lp_fval.
APPEND gwa_bdcdata TO gt_bdcdata.
ENDFORM.
"BDC_FIELD
*&---------------------------------------------------------------------*
*&
Form UPDATE_SHIPQI
*&---------------------------------------------------------------------*
FORM update_shipqi USING
p_v_vbeln.

TYPES : BEGIN OF ty_lips,


vbeln
TYPE vbeln_vl,
posnr
TYPE posnr_vl,
zzshipqi TYPE char01,
END OF ty_lips.
DATA : lt_lips TYPE STANDARD TABLE OF lips,
wa_lips LIKE LINE OF lt_lips.
DATA:

l_delivery_no TYPE seqg3-garg,


lt_lock TYPE TABLE OF seqg3,
lw_lock TYPE seqg3.

CONCATENATE sy-mandt p_v_vbeln INTO l_delivery_no.


SELECT
*
"vbeln posnr
INTO CORRESPONDING FIELDS OF TABLE lt_lips
FROM lips
WHERE vbeln EQ p_v_vbeln.
IF sy-subrc EQ 0.
LOOP AT lt_lips INTO wa_lips.
wa_lips-zzshipqi = 'X'.
wa_lips-bestq = 'Q'.
"KAPRX003:03/14/2015
wa_lips-insmk = 'X'.
"KAPRX003:03/14/2015
MODIFY lt_lips FROM wa_lips TRANSPORTING zzshipqi
bestq insmk. "KAPRX003:03/14/2015
CLEAR wa_lips.
ENDLOOP.
MODIFY lips FROM TABLE lt_lips.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDFORM.

" UPDATE_SHIPQI

Das könnte Ihnen auch gefallen