0% found this document useful (0 votes)
1 views28 pages

Stock Open Close Query

The document outlines the structure and logic for a report named ZSTOCK_OPEN_CLOSE in ABAP, focusing on stock management data. It defines various data types and selection parameters to filter stock records based on criteria such as material number, batch, and dates. The report also includes logic for retrieving and processing stock data, including handling different scenarios based on user input.

Uploaded by

Suraj Tripathi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1 views28 pages

Stock Open Close Query

The document outlines the structure and logic for a report named ZSTOCK_OPEN_CLOSE in ABAP, focusing on stock management data. It defines various data types and selection parameters to filter stock records based on criteria such as material number, batch, and dates. The report also includes logic for retrieving and processing stock data, including handling different scenarios based on user input.

Uploaded by

Suraj Tripathi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 28

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

*& Report ZSTOCK_OPEN_CLOSE


*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zstock_open_close.

TABLES: matdoc , mara , mch1 , konp , a004.

*DATA: it_sub_final TYPE STANDARD TABLE OF ty_final_1,


* wa_sub_final TYPE ty_final_1.

*DATA: gt_final TYPE STANDARD TABLE OF ty_final_1,


* wa_final TYPE ty_final_1.
TYPES : BEGIN OF ty_final_1,
mandt TYPE matdoc-mandt,
matnr TYPE matdoc-matbf,
maktx TYPE makt-maktx,
charg TYPE matdoc-charg,
werks TYPE matdoc-werks,
lgort TYPE matdoc-lgort,
meins TYPE mara-meins,
matkl TYPE mara-matkl,
spart TYPE mara-spart,
extwg TYPE mara-extwg,
labor TYPE mara-labor,
wrkst TYPE mara-wrkst,
medium TYPE mara-medium,
mtart TYPE mara-mtart,
opening TYPE mseg-menge,
receipt TYPE mseg-menge,
issue TYPE mseg-menge,
closing TYPE mseg-menge,
plant_nm TYPE t001w-name1,
grn_no TYPE mseg-mblnr,
grn_date TYPE mseg-budat_mkpf,
grn_days TYPE num8,
pur_ord TYPE mseg-ebeln,
supp_cd TYPE mseg-lifnr,
last_issue_date TYPE matdoc-budat,
hold_days TYPE num8,
shelf_life TYPE char20,
mfg_date TYPE mch1-hsdat,
mfg_days TYPE num8,
exp_date TYPE mch1-vfdat,
hsn_no TYPE marc-steuc,
mat_grp TYPE t023t-wgbez,
storage_name TYPE t001l-lgobe,
div_nm TYPE tspat-vtext,
mod_strdescr TYPE t372m_t-medkxt,
uom_cd TYPE mvke-mvgr5,
uom_name TYPE tvm5t-bezei,
dosage_cd TYPE mvke-mvgr4,
dosage_descr TYPE tvm4t-bezei,
mat_ph TYPE mvke-prodh,
mat_phdescr TYPE char50,
mat_og TYPE mbew-hrkft,
prod_cost_no TYPE MBEW-KALN1,
mat_ogdescr TYPE tkkh2-hrktx,
grp_nm TYPE t134t-mtbez,
mat_retest TYPE mcha-qndat,
from_date TYPE sy-datum,
to_date TYPE sy-datum,
line_color TYPE char4,
END OF ty_final_1.

DATA : gt_final TYPE ztt_stk,


wa_final TYPE zst_stk.

DATA: final_output TYPE ztt_stk,


wa_output TYPE zst_stk.

TYPES : BEGIN OF ty_final_new,


mandt TYPE matdoc-mandt,
matnr TYPE matdoc-matbf,
maktx TYPE makt-maktx,
charg TYPE matdoc-charg,
werks TYPE matdoc-werks,
lgort TYPE matdoc-lgort,
meins TYPE mara-meins,
matkl TYPE mara-matkl,
spart TYPE mara-spart,
extwg TYPE mara-extwg,
labor TYPE mara-labor,
wrkst TYPE mara-wrkst,
medium TYPE mara-medium,
mtart TYPE mara-mtart,
opening TYPE mseg-menge,
receipt TYPE mseg-menge,
issue TYPE mseg-menge,
closing TYPE mseg-menge,
plant_nm TYPE t001w-name1,
grn_no TYPE mseg-mblnr,
grn_date TYPE mseg-budat_mkpf,
grn_days TYPE num8,
pur_ord TYPE mseg-ebeln,
supp_cd TYPE mseg-lifnr,
last_issue_date TYPE matdoc-budat,
hold_days TYPE num8,
shelf_life TYPE char20,
mfg_date TYPE mch1-hsdat,
mfg_days TYPE num8,
exp_date TYPE mch1-vfdat,
hsn_no TYPE marc-steuc,
mat_grp TYPE t023t-wgbez,
storage_name TYPE t001l-lgobe,
div_nm TYPE tspat-vtext,
mod_strdescr TYPE t372m_t-medkxt,
uom_cd TYPE mvke-mvgr5,
uom_name TYPE tvm5t-bezei,
dosage_cd TYPE mvke-mvgr4,
dosage_descr TYPE tvm4t-bezei,
mat_ph TYPE mvke-prodh,
mat_phdescr TYPE char50,
mat_og TYPE mbew-hrkft,
mat_ogdescr TYPE tkkh2-hrktx,
grp_nm TYPE t134t-mtbez,
mat_retest TYPE mcha-qndat,
from_date TYPE sy-datum,
to_date TYPE sy-datum,
rate TYPE mbewh-verpr,
mat_rate TYPE p DECIMALS 3,
exp_diff_1 TYPE i,
knumh TYPE a004-knumh,
knumh2 TYPE a004-knumh,
knumh3 TYPE a004-knumh,
kbetr TYPE konp-kbetr,
knumh1 TYPE a004-knumh,
kbetr1 TYPE konp-kbetr,
kbetr2 TYPE konp-kbetr,
kbetr3 TYPE konp-kbetr,
kbetr6 TYPE konp-kbetr,
tp TYPE konp-kbetr,
sp TYPE konp-kbetr,
cp TYPE konp-kbetr,
value_type TYPE mcha-bwtar,
line_color TYPE char4,
tcolor TYPE slis_t_specialcol_alv,
END OF ty_final_new.

DATA : gt_final_new TYPE TABLE OF ty_final_new,


wa_final_new TYPE ty_final_new.

DATA: final_output_new TYPE TABLE OF ty_final_new,


wa_output_new TYPE ty_final_new.

TYPES : BEGIN OF ty_RATE,


matnr TYPE MCHA-MATNR,
charg TYPE MCHA-CHARG,
werks TYPE MCHA-WERKS,
bwtar TYPE mcha-bwtar,
KALN1 TYPE MBEW-KALN1,
END OF ty_RATE.

DATA: gt_mcha TYPE TABLE OF ZST_RATE_VAL ,


WA_mcha TYPE ZST_RATE_VAL.

*TYPES : BEGIN OF ty_final_RATE,


* matnr TYPE mbewh-matnr,
* bwkey TYPE mbewh-bwkey,
* bwtar TYPE mbewh-bwtar,
* lfgja TYPE mbewh-lfgja,
* lfmon TYPE mbewh-lfmon,
* vprsv TYPE mbewh-vprsv,
* verpr TYPE mbewh-verpr,
* stprs TYPE mbewh-stprs,
* END OF ty_final_RATE.
TYPES : BEGIN OF ty_final_RATE,
KALNR TYPE CKMLCR-KALNR,
BDATJ TYPE CKMLCR-BDATJ,
POPER TYPE CKMLCR-POPER,
CURTP TYPE CKMLCR-CURTP,
VPRSV TYPE CKMLCR-VPRSV,
STPRS TYPE CKMLCR-STPRS,
PVPRS TYPE CKMLCR-PVPRS,
END OF ty_final_RATE.
DATA : lt_RATE TYPE TABLE OF ty_final_RATE,
WA_RATE TYPE ty_final_RATE.

DATA: ls_tabcolor TYPE lvc_s_scol.

DATA: xcolor TYPE slis_specialcol_alv.

""""""""""""""""""""""""""""""""""""""""
""Added By Leena Adep On 17.12.2024 17:05:55
"Without Batch
TYPES : BEGIN OF ty_final,
mandt TYPE matdoc-mandt,
matnr TYPE matdoc-matbf,
maktx TYPE makt-maktx,
werks TYPE matdoc-werks,
plant_nm TYPE t001w-name1,
lgort TYPE matdoc-lgort,
storage_name TYPE t001l-lgobe,
meins TYPE mara-meins,
matkl TYPE mara-matkl,
mat_grp TYPE t023t-wgbez,
grp_nm TYPE t134t-mtbez,
spart TYPE mara-spart,
extwg TYPE mara-extwg,
labor TYPE mara-labor,
wrkst TYPE mara-wrkst,
medium TYPE mara-medium,
mtart TYPE mara-mtart,
wbs TYPE prps-posid_edit,
salk3 TYPE mbew-salk3,
lbkum TYPE mbew-lbkum,
* lbkum TYPE p DECIMALS 3,
opening TYPE mseg-menge,
receipt TYPE mseg-menge,
issue TYPE mseg-menge,
closing TYPE mseg-menge,
rate TYPE mbew-salk3,
clg_val TYPE mbew-lbkum,
mat_retest TYPE mcha-qndat,
END OF ty_final.

DATA : gwt_final TYPE TABLE OF ty_final.


DATA : gwt_final2 TYPE TABLE OF ty_final.
""EOC By Leena Adep On 17.12.2024 17:05:59
DATA : gwt_final_new TYPE TABLE OF ty_final,
gwt_wa_final_new TYPE ty_final.

DATA: it_fieldcat TYPE TABLE OF slis_fieldcat_alv,


it_events TYPE TABLE OF slis_alv_event,
it_list_top_of_page TYPE TABLE OF slis_listheader,
it_sort TYPE slis_t_sortinfo_alv,
gw_sort TYPE slis_sortinfo_alv,
gw_layout TYPE slis_layout_alv,
""""""""""""""""""""""USER COMMAND STEP 1
it_event TYPE slis_t_event,
wa_event LIKE LINE OF it_event.

*DATA: xcolor TYPE slis_specialcol_alv.


*DATA : layout TYPE slis_layout_alv.
*layout-no_input = 'X'.
*layout-colwidth_optimize = 'X'.
*layout-coltab_fieldname = 'TCOLOR'.
*layout-info_fieldname = 'COLOR_LINE'.

DATA: ld_color(1) TYPE c.


gw_layout-zebra = 'X'.
gw_layout-colwidth_optimize = 'X'.
gw_layout-info_fieldname = 'LINE_COLOR'.
gw_layout-coltab_fieldname = 'TCOLOR'.

DATA : ls_plant TYPE matdoc,


ls_mat TYPE mara,
ls_loc TYPE matdoc.

DATA: yesterday TYPE sy-datum.

DATA : sys_dt TYPE sy-datum,


exp_diff TYPE i.

DATA : lv_gjahr TYPE bkpf-gjahr,


lv_monat TYPE bkpf-monat.

SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE TEXT-001.


SELECT-OPTIONS :
* plt_cd FOR matdoc-werks OBLIGATORY NO INTERVALS NO-EXTENSION, ""OBLIGATORY ,
plt_cd FOR ls_plant-werks OBLIGATORY,
mat_ty FOR ls_mat-mtart OBLIGATORY ,
stord FOR ls_loc-lgort ,
* OBLIGATORY ,
** OBLIGATORY NO INTERVALS NO-EXTENSION,
* matkl FOR mara-matkl ,
* matnr FOR matdoc-matnr ,
* charg FOR matdoc-charg ,
s_date FOR matdoc-budat OBLIGATORY.
* m_num FOR sy-index NO INTERVALS NO-EXTENSION,
* r_num FOR sy-index NO INTERVALS NO-EXTENSION.
PARAMETERS : mat_nm TYPE matdoc-matnr,
mat_ch TYPE matdoc-charg,
m_num TYPE i,
r_num TYPE i.
SELECTION-SCREEN END OF BLOCK a1.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-002.
PARAMETERS : p_rad1 RADIOBUTTON GROUP rad DEFAULT 'X', " With batch
p_rad2 RADIOBUTTON GROUP rad. "without batch
PARAMETERS p_chk AS CHECKBOX DEFAULT abap_true .

SELECTION-SCREEN END OF BLOCK b1.

yesterday = s_date-low - 1.

DATA(lv_where) = cl_shdb_seltab=>combine_seltabs(
it_named_seltabs = VALUE #(
( name = 'WERKS' dref = REF #( plt_cd[]
) )
( name = 'MTART' dref = REF #( mat_ty[]
) )
( name = 'LGORT' dref = REF
#( stord[] ) )
) iv_client_field = 'MANDT'
).

IF p_rad1 = 'X'.
CALL METHOD zcl_stk_state=>get_stk_data
EXPORTING
iv_where = lv_where
date1 = s_date-low
date2 = s_date-high
sys_date = sy-datum
yesterday = yesterday
IMPORTING
gt_final = gt_final.
IF gt_final IS INITIAL.
MESSAGE : 'No Data Found' TYPE 'E'.
ENDIF.
IF s_date-high <> sy-datum .
CALL FUNCTION 'FI_PERIOD_DETERMINE'
EXPORTING
i_budat = s_date-high
i_bukrs = '1000'
* I_RLDNR = ' '
i_periv = 'V3'
* I_GJAHR = 0000
* I_MONAT = 00
* X_XMO16 = ' '
IMPORTING
e_gjahr = lv_gjahr
e_monat = lv_monat
* E_POPER =
* EXCEPTIONS
* FISCAL_YEAR = 1
* PERIOD = 2
* PERIOD_VERSION = 3
* POSTING_PERIOD = 4
* SPECIAL_PERIOD = 5
* VERSION = 6
* POSTING_DATE = 7
* OTHERS = 8
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.

IF gt_final IS NOT INITIAL .

select * from MBV_MBEW


into table @data(gt_view_data)
for all entries in @gt_final
where MATNR = @gt_final-matnr
and BWKEY = @gt_final-werks.
IF m_num IS NOT INITIAL .
SELECT *
FROM @gt_final AS parent
WHERE mfg_days <= @m_num
INTO TABLE @DATA(gt_final_1).
SORT gt_final_1 BY werks matnr lgort .
ELSEIF r_num IS NOT INITIAL .
SELECT *
FROM @gt_final AS parent
WHERE grn_days <= @r_num
INTO TABLE @gt_final_1.
SORT gt_final_1 BY werks matnr lgort .
ELSEIF mat_nm IS NOT INITIAL .
SELECT *
FROM @gt_final AS parent
WHERE matnr IN ( @mat_nm )
INTO TABLE @gt_final_1.
SORT gt_final_1 BY werks matnr lgort .
ELSEIF mat_ch IS NOT INITIAL .
SELECT *
FROM @gt_final AS parent
WHERE charg IN ( @mat_ch )
INTO TABLE @gt_final_1.
SORT gt_final_1 BY werks matnr lgort .
* ELSEIF p_chk = 'X'.
* SELECT *
* FROM @gt_final AS parent
* WHERE closing > 0
* INTO TABLE @gt_final_1.
* SORT gt_final_1 BY werks matnr lgort .
ELSE.
SELECT *
FROM @gt_final AS parent
INTO TABLE @gt_final_1.
SORT gt_final_1 BY werks matnr lgort .
ENDIF.

ENDIF.

IF p_chk = 'X'.
SELECT *
FROM @gt_final_1 AS parent
WHERE closing > 0
INTO TABLE @gt_final_1.
SORT gt_final_1 BY werks matnr lgort .
ENDIF.

IF gt_final_1 IS NOT INITIAL.


SELECT matnr, spart
FROM mara
INTO TABLE @DATA(it_mara)
FOR ALL ENTRIES IN @gt_final_1
WHERE mtart EQ 'ZFIN' AND matnr = @gt_final_1-matnr.

IF it_mara IS NOT INITIAL.

SELECT matnr, knumh


FROM a304
INTO TABLE @DATA(it_a304)
FOR ALL ENTRIES IN @gt_final_1
WHERE matnr EQ @gt_final_1-matnr AND kschl EQ 'ZRTM'.

SORT it_a304 BY matnr knumh DESCENDING.


DELETE ADJACENT DUPLICATES FROM it_a304 COMPARING matnr knumh.

IF it_a304 IS NOT INITIAL.


SELECT kbetr,knumh
FROM konp
INTO TABLE @DATA(it_konp2)
FOR ALL ENTRIES IN @it_a304
WHERE knumh EQ @it_a304-knumh.
ENDIF.
SELECT a~matnr, a~charg ,a~knumh ,b~kbetr
FROM A901 AS a
LEFT OUTER JOIN konp AS b ON a~knumh = b~knumh
INTO TABLE @DATA(it_a004)
FOR ALL ENTRIES IN @gt_final_1
WHERE a~matnr = @gt_final_1-matnr
AND a~charg = @gt_final_1-charg
AND a~kschl = 'ZMRP' AND a~vkorg = '1000' AND vtweg EQ '10'.

SORT it_a004 BY matnr charg knumh DESCENDING.


DELETE ADJACENT DUPLICATES FROM it_a004 COMPARING matnr charg.

IF it_a004 IS NOT INITIAL.


SELECT kbetr, knumh
FROM konp
INTO TABLE @DATA(it_konp)
FOR ALL ENTRIES IN @it_a004
WHERE knumh EQ @it_a004-knumh.
ENDIF.

SELECT matnr, steuc, werks


FROM marc
INTO TABLE @DATA(it_marc)
FOR ALL ENTRIES IN @gt_final_1
WHERE matnr = @gt_final_1-matnr AND dispo IN ('008' ,'FGD') AND werks =
@gt_final_1-werks.

IF it_marc IS NOT INITIAL.


SELECT *
FROM a916
INTO TABLE @DATA(it_a916)
FOR ALL ENTRIES IN @it_marc
WHERE steuc EQ @it_marc-steuc
AND matnr EQ @it_marc-matnr
AND kschl EQ 'JOIG'
AND aland EQ 'IN'
AND wkreg EQ '27'
AND taxk1 EQ '0'
AND taxm1 EQ '0'.
SORT it_a916 BY steuc knumh DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_marc COMPARING matnr.

SELECT DISTINCT knumh , steuc


FROM a908
* INTO wa_a916-knumh
INTO TABLE @DATA(it_a916_1)
FOR ALL ENTRIES IN @it_marc
WHERE steuc = @it_marc-steuc
AND kschl = 'JOIG'
AND aland = 'IN'
AND wkreg = '27'
AND taxk1 = '0'
AND taxm1 = '0'.

SELECT kbetr,knumh,kschl
FROM konp
INTO TABLE @DATA(it_konp1)
FOR ALL ENTRIES IN @it_a916
WHERE knumh EQ @it_a916-knumh AND kschl EQ 'JOIG'.
ENDIF.

SELECT matnr, knumh


FROM a304
INTO TABLE @DATA(it_a304_1)
FOR ALL ENTRIES IN @gt_final_1
WHERE matnr EQ @gt_final_1-matnr AND kschl EQ 'ZSTM'.

IF it_a304_1 IS NOT INITIAL.


SELECT kbetr,knumh
FROM konp
INTO TABLE @DATA(it_konp3)
FOR ALL ENTRIES IN @it_a304_1
WHERE knumh EQ @it_a304_1-knumh.
ENDIF.
ENDIF.

* data : w_cdate TYPE sy-datum,


* w_ .

IF s_date-high+4(2) <> sy-datum+4(2) .


* SELECT matnr charg werks bwtar
* FROM mcha
* INTO TABLE gt_mcha
* FOR ALL ENTRIES IN gt_final_1
* WHERE matnr = gt_final_1-matnr
* AND charg = gt_final_1-charg
* AND werks = gt_final_1-werks.

select a~matnr a~charg a~werks a~bwtar b~KALN1


from mcha as a
left outer join MBEW as b on a~matnr = b~MATNR AND a~WERKS = b~bwkey AND
a~BWTAR = b~BWTAR
INTO TABLE gt_mcha
FOR ALL ENTRIES IN gt_final_1
where a~LVORM <> 'X'
and a~matnr = gt_final_1-matnr
AND a~charg = gt_final_1-charg
AND a~werks = gt_final_1-werks .

* SELECT KALNR , BDATJ , POPER , CURTP , VPRSV , STPRS , PVPRS


* FROM CKMLCR
* INTO TABLE @DATA(lt_RATE_NEW)
* FOR ALL ENTRIES IN @gt_mbew
* WHERE KALNR = @gt_mbew-kaln1
* AND CURTP = '10'
* AND BDATJ <= @lv_gjahr
* AND POPER <= @lv_monat .
* SORT lt_RATE_NEW BY BDATJ POPER DESCENDING .

CALL METHOD zcl_stk_rate=>get_rate


EXPORTING
* mat_cd = gt_mcha-matnr
* val_area = gt_mcha-werks
* val_type = gt_mcha-bwtar
gt_mcha = gt_mcha
year = lv_gjahr
month = lv_monat
IMPORTING
gt_final = lt_RATE
*
.

* SELECT matnr , bwkey , bwtar , lfgja , lfmon , vprsv , verpr , stprs


* FROM mbewh
* INTO TABLE @DATA(gt_rate)
* FOR ALL ENTRIES IN @gt_mcha
* WHERE matnr = @gt_mcha-matnr
* AND bwkey = @gt_mcha-werks
* AND bwtar = @gt_mcha-bwtar
* AND lfgja <= @lv_gjahr
** AND LFMON = @LV_MONAT.
* AND lfmon <= @lv_monat.
** SORT gt_RATE BY MATNR BWKEY .
* SORT gt_rate BY matnr ASCENDING bwkey ASCENDING bwtar lfgja lfmon
DESCENDING.
* DELETE ADJACENT DUPLICATES FROM lt_RATE COMPARING matnr bwkey bwtar lfgja .
ENDIF.
ENDIF.

*INCLUDE TYPE ZINCLD_TP_SP_VAL.

SELECT SINGLE knumh FROM a902


INTO @DATA(wa_knumh6)
WHERE kschl EQ 'ZSTM' AND vkorg EQ '1000' AND vtweg EQ '10'.

LOOP AT gt_final_1 INTO DATA(wa_final_1).


wa_final_new-mandt = wa_final_1-mandt .
wa_final_new-matnr = wa_final_1-matnr .
wa_final_new-maktx = wa_final_1-maktx .
wa_final_new-charg = wa_final_1-charg .
wa_final_new-werks = wa_final_1-werks .
wa_final_new-lgort = wa_final_1-lgort .
wa_final_new-meins = wa_final_1-meins .
wa_final_new-matkl = wa_final_1-matkl .
wa_final_new-spart = wa_final_1-spart .
wa_final_new-extwg = wa_final_1-extwg .
wa_final_new-labor = wa_final_1-labor .
wa_final_new-wrkst = wa_final_1-wrkst .
wa_final_new-medium = wa_final_1-medium .
wa_final_new-mtart = wa_final_1-mtart .
wa_final_new-opening = wa_final_1-opening .
wa_final_new-receipt = wa_final_1-receipt .
wa_final_new-issue = wa_final_1-issue .
wa_final_new-closing = wa_final_1-closing .
wa_final_new-plant_nm = wa_final_1-plant_nm .
wa_final_new-grn_no = wa_final_1-grn_no .
wa_final_new-grn_date = wa_final_1-grn_date .
wa_final_new-grn_days = wa_final_1-grn_days .
wa_final_new-pur_ord = wa_final_1-pur_ord .
wa_final_new-supp_cd = wa_final_1-supp_cd .
wa_final_new-last_issue_date = wa_final_1-last_issue_date.
wa_final_new-hold_days = wa_final_1-hold_days .
wa_final_new-shelf_life = wa_final_1-shelf_life .
wa_final_new-mfg_date = wa_final_1-mfg_date .
wa_final_new-mfg_days = wa_final_1-mfg_days .
wa_final_new-exp_date = wa_final_1-exp_date .
wa_final_new-hsn_no = wa_final_1-hsn_no .
wa_final_new-mat_grp = wa_final_1-mat_grp .
wa_final_new-storage_name = wa_final_1-storage_name .
wa_final_new-div_nm = wa_final_1-div_nm .
wa_final_new-mod_strdescr = wa_final_1-mod_strdescr .
wa_final_new-uom_cd = wa_final_1-uom_cd .
wa_final_new-uom_name = wa_final_1-uom_name .
wa_final_new-dosage_cd = wa_final_1-dosage_cd .
wa_final_new-dosage_descr = wa_final_1-dosage_descr .
wa_final_new-mat_ph = wa_final_1-mat_ph .
wa_final_new-mat_phdescr = wa_final_1-mat_phdescr .
wa_final_new-mat_og = wa_final_1-mat_og .
wa_final_new-mat_ogdescr = wa_final_1-mat_ogdescr .
wa_final_new-grp_nm = wa_final_1-grp_nm .
wa_final_new-mat_retest = wa_final_1-mat_retest .
wa_final_new-from_date = wa_final_1-from_date .
wa_final_new-to_date = wa_final_1-to_date .

IF wa_final_new-exp_date IS NOT INITIAL.


wa_final_new-exp_diff_1 = wa_final_new-exp_date - sy-datum .
ELSE.
wa_final_new-exp_diff_1 = 0.
ENDIF.

*IF wa_final_new-LAST_ISSUE_DATE <> '' .

READ TABLE gt_mcha INTO DATA(gs_mcha)


WITH KEY matnr = wa_final_1-matnr
charg = wa_final_1-charg
werks = wa_final_1-werks.
IF sy-subrc = 0.
wa_final_new-value_type = gs_mcha-bwtar.
* ENDIF.
* READ TABLE gt_mbew INTO DATA(gs_mbew)
* WITH KEY matnr = wa_final_1-matnr
* charg = wa_final_1-charg
* werks = wa_final_1-werks.
* IF sy-subrc = 0.
* IF s_date-high <> sy-datum .
IF s_date-high+4(2) <> sy-datum+4(2).

READ TABLE lt_RATE INTO DATA(gs_rate)


WITH KEY KALNR = gs_mcha-kaln1.
IF sy-subrc = 0.
IF gs_rate-vprsv = 'S' .
wa_final_new-rate = gs_rate-STPRS.
ELSEIF gs_rate-vprsv = 'V'.
wa_final_new-rate = gs_rate-PVPRS.
ENDIF.
* ELSE.
* wa_final_new-rate = wa_final_1-rate.
ENDIF.

* READ TABLE lt_RATE INTO DATA(gs_rate)


* WITH KEY matnr = gs_mcha-matnr
* bwkey = gs_mcha-werks
* bwtar = gs_mcha-bwtar
* lfgja = lv_gjahr
** lfmon = lv_monat
* .
** IF sy-subrc <> 4.
* IF sy-subrc = 0.
** IF gs_rate-lfmon = lv_monat AND gs_rate-lfgja = lv_gjahr.
** sy-subrc = 0.
* IF gs_rate-vprsv = 'S' .
* wa_final_new-rate = gs_rate-stprs.
* ELSEIF gs_rate-vprsv = 'V'.
* wa_final_new-rate = gs_rate-verpr.
* ENDIF.
** ENDIF.
* ELSE.
* wa_final_new-rate = wa_final_1-rate.
* ENDIF.
ENDIF.
ENDIF.
* IF wa_final_new-rate = 0.
* wa_final_new-rate = wa_final_1-rate.
* ENDIF.

READ TABLE it_mara INTO DATA(WA_mara)


WITH KEY matnr = wa_final_1-matnr.
IF sy-subrc <> 4.

READ TABLE it_marc INTO DATA(wa_marc)


WITH KEY matnr = wa_final_1-matnr
werks = wa_final_1-werks.

READ TABLE it_a004 INTO DATA(wa_a004)


WITH KEY matnr = wa_final_1-matnr
charg = wa_final_1-charg.
"wa_final_new-knumh = wa_a004-knumh.

wa_final_new-kbetr = wa_a004-kbetr. " MRP

READ TABLE it_a916 INTO DATA(wa_a916)


WITH KEY steuc = wa_marc-steuc matnr = wa_marc-matnr kschl = 'JOIG' aland =
'IN'
wkreg = '27' taxk1 = '0' taxm1 = '0'.
wa_final_new-knumh1 = wa_a916-knumh.

IF sy-subrc EQ 4.

* SELECT SINGLE knumh FROM a908 INTO wa_a916-knumh WHERE steuc = wa_marc-steuc
* AND kschl = 'JOIG'
* AND aland = 'IN'
* AND wkreg = '27'
* AND taxk1 = '0'
* AND taxm1 = '0'.
READ TABLE it_a916_1 INTO DATA(wa_a916_1)
WITH KEY steuc = wa_marc-steuc .

READ TABLE it_konp1 INTO DATA(wa_konp1) WITH KEY knumh = wa_a916_1-knumh


kschl = 'JOIG'.
wa_final_new-kbetr1 = wa_konp1-kbetr." / 10.
TRY.
wa_final_new-kbetr1 = wa_final_new-kbetr1 / 10.
CATCH cx_sy_zerodivide.
ENDTRY.

IF sy-subrc EQ 4.
SELECT SINGLE kbetr FROM konp INTO wa_konp1-kbetr WHERE knumh =
wa_a916_1-knumh AND kschl = 'JOIG'.
wa_final_new-kbetr1 = wa_konp1-kbetr." / 10.
TRY.
wa_final_new-kbetr1 = wa_final_new-kbetr1 / 10.
CATCH cx_sy_zerodivide.
ENDTRY.

ENDIF.
ENDIF.

READ TABLE it_konp1 INTO DATA(wa_konp11) WITH KEY knumh = wa_final_new-knumh1


kschl = 'JOIG'.
wa_final_new-kbetr1 = wa_konp11-kbetr." / 10.
TRY.
wa_final_new-kbetr1 = wa_final_new-kbetr1 / 10.
CATCH cx_sy_zerodivide.

ENDTRY.

IF sy-subrc EQ 4.
SELECT SINGLE kbetr FROM konp INTO wa_konp1-kbetr WHERE knumh =
wa_final_new-knumh1 AND kschl = 'JOIG'.
wa_final_new-kbetr1 = wa_konp1-kbetr." / 10.
TRY.
wa_final_new-kbetr1 = wa_final_new-kbetr1 / 10.
CATCH cx_sy_zerodivide.

ENDTRY.

ENDIF.

TRY.
wa_final_new-tp = wa_final_new-kbetr / ( 100 + wa_final_new-kbetr1 ) *
100.
CATCH cx_sy_zerodivide.

ENDTRY.

READ TABLE it_a304 INTO DATA(wa_a304) WITH KEY matnr = wa_final_1-matnr.


IF sy-subrc = 0.
wa_final_new-knumh2 = wa_a304-knumh.
ENDIF.

READ TABLE it_konp2 INTO DATA(wa_konp2) WITH KEY knumh = wa_final_new-knumh2.


TRY.
wa_final_new-kbetr2 = wa_konp2-kbetr / 10.
CATCH cx_sy_zerodivide.
ENDTRY.

IF wa_final_new-kbetr2 = '16.00'.
TRY.
wa_final_new-tp = wa_final_new-tp - ( wa_final_new-tp * 16 / 100 ).
CATCH cx_sy_zerodivide.
ENDTRY.

ELSEIF wa_final_new-kbetr2 NE '16.00'.


TRY.
wa_final_new-tp = wa_final_new-tp - ( wa_final_new-tp * 20 / 100 ).
CATCH cx_sy_zerodivide.
ENDTRY.

ENDIF.

READ TABLE it_a304_1 INTO DATA(wa_a304_1) WITH KEY matnr = wa_final_1-matnr.


IF sy-subrc EQ 0.
wa_final_new-knumh3 = wa_a304_1-knumh.
ENDIF.

IF wa_final_new-tp IS NOT INITIAL.


IF wa_final_new-knumh3 IS INITIAL.

SELECT SINGLE kbetr FROM konp


INTO @DATA(wa_kbetr6) WHERE knumh EQ @wa_knumh6.
IF sy-subrc EQ 0.
TRY.
wa_final_new-kbetr6 = wa_kbetr6 / 10.
wa_kbetr6 = wa_final_new-kbetr6 * - 1.
wa_final_new-sp = wa_final_new-tp - ( wa_final_new-tp *
wa_kbetr6 / 100 ).
CATCH cx_sy_zerodivide.
ENDTRY.

ENDIF.
ENDIF.
ENDIF.

READ TABLE it_konp3 INTO DATA(wa_konp3) WITH KEY knumh = wa_final_new-knumh3.


IF sy-subrc EQ 0.
TRY.
wa_final_new-kbetr3 = wa_konp3-kbetr / 10.
CATCH cx_sy_zerodivide.
ENDTRY.

ENDIF.
IF wa_final_new-kbetr3 EQ '8.00-'.
TRY.
wa_final_new-sp = wa_final_new-tp - ( wa_final_new-tp * 8 / 100 ).
CATCH cx_sy_zerodivide.
ENDTRY.
ENDIF.
TRY.
wa_final_new-cp = wa_final_new-sp - ( wa_final_new-sp * 10 / 100 ).
CATCH cx_sy_zerodivide.

ENDTRY.
ENDIF.
IF wa_final_new-exp_diff_1 > 0 AND wa_final_new-exp_diff_1 <= 30 .
CLEAR xcolor.
xcolor-fieldname = 'EXP_DATE'.
xcolor-color-col = '3'.
xcolor-color-int = '1'. " Intensified on/off
xcolor-color-inv = '1'.
APPEND xcolor TO wa_final_new-tcolor.
ELSEIF wa_final_new-exp_diff_1 < 0 .
CLEAR xcolor.
xcolor-fieldname = 'EXP_DATE'.
xcolor-color-col = '6'.
xcolor-color-int = '1'. " Intensified on/off
xcolor-color-inv = '1'.
APPEND xcolor TO wa_final_new-tcolor.
ENDIF.

IF wa_final_new-closing IS NOT INITIAL AND wa_final_new-rate IS NOT INITIAL .


TRY.
wa_final_new-mat_rate = wa_final_new-closing * wa_final_new-rate .
CATCH cx_sy_zerodivide.

ENDTRY.

ELSE.
wa_final_new-mat_rate = 0 .
ENDIF.

* SUBMIT ZPRICE_LIST_REGISTER.
** SUBMIT ZPRICE_LIST_REGISTER WITH P_WERKS = wa_final_new-WERKS AND p_matnr =
wa_final_new- AND RETURN.

APPEND wa_final_new TO gt_final_new.


CLEAR : wa_final_new , gs_mcha , gs_rate , wa_marc , wa_a004 , wa_a916
, wa_a916_1 , wa_konp1 , wa_konp11 , wa_a304 , wa_konp2 , wa_a304_1 ,
wa_konp3 .

ENDLOOP.
*-- Perform for initializing Fieldcatalog
PERFORM init_fieldcatalog.
*-- Perform to Display the Alv report.
PERFORM call_alv.
ELSE.
CALL METHOD zcl_stk_2=>get_stk_data2
EXPORTING
iv_where = lv_where
date1 = s_date-low
date2 = s_date-high
sys_date = sy-datum
yesterday = yesterday
mandt = sy-mandt
IMPORTING
gwt_final = gwt_final.
IF gwt_final IS INITIAL.
MESSAGE : 'No Data Found' TYPE 'E'.
ENDIF.

IF gwt_final IS NOT INITIAL .

IF mat_nm IS NOT INITIAL .


SELECT *
FROM @gwt_final AS parent
WHERE matnr IN ( @mat_nm )
INTO TABLE @DATA(gwt_final_1).
* ELSEIF p_chk = 'X'.
* SELECT *
* FROM @gwt_final AS parent
* WHERE closing > 0
* INTO TABLE @gwt_final_1.
ELSE.
SELECT *
FROM @gwt_final AS parent
INTO TABLE @gwt_final_1.
ENDIF.

ENDIF.

IF p_chk = 'X'.
SELECT *
FROM @gwt_final_1 AS parent
WHERE closing > 0
INTO TABLE @gwt_final_1.
SORT gwt_final_1 BY werks matnr lgort .
ENDIF.

LOOP AT gwt_final_1 INTO DATA(wa_final_11).


gwt_wa_final_new-mandt = wa_final_11-mandt .
gwt_wa_final_new-matnr = wa_final_11-matnr .
gwt_wa_final_new-maktx = wa_final_11-maktx .
gwt_wa_final_new-werks = wa_final_11-werks .
gwt_wa_final_new-plant_nm = wa_final_11-plant_nm .
gwt_wa_final_new-lgort = wa_final_11-lgort .
gwt_wa_final_new-storage_name = wa_final_11-storage_name .
gwt_wa_final_new-meins = wa_final_11-meins .
gwt_wa_final_new-matkl = wa_final_11-matkl .
gwt_wa_final_new-mat_grp = wa_final_11-mat_grp .
gwt_wa_final_new-grp_nm = wa_final_11-grp_nm .
gwt_wa_final_new-spart = wa_final_11-spart .
gwt_wa_final_new-extwg = wa_final_11-extwg .
gwt_wa_final_new-labor = wa_final_11-labor .
gwt_wa_final_new-wrkst = wa_final_11-wrkst .
gwt_wa_final_new-medium = wa_final_11-medium .
gwt_wa_final_new-mtart = wa_final_11-mtart .
gwt_wa_final_new-wbs = wa_final_11-wbs .
gwt_wa_final_new-opening = wa_final_11-opening .
gwt_wa_final_new-receipt = wa_final_11-receipt .
gwt_wa_final_new-issue = wa_final_11-issue .
gwt_wa_final_new-closing = wa_final_11-closing .
gwt_wa_final_new-rate = wa_final_11-rate .
gwt_wa_final_new-clg_val = wa_final_11-clg_val .

APPEND gwt_wa_final_new TO gwt_final_new .


CLEAR gwt_wa_final_new.
ENDLOOP.

PERFORM build_fcat.
PERFORM display.
ENDIF.

FORM fill_field USING p_pos


p_tab_field_name
p_ref_field_table
p_short_text
p_long_text
p_hotspot
p_emphasize
p_key.

DATA: ls_fieldcat TYPE slis_fieldcat_alv.


CLEAR ls_fieldcat.

ls_fieldcat-col_pos = p_pos.
ls_fieldcat-fieldname = p_tab_field_name.
ls_fieldcat-tabname = p_ref_field_table.
ls_fieldcat-seltext_m = p_short_text.
ls_fieldcat-seltext_l = p_long_text.
ls_fieldcat-hotspot = p_hotspot. """"""""""""""""""""""USER COMMAND STEP 3
ls_fieldcat-emphasize = p_emphasize.
ls_fieldcat-key = p_key.

APPEND ls_fieldcat TO it_fieldcat.

ENDFORM.
FORM init_fieldcatalog .
DATA : lv_pos TYPE sy-cucol VALUE 0.
""""""""""""""""""""""USER COMMAND STEP 2
wa_event-name = 'USER_COMMAND'.
wa_event-form = 'UC'.
APPEND wa_event TO it_event.
CLEAR wa_event.

lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MATNR' 'GT_FINAL_NEW' 'MAT CD' 'MATERIAL CODE'
'' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MAKTX' 'GT_FINAL_NEW' 'MAT NAME' 'MATERIAL NAME'
'' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'CHARG' 'GT_FINAL_NEW' 'BATCH NO' 'BATCH' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'WERKS' 'GT_FINAL_NEW' 'PLANT CD' 'PLANT' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'PLANT_NM' 'GT_FINAL_NEW' 'PLANT NAME' 'PLANT
NAME' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'LGORT' 'GT_FINAL_NEW' 'STORAGE CD' 'SLOC' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'STORAGE_NAME' 'GT_FINAL_NEW' 'STORAGE NAME'
'SLOC NAME' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MEINS' 'GT_FINAL_NEW' 'UNIT' 'UNIT' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MATKL' 'GT_FINAL_NEW' 'MAT GRP CD ' 'MATERIAL
GROUP' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MAT_GRP' 'GT_FINAL_NEW' 'MAT GRP NAME' 'MATERIAL
GRP NAME' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'SPART' 'GT_FINAL_NEW' 'DIV CD' 'DIVISION CODE'
'' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'DIV_NM' 'GT_FINAL_NEW' 'DIV NAME' 'DIVISION
NAME' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'EXTWG' 'GT_FINAL_NEW' 'EXT MAT GRP' 'EXTERNAL
MATERIAL GROUP' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'LABOR' 'GT_FINAL_NEW' 'LABOR' 'LABORATORY/DESIGN
OFFICE' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'WRKST' 'GT_FINAL_NEW' 'WRKST' 'BASIC MATERIAL'
'' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MEDIUM' 'GT_FINAL_NEW' 'MEDIUM' 'TRANSPORT
MEDIUM' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MTART' 'GT_FINAL_NEW' 'MAT TYPE' 'MATERIAL TYPE'
'' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'OPENING' 'GT_FINAL_NEW' 'OPENING' 'OPENING' ''
'' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'RECEIPT' 'GT_FINAL_NEW' 'RECEIPT' 'RECEIPT' ''
'' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'ISSUE' 'GT_FINAL_NEW' 'ISSUE' 'ISSUE' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'CLOSING' 'GT_FINAL_NEW' 'CLOSING' 'CLOSING' ''
'' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'GRN_NO' 'GT_FINAL_NEW' 'GRN NO' 'MATERIAL DOC
NO' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'GRN_DATE' 'GT_FINAL_NEW' 'GRN DATE' 'MATERIAL
DOC NAME' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'GRN_DAYS' 'GT_FINAL_NEW' 'AS PER GRN DATE' 'AS
PER GRN DATE' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'PUR_ORD' 'GT_FINAL_NEW' 'PUR ORDER' 'PO NUMBER'
'' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'SUPP_CD' 'GT_FINAL_NEW' 'SUPP CD' 'SUPPLIER' ''
'' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'HOLD_DAYS' 'GT_FINAL_NEW' 'HOLD DAYS' 'HOLD
DAYS' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'SHELF_LIFE' 'GT_FINAL_NEW' 'SHELF_LIFE' 'SHELF
LIFE' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MFG_DATE' 'GT_FINAL_NEW' 'MFG DATE' 'MFG DATE'
'' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MFG_DAYS' 'GT_FINAL_NEW' 'AS PER MFG DATE' 'AS
PER MFG DATE' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'EXP_DATE' 'GT_FINAL_NEW' 'EXP DATE' 'EXPIRY
DATE' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'HSN_NO' 'GT_FINAL_NEW' 'HSN NO' 'HSN NO' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MOD_STRDESCR' 'GT_FINAL_NEW' 'MOD_STRDESCR' ''
'' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'UOM_CD' 'GT_FINAL_NEW' 'UOM_CD' '' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'UOM_NAME' 'GT_FINAL_NEW' 'UOM_NAME' '' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'DOSAGE_CD' 'GT_FINAL_NEW' 'DOSAGE_CD' '' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'DOSAGE_DESCR' 'GT_FINAL_NEW' 'DOSAGE_DESCR' ''
'' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MAT_PH' 'GT_FINAL_NEW' 'MAT_PH' '' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MAT_PHDESCR' 'GT_FINAL_NEW' 'MAT_PHDESCR' '' ''
'' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MAT_OG' 'GT_FINAL_NEW' 'MAT_OG' '' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MAT_OGDESCR' 'GT_FINAL_NEW' 'MAT_OGDESCR' '' ''
'' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'GRP_NM' 'GT_FINAL_NEW' 'GRP_NM' '' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MAT_RETEST' 'GT_FINAL_NEW' 'MAT_RETEST' '' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'FROM_DATE' 'GT_FINAL_NEW' 'FROM DATE' '' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'TO_DATE' 'GT_FINAL_NEW' 'TO DATE' '' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'RATE' 'GT_FINAL_NEW' 'MAT. RATE' '' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MAT_RATE' 'GT_FINAL_NEW' 'MAT. VALUE' '' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'KBETR' 'GT_FINAL_NEW' 'MRP' '' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'TP' 'GT_FINAL_NEW' 'TP' '' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'SP' 'GT_FINAL_NEW' 'SP' '' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'CP' 'GT_FINAL_NEW' 'CP' '' '' '' ''.

lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'VALUE_TYPE' 'GT_FINAL_NEW' 'VALUATION TYPE' ''
'' '' ''.

ENDFORM.
FORM call_alv .
gw_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-cprog
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout = gw_layout
it_fieldcat = it_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* O_PREVIOUS_SRAL_HANDLER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_final_new
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form build_fcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM build_fcat .
DATA : lv_pos TYPE sy-cucol VALUE 0.
""""""""""""""""""""""USER COMMAND STEP 2
wa_event-name = 'USER_COMMAND'.
wa_event-form = 'UC'.
APPEND wa_event TO it_event.
CLEAR wa_event.

lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MATNR' 'GWT_FINAL_NEW' '' 'Material Code' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MAKTX' 'GWT_FINAL_NEW' '' 'Material Name' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'WERKS' 'GWT_FINAL_NEW' '' 'Plant Code' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'PLANT_NM' 'GWT_FINAL_NEW' '' 'Plant Name' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'LGORT' 'GWT_FINAL_NEW' '' 'Sloc' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'STORAGE_NAME' 'GWT_FINAL_NEW' '' 'Sloc Name' ''
'' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MEINS' 'GWT_FINAL_NEW' '' 'Unit' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MATKL' 'GWT_FINAL_NEW' '' 'Material Group' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MAT_GRP' 'GWT_FINAL_NEW' '' 'Mat grp name' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'GRP_NM' 'GWT_FINAL_NEW' '' 'Material Group name'
'' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'SPART' 'GWT_FINAL_NEW' '' 'Division' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'EXTWG' 'GWT_FINAL_NEW' '' 'External Material
Group' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'LABOR' 'GWT_FINAL_NEW' '' 'Laboratory/design
office' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'WRKST' 'GWT_FINAL_NEW' '' 'Basic Material' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MEDIUM' 'GWT_FINAL_NEW' '' 'Medium' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'MTART' 'GWT_FINAL_NEW' '' 'Material Type' '' ''
''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'WBS' 'GWT_FINAL_NEW' '' 'WBS Element' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'OPENING' 'GWT_FINAL_NEW' '' 'Opening' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'RECEIPT' 'GWT_FINAL_NEW' '' 'Receipt' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'ISSUE' 'GWT_FINAL_NEW' '' 'Issue' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'CLOSING' 'GWT_FINAL_NEW' '' 'Closing' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'RATE' 'GWT_FINAL_NEW' '' 'Rate' '' '' ''.
lv_pos = lv_pos + 1.
PERFORM fill_field USING lv_pos 'CLG_VAL' 'GWT_FINAL_NEW' '' 'Closing value' ''
'' ''.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form display
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM display .
gw_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-cprog
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout = gw_layout
it_fieldcat = it_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = 'X'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* O_PREVIOUS_SRAL_HANDLER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gwt_final
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.

***********************************************************************************
*****************************************
*******************************************zcl_stk_state=>get_stk_data*************
*****************************************
CLASS zcl_stk_state DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .

PUBLIC SECTION.
INTERFACES :IF_AMDP_MARKER_HDB.
TYPES : BEGIN OF ty_final,
mandt TYPE matdoc-mandt,
MATNR TYPE MATDOC-matbf,
MAKTX TYPE MAKT-maktx,
CHARG TYPE MATDOC-charg,
WERKS TYPE MATDOC-werks,
LGORT TYPE MATDOC-lgort,
MEINS TYPE MARA-meins,
MATKL TYPE MARA-matkl ,
spart TYPE MARA-spart,
extwg TYPE MARA-extwg,
labor TYPE MARA-labor,
wrkst TYPE MARA-wrkst,
medium TYPE MARA-medium,
mtart TYPE MARA-mtart,
OPENING TYPE Mseg-menge,
RECEIPT TYPE Mseg-menge,
ISSUE TYPE Mseg-menge,
CLOSING TYPE Mseg-menge,
PLANT_NM TYPE t001w-name1 ,
GRN_NO TYPE MSEG-mblnr,
GRN_DATE TYPE MSEG-budat_mkpf,
GRN_DAYS TYPE NUM8,
PUR_ORD TYPE MSEG-ebeln,
SUPP_CD TYPE MSEG-lifnr,
LAST_ISSUE_DATE TYPE MATDOC-budat,
HOLD_DAYS TYPE NUM8,
SHELF_LIFE TYPE CHAR20,
MFG_DATE TYPE mch1-hsdat,
MFG_DAYS TYPE NUM8,
EXP_DATE TYPE mch1-vfdat,
HSN_NO TYPE MARC-steuc,
MAT_GRP TYPE t023t-wgbez,
STORAGE_NAME TYPE t001l-lgobe ,
DIV_NM TYPE tspat-vtext,
mod_strdescr TYPE t372m_T-medkxt ,
uom_cd TYPE mvke-mvgr5 ,
uom_name TYPE TVM5T-bezei,
dosage_cd TYPE mvke-mvgr4,
dosage_descr TYPE TVM4T-bezei ,
mat_ph TYPE MVKE-prodh,
mat_phdescr TYPE char50,
mat_og TYPE MBEW-hrkft,
prod_cost_no TYPE MBEW-KALN1,
mat_ogdescr TYPE tkkh2-hrktx,
GRP_NM TYPE t134t-mtbez,
MAT_RETEST TYPE MCHA-qndat ,
from_date TYPE sy-datum ,
to_date TYPE sy-datum,
LINE_COLOR TYPE CHAR4,
rate TYPE mbew-verpr,
END OF ty_final.

TYPES : lt_final TYPE TABLE OF ty_final.


TYPES : lt_final_1 TYPE TABLE OF ty_final.

CLASS-METHODS get_stk_data
IMPORTING
VALUE(IV_WHERE) TYPE STRING
* VALUE(MAT_TY1) TYPE MARA-MTART
* VALUE(STORD1) TYPE MATDOC-lgort
VALUE(DATE1) TYPE MATDOC-budat
VALUE(DATE2) TYPE MATDOC-budat
VALUE(SYS_DATE) TYPE sy-datum
VALUE(yesterday) TYPE sy-datum
EXPORTING
VALUE(gt_final) TYPE ZTT_STK.

PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.

CLASS zcl_stk_state IMPLEMENTATION.


METHOD get_stk_data
BY DATABASE PROCEDURE
FOR HDB LANGUAGE SQLSCRIPT
* OPTIONS READ-ONLY
USING t023t t001l tspat
t372m_T
t134t MCHA
MATDOC MAKT mara t001w mch1 marc mvke tvm4t t179t tvm5t mbew tkkh2 MCHA.

gt_final1 = SELECT A.MANDT,A.MATNR, A.MAKTX, A.CHARG, A.WERKS,


A.LGORT,A.MEINS,A.MATKL,A.spart,
A.extwg,A.labor,A.wrkst,A.medium,A.mtart,A.OPENING, A.RECEIPT,
A.ISSUE ,A.CLOSING
,B.NAME1 AS PLANT_NM,CC.mblnr AS GRN_NO,CC.budat AS GRN_DATE,
( DAYS_BETWEEN ( CURRENT_DATE , CC.budat )) * -1 AS GRN_DAYS,
CC.ebeln AS PUR_ORD,CC.LIFNR AS SUPP_CD,
CC1.budat AS LAST_ISSUE_DATE,
( DAYS_BETWEEN ( CURRENT_DATE , CC.budat )) * -1 AS HOLD_DAYS,
A.MHDHB AS SHELF_LIFE ,
D.hsdat AS MFG_DATE ,
( DAYS_BETWEEN ( CURRENT_DATE , D.hsdat )) * -1 AS MFG_DAYS,
D.vfdat AS EXP_DATE,E.steuc AS HSN_NO,
(SELECT wgbez FROM t023t WHERE A.matkl = matkl AND spras = 'E'
AND mandt = '100') AS MAT_GRP,
(SELECT lgobe FROM t001l WHERE A.WERKS = WERKS AND A.LGORT =
LGORT AND mandt = '100') AS STORAGE_NAME,
(SELECT vtext FROM tspat WHERE A.spart = spart AND spras = 'E'
AND mandt = '100') AS DIV_NM,
P.medkxt AS mod_strdescr,
I.mvgr5 AS uom_cd,H.bezei AS uom_name,I.mvgr4 AS
dosage_cd,J.bezei AS dosage_descr,
I.prodh AS mat_ph,K.vtext AS mat_phdescr,
L.hrkft AS mat_og,L.KALN1 as prod_cost_no,M.hrktx AS
mat_ogdescr,
(SELECT mtbez FROM t134t WHERE A.mtart = mtart AND spras = 'E'
AND mandt = '100') AS GRP_NM,
(SELECT max(QNDAT) as QNDAT FROM MCHA WHERE a.matnr = MATNR AND
A.CHARG = CHARG AND A.WERKS = WERKS ) AS MAT_RETEST,
date1 as from_date, date2 as to_date, '' as LINE_COLOR,
--L.verpr as rate
--( case when a.mtart = 'ZFIN' and substr( A.WERKS,1,2) = '10'
THEN L.STPRS ELSE L.verpr END) as rate
( case when L.VPRSV = 'S' THEN L.STPRS ELSE L.verpr END) as
rate
FROM (
SELECT X.MANDT, x.matnr, I.MAKTX, X.CHARG, X.WERKS,
X.LGORT,M.MEINS,M.MATKL,M.spart,M.extwg,M.labor,M.wrkst,
M.medium,M.mtart,M.MHDHB,
SUM(X.OPENING) AS OPENING, SUM(X.RECEIPT) AS RECEIPT,
SUM(X.ISSUE) AS ISSUE ,
(SUM(X.OPENING) + SUM(X.RECEIPT) - SUM(X.ISSUE)) AS CLOSING
FROM (
SELECT MANDT,MATBF as matnr, CHARG, WERKS, LGORT,
SUM(TO_NUMBER(STOCK_QTY)) AS OPENING, 0 AS RECEIPT,
0 AS ISSUE
FROM MATDOC
WHERE BUDAT <= yesterday AND TRIM(CHARG) <> ''
GROUP BY MANDT,MATBF, CHARG, WERKS, LGORT, HSDAT,
VFDAT, MEINS
UNION ALL
SELECT MANDT,MATBF as matnr, CHARG, WERKS, LGORT,
0 AS OPENING,
sum(CASE WHEN (TO_NUMBER(STOCK_QTY))>0 THEN
(TO_NUMBER(STOCK_QTY)) ELSE 0 END) AS RECEIPT,
abs(sum(CASE WHEN (TO_NUMBER(STOCK_QTY))<0 THEN
(TO_NUMBER(STOCK_QTY)) ELSE 0 END)) AS ISSUE
FROM MATDOC
WHERE
BUDAT >= DATE1 AND BUDAT <= DATE2
AND
TRIM(CHARG) <>'' and bwart not in ('341','342')
GROUP BY MANDT,MATBF, CHARG, WERKS, LGORT, HSDAT,
VFDAT, MEINS
ORDER BY 3,4
) X
LEFT OUTER JOIN MAKT I ON x.matnr = I.MATNR AND I.SPRAS =
'E'
LEFT OUTER join mara M on m.matnr = x.matnr
INNER JOIN mcha AS DD ON X.matnr = DD.MATNR AND X.WERKS =
DD.WERKS AND X.CHARG = DD.CHARG and DD.LVORM <> 'X'
* where
* X.WERKS = :PLT_CD1 AND
* m.MTART in (:MAT_TY1)
* AND X.LGORT IN (:STORD1 )
* AND M.MATKL IN ( :MATGRP1 )
* AND x.matnr IN ( :MATCD1 ) AND X.CHARG IN ( :BATCH1 )
* M.matkl IN ( :MAT_TY1 )
* in ( :PLT_CD1 , PLT_CD2)
* and
* x.matnr LIKE 'FG%'
GROUP BY x.mandt,x.matnr, X.CHARG, X.WERKS,
X.LGORT,M.MEINS,M.MATKL,M.spart,
M.extwg,M.labor,M.wrkst,M.medium,M.mtart,M.MHDHB,I.MAKTX
HAVING (SUM(X.OPENING) + SUM(X.RECEIPT) - SUM(X.ISSUE)) >=
0
ORDER BY 5,1,4
) AS A
INNER JOIN t001w AS B ON A.WERKS = B.WERKS AND B.mandt = '100'
LEFT OUTER JOIN ( SELECT
ROW_NUMBER() OVER(PARTITION BY MATBF,CHARG,WERKS ORDER BY mblnr) AS
NUM,
budat,ebeln ,LIFNR ,mblnr,MATBF,CHARG,WERKS FROM MATDOC WHERE BWART
= '101' ) AS CC ON
a.matnr = CC.MATBF AND A.CHARG = CC.CHARG AND A.WERKS = CC.WERKS
AND CC.NUM = 1

LEFT OUTER JOIN ( SELECT


ROW_NUMBER() OVER(PARTITION BY MATBF,CHARG,WERKS ORDER BY BUDAT
DESC, MBLNR DESC ) AS NUM,
budat,ebeln ,LIFNR ,mblnr,MATBF,CHARG,WERKS FROM MATDOC WHERE
SHKZG = 'H' ) AS CC1 ON
a.matnr = CC1.MATBF AND A.CHARG = CC1.CHARG AND A.WERKS = CC1.WERKS
AND CC1.NUM = 1

LEFT OUTER JOIN mch1 AS D ON a.matnr = D.MATNR AND A.CHARG =


D.CHARG
LEFT OUTER JOIN marc AS E ON a.matnr = E.MATNR AND A.WERKS =
E.WERKS
LEFT OUTER JOIN mvke AS I ON a.matnr = I.MATNR AND I.VTWEG = '10'
and i.vkorg = '1000'
LEFT OUTER JOIN tvm4t AS J ON I.mvgr4 = J.mvgr4 AND J.spras = 'E'
AND j.mandt = '100'
LEFT OUTER JOIN t179t AS K ON I.prodh = K.prodh AND K.spras = 'E'
AND k.mandt = '100'
LEFT OUTER JOIN tvm5t AS H ON I.mvgr5 = H.mvgr5 AND H.spras = 'E'
AND h.mandt = '100'
LEFT OUTER JOIN mbew AS L ON a.matnr = L.MATNR AND A.WERKS =
L.bwkey AND L.BWTAR = ''
LEFT OUTER JOIN tkkh2 AS M ON L.hrkft = M.hrkft AND M.spras = 'E'
AND m.mandt = '100'
LEFT OUTER JOIN t372m_T AS P ON A.medium = P.mediu AND P.spras =
'E' AND P.mandt = '100'
where (A.OPENING + A.RECEIPT + A.ISSUE ) > 0
* WHERE mfg_days <= :m_num AND grn_days <= :r_num
;
gt_final = APPLY_FILTER (:gt_final1, :IV_WHERE);

ENDMETHOD.

ENDCLASS.

***********************************************************************************
*****************************************
*******************************************zcl_stk_rate=>get_rate******************
*****************************************
CLASS zcl_stk_rate DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .

PUBLIC SECTION.
INTERFACES :IF_AMDP_MARKER_HDB.

TYPES : BEGIN OF ty_final,


KALNR TYPE CKMLCR-KALNR,
BDATJ TYPE CKMLCR-BDATJ,
POPER TYPE CKMLCR-POPER,
CURTP TYPE CKMLCR-CURTP,
VPRSV TYPE CKMLCR-VPRSV,
STPRS TYPE CKMLCR-STPRS,
PVPRS TYPE CKMLCR-PVPRS,
END OF ty_final.
TYPES : lt_RATE TYPE TABLE OF ty_final.

TYPES : gt_mcha TYPE TABLE OF ZST_RATE_VAL .

CLASS-METHODS get_RATE
IMPORTING

* VALUE(MAT_TY1) TYPE MARA-MTART


* VALUE(STORD1) TYPE MATDOC-lgort
* VALUE(MAT_CD) TYPE mbewh-matnr
* VALUE(VAL_AREA) TYPE mbewh-bwkey
* VALUE(VAL_TYPE) TYPE mbewh-bwtar
VALUE(gt_mcha) TYPE gt_mcha
VALUE(YEAR) TYPE bkpf-gjahr
VALUE(MONTH) TYPE bkpf-monat
EXPORTING
VALUE(gt_final) TYPE lt_RATE.

PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.

CLASS zcl_stk_rate IMPLEMENTATION.


METHOD get_RATE
BY DATABASE PROCEDURE
FOR HDB LANGUAGE SQLSCRIPT
* OPTIONS READ-ONLY
USING CKMLCR .

gt_final = select KALNR , BDATJ , POPER , CURTP , VPRSV , STPRS , PVPRS


from (
SELECT a.KALNR , a.BDATJ , a.POPER , concat(a.BDATJ,a.POPER ) as
yearmon ,a.CURTP , a.VPRSV , a.STPRS , a.PVPRS
FROM CKMLCR AS a
inner join :gt_mcha as b on a.KALNR = b.kaln1
WHERE a.CURTP = '10'
AND a.BDATJ <= :YEAR
AND a.POPER <= :MONTH
)
order by yearmon desc ;

ENDMETHOD.
ENDCLASS.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy