0% found this document useful (0 votes)
259 views18 pages

Migo Code Badi

The document outlines an ABAP method for validating sales order stock assignments during MIGO transactions. It includes various data declarations, field assignments, and logic for checking item quantities and material differences. The method handles error messages and conditions based on movement types and stock validation rules.

Uploaded by

Bharat Bhushan
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)
259 views18 pages

Migo Code Badi

The document outlines an ABAP method for validating sales order stock assignments during MIGO transactions. It includes various data declarations, field assignments, and logic for checking item quantities and material differences. The method handles error messages and conditions based on movement types and stock validation rules.

Uploaded by

Bharat Bhushan
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/ 18

METHOD if_ex_mb_migo_badi~check_item.

********* Begin of addition by anandp 15432:MM:MIGO Sales order stock assignment


validations
INCLUDE mm_messages_mac. "useful macros for message handling
FIELD-SYMBOLS: <fs_action> TYPE refdoc,
<fs_action2> TYPE refdoc,
<fs_bwart> TYPE bwart,
<fs_sobkz> TYPE sobkz.

DATA : gs_goitem TYPE goitem,


gt_item TYPE STANDARD TABLE OF goitem.

DATA: lo_obj TYPE REF TO object.


DATA: ld_class TYPE string,
ld_method TYPE string.

FIELD-SYMBOLS:
<lo_kernel> TYPE any,
<fs_goitem> TYPE goitem,
<fs_godynpro> TYPE godynpro.
DATA:
ls_goitem TYPE goitem,
lt_goitems TYPE STANDARD TABLE OF goitem,
ld_line TYPE sytabix,
ld_tabix TYPE sytabix,
lx_dep_tables TYPE abap_bool,
lv_item(6).
DATA: lt_tab TYPE esp1_message_tab_type.
DATA: ls_tab TYPE esp1_message_wa_type,
lv_msg TYPE string VALUE 'From & Destination materials are different',
lv_msg2 TYPE string,
lv_msg3 TYPE string.
ASSIGN ('(SAPLMIGO)GODYNPRO-ACTION') TO <fs_action>.
ASSIGN ('(SAPLMIGO)GODYNPRO-REFDOC') TO <fs_action2>.

ASSIGN ('(SAPLMIGO)GODEFAULT_TV-BWART') TO <fs_bwart>.


ASSIGN ('(SAPLMIGO)GODEFAULT_TV-SOBKZ') TO <fs_sobkz>.

TYPES : BEGIN OF ty_vbap,


vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
matnr TYPE vbap-matnr,
kwmeng TYPE vbap-kwmeng,
END OF ty_vbap,
BEGIN OF ty_vbfa,
ruuid TYPE vbfa-ruuid,
vbelv TYPE vbfa-vbelv,
posnv TYPE vbfa-posnv,
vbeln TYPE vbfa-vbeln,
posnn TYPE vbfa-posnn,
END OF ty_vbfa,
BEGIN OF ty_lips,
vbeln TYPE lips-vbeln,
posnr TYPE lips-posnr,
lfimg TYPE lips-lfimg,
wbsta TYPE lips-wbsta,
END OF ty_lips,
BEGIN OF ty_mska,
matnr TYPE mska-matnr,
werks TYPE mska-werks,
lgort TYPE mska-lgort,
charg TYPE mska-charg,
sobkz TYPE mska-sobkz,
vbeln TYPE mska-vbeln,
posnr TYPE mska-posnr,
kalab TYPE mska-kalab,

END OF ty_mska.

DATA : gt_vbap TYPE STANDARD TABLE OF ty_vbap,


gs_vbap TYPE ty_vbap,
gt_vbap_mat TYPE STANDARD TABLE OF ty_vbap,
gs_vbap_mat TYPE ty_vbap,
gt_vbfa TYPE STANDARD TABLE OF ty_vbfa,
gs_vbfa TYPE ty_vbfa,
gt_lips TYPE STANDARD TABLE OF ty_lips,
gs_lips TYPE ty_lips,
gt_mska TYPE STANDARD TABLE OF ty_mska,
gs_mska TYPE ty_mska,
gv_kwmeng TYPE vbap-kwmeng,
gv_lfimg TYPE lips-lfimg,
gv_value1 TYPE lips-lfimg,
gv_value2 TYPE mska-kalab,
gv_value3 TYPE vbap-kwmeng,
gv_value4 TYPE mska-kalab,
ls_bapiret2 TYPE bapiret2,
lt_bapiret2 TYPE STANDARD TABLE OF bapiret2.

IF <fs_action> IS ASSIGNED AND <fs_action2> IS ASSIGNED.

IF sy-tcode EQ 'MIGO' AND <fs_action> EQ 'A08' AND <fs_action2> EQ


'R10' ."AND sy-ucomm NE 'YES'.
*BREAK-POINT.
********************************************************************************
************************ Begin of code for Movement type 413********************
SELECT SINGLE uname
FROM zmm_trans_post
INTO @DATA(ls_uname)
WHERE uname EQ @sy-uname.
IF sy-subrc NE 0.

REFRESH : lt_goitems.
ASSIGN ('(SAPLMIGO)GODYNPRO') TO <fs_godynpro>.

ld_class = '(SAPLMIGO)LCL_MIGO_GLOBALS=>KERNEL'.
ASSIGN (ld_class) TO <lo_kernel>.
lo_obj ?= <lo_kernel>.
ld_method = 'LINE_GET'.
ld_line = 1.
REFRESH: lt_goitems.
DO.
ld_line = syst-index.
CLEAR: ls_goitem.
CALL METHOD lo_obj->(ld_method)
EXPORTING
i_line = ld_line
IMPORTING
es_goitem = ls_goitem.

IF ls_goitem-zeile IS INITIAL.
EXIT.
ELSE.
APPEND ls_goitem TO lt_goitems.
ENDIF.
ENDDO.
CLEAR: ls_goitem.

IF lt_goitems IS NOT INITIAL.

* BREAK-POINT.
REFRESH : gt_vbap.
SELECT vbeln
posnr
matnr
kwmeng
FROM vbap
INTO TABLE gt_vbap
FOR ALL ENTRIES IN lt_goitems
WHERE vbeln EQ lt_goitems-ummat_kdauf
AND posnr EQ lt_goitems-ummat_kdpos
AND matnr EQ lt_goitems-ummat.
IF sy-subrc EQ 0.

SORT gt_vbap BY vbeln posnr matnr.

ENDIF.

SELECT ruuid
vbelv
posnv
vbeln
posnn
FROM vbfa
INTO TABLE gt_vbfa
FOR ALL ENTRIES IN lt_goitems
WHERE vbelv EQ lt_goitems-ummat_kdauf
AND posnv EQ lt_goitems-ummat_kdpos.
IF sy-subrc EQ 0.

ENDIF.

SELECT vbeln
posnr
lfimg
wbsta
FROM lips
INTO TABLE gt_lips
FOR ALL ENTRIES IN gt_vbfa
WHERE vbeln EQ gt_vbfa-vbeln
AND posnr EQ gt_vbfa-posnn
AND wbsta EQ 'C'.

IF sy-subrc EQ 0.

ENDIF.
SELECT matnr
werks
lgort
charg
sobkz
vbeln
posnr
kalab
FROM mska
INTO TABLE gt_mska
FOR ALL ENTRIES IN lt_goitems
WHERE matnr EQ lt_goitems-ummat
AND werks EQ lt_goitems-umwrk
AND lgort EQ lt_goitems-umlgo
AND vbeln EQ lt_goitems-ummat_kdauf
AND posnr EQ lt_goitems-ummat_kdpos.

IF sy-subrc EQ 0.
SORT gt_mska BY matnr
werks
lgort
vbeln
posnr.

ENDIF.

* ENDIF.
ENDIF.

IF <fs_bwart> EQ '413' AND <fs_sobkz> EQ space.

CLEAR : gs_goitem.
LOOP AT lt_goitems INTO gs_goitem.
IF gs_goitem-matnr NE gs_goitem-ummat.
*
ls_tab-msgid = 'ZMM_STOCK_VALIDATION'.
ls_tab-msgno = '000'.
ls_tab-lineno = gs_goitem-zeile.
ls_tab-msgty = 'E'.
APPEND ls_tab TO lt_tab.
CLEAR ls_tab.

ENDIF.

CLEAR : gs_vbap.
READ TABLE gt_vbap INTO gs_vbap WITH KEY vbeln = gs_goitem-
ummat_kdauf
posnr = gs_goitem-
ummat_kdpos
matnr = gs_goitem-ummat
BINARY SEARCH.
IF sy-subrc NE 0.
SHIFT gs_goitem-ummat LEFT DELETING LEADING '0'.
SHIFT gs_goitem-ummat_kdauf LEFT DELETING LEADING '0'.
SHIFT gs_goitem-ummat_kdpos LEFT DELETING LEADING '0'.

CONCATENATE gs_goitem-ummat
'doesnt exists in' gs_goitem-ummat_kdauf 'and' gs_goitem-
ummat_kdpos
INTO lv_msg2 SEPARATED BY space.

ls_tab-msgid = 'ZMM_STOCK_VALIDATION'.
ls_tab-msgno = '001'.
ls_tab-msgv1 = lv_msg2.
ls_tab-lineno = gs_goitem-zeile.
ls_tab-msgty = 'E'.
APPEND ls_tab TO lt_tab.
CLEAR ls_tab.

ELSEIF sy-subrc EQ 0.

gv_kwmeng = gs_vbap-kwmeng.

CLEAR : gs_vbfa,
gv_lfimg.
LOOP AT gt_vbfa INTO gs_vbfa WHERE vbelv EQ gs_goitem-ummat_kdauf
AND posnv EQ gs_goitem-ummat_kdpos.

CLEAR : gs_lips.
READ TABLE gt_lips INTO gs_lips WITH KEY vbeln = gs_vbfa-vbeln
posnr = gs_vbfa-posnn.
IF sy-subrc EQ 0.
gv_lfimg = gv_lfimg + gs_lips-lfimg.
ENDIF.
ENDLOOP.
gv_value1 = gv_kwmeng - gv_lfimg. """"""""""""""""""""""""""""
VALUE 1
*BREAK-POINT.
CLEAR : gs_mska, gv_value2.
READ TABLE gt_mska INTO gs_mska WITH KEY matnr = gs_goitem-ummat
werks = gs_goitem-umwrk
lgort = gs_goitem-umlgo
vbeln = gs_goitem-
ummat_kdauf
posnr = gs_goitem-
ummat_kdpos BINARY SEARCH.
IF sy-subrc EQ 0.
* gv_value2 = gs_mska-kalab + gs_goitem-erfmg. """"""""""""" Value
2
ENDIF.
gv_value2 = gs_mska-kalab + gs_goitem-erfmg. """"""""""""" Value 2
**Begin of addition on 17.05.2022 by anandp
CLEAR : gv_value3.
* gv_value3 = ( gs_vbap-kwmeng * 105 / 100 ).
gv_value3 = ( gv_value1 * 105 / 100 ).
**End of addition on 17.05.2022 by anandp
IF gv_value2 GT gv_value1
AND gv_value2 GT gv_value3. " addition on 17.05.2022 by anandp
.

SHIFT gs_goitem-ummat_kdauf LEFT DELETING LEADING '0'.


SHIFT gs_goitem-ummat_kdpos LEFT DELETING LEADING '0'.

CONCATENATE 'Excess Quantity is being assigned to'


gs_goitem-ummat_kdauf '&' gs_goitem-ummat_kdpos INTO lv_msg3
SEPARATED BY space.

ls_tab-msgid = 'ZMM_STOCK_VALIDATION'.
ls_tab-msgno = '002'.
ls_tab-msgv1 = lv_msg3.
ls_tab-lineno = gs_goitem-zeile.
ls_tab-msgty = 'E'.
APPEND ls_tab TO lt_tab.
CLEAR ls_tab.
ENDIF.

ENDIF.

ENDLOOP.

IF lt_tab IS NOT INITIAL AND sy-ucomm NE 'YES'.


CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_tab.

MESSAGE e398(00) WITH 'Error'.

ELSEIF lt_tab IS NOT INITIAL AND sy-ucomm EQ 'YES'.

ls_bapiret2-number = 003.
ls_bapiret2-type = 'E'.
ls_bapiret2-id = 'ZMM_STOCK_VALIDATION'.
* ls_bapiret2-MESSAGE = 'Ccant save with errors'.

APPEND ls_bapiret2 TO et_bapiret2.


CLEAR ls_bapiret2.
ENDIF.
************************ End of code for Movement type 413**********************
********************************************************************************
ELSEIF <fs_bwart> EQ '413' AND <fs_sobkz> EQ 'E'.

CLEAR : gs_goitem.
LOOP AT lt_goitems INTO gs_goitem.
IF gs_goitem-matnr NE gs_goitem-ummat.
*
ls_tab-msgid = 'ZMM_STOCK_VALIDATION'.
ls_tab-msgno = '000'.
ls_tab-lineno = gs_goitem-zeile.
ls_tab-msgty = 'E'.
APPEND ls_tab TO lt_tab.
CLEAR ls_tab.

ENDIF.

CLEAR : gs_vbap.
READ TABLE gt_vbap INTO gs_vbap WITH KEY vbeln = gs_goitem-
ummat_kdauf
posnr = gs_goitem-
ummat_kdpos
matnr = gs_goitem-ummat
BINARY SEARCH.
IF sy-subrc NE 0.
SHIFT gs_goitem-ummat LEFT DELETING LEADING '0'.
SHIFT gs_goitem-ummat_kdauf LEFT DELETING LEADING '0'.
SHIFT gs_goitem-ummat_kdpos LEFT DELETING LEADING '0'.

CONCATENATE gs_goitem-ummat
'Doesnt Exists In' gs_goitem-ummat_kdauf 'and' gs_goitem-
ummat_kdpos
INTO lv_msg2 SEPARATED BY space.

ls_tab-msgid = 'ZMM_STOCK_VALIDATION'.
ls_tab-msgno = '001'.
ls_tab-msgv1 = lv_msg2.
ls_tab-lineno = gs_goitem-zeile.
ls_tab-msgty = 'E'.
APPEND ls_tab TO lt_tab.
CLEAR ls_tab.

ELSEIF sy-subrc EQ 0.

gv_kwmeng = gs_vbap-kwmeng.

CLEAR : gs_vbfa,
gv_lfimg.
LOOP AT gt_vbfa INTO gs_vbfa WHERE vbelv EQ gs_goitem-ummat_kdauf
AND posnv EQ gs_goitem-ummat_kdpos.

CLEAR : gs_lips.
READ TABLE gt_lips INTO gs_lips WITH KEY vbeln = gs_vbfa-vbeln
posnr = gs_vbfa-posnn.
IF sy-subrc EQ 0.
gv_lfimg = gv_lfimg + gs_lips-lfimg.
ENDIF.
ENDLOOP.
gv_value1 = gv_kwmeng - gv_lfimg. """"""""""""""""""""""""""""
VALUE 1

CLEAR : gs_mska, gv_value2.


READ TABLE gt_mska INTO gs_mska WITH KEY matnr = gs_goitem-ummat
werks = gs_goitem-umwrk
lgort = gs_goitem-umlgo
vbeln = gs_goitem-ummat_kdauf
posnr = gs_goitem-ummat_kdpos BINARY SEARCH.
IF sy-subrc EQ 0.
* gv_value2 = gs_mska-kalab + gs_goitem-erfmg. "commented by
anandp on 20.05.2022
ENDIF.
gv_value2 = gs_mska-kalab + gs_goitem-erfmg. "added by anandp on
20.05.2022
**Begin of addition on 17.05.2022 by anandp
CLEAR : gv_value3.
* gv_value3 = ( gs_vbap-kwmeng * 105 / 100 ).
gv_value3 = ( gv_value1 * 105 / 100 ).
**End of addition on 17.05.2022 by anandp
IF gv_value2 GT gv_value1
AND gv_value2 GT gv_value3. " addition on 17.05.2022 by anandp

SHIFT gs_goitem-ummat_kdauf LEFT DELETING LEADING '0'.


SHIFT gs_goitem-ummat_kdpos LEFT DELETING LEADING '0'.
CONCATENATE 'Excess Quantity is being assigned to'
gs_goitem-ummat_kdauf '&' gs_goitem-ummat_kdpos INTO lv_msg3
SEPARATED BY space.

ls_tab-msgid = 'ZMM_STOCK_VALIDATION'.
ls_tab-msgno = '002'.
ls_tab-msgv1 = lv_msg3.
ls_tab-lineno = gs_goitem-zeile.
ls_tab-msgty = 'E'.
APPEND ls_tab TO lt_tab.
CLEAR ls_tab.
ENDIF.

ENDIF.

ENDLOOP.

ELSEIF <fs_bwart> EQ '411' AND <fs_sobkz> EQ 'E'. """""" 411 and E


CLEAR : gs_goitem.
LOOP AT lt_goitems INTO gs_goitem.
IF gs_goitem-matnr NE gs_goitem-ummat.
*
ls_tab-msgid = 'ZMM_STOCK_VALIDATION'.
ls_tab-msgno = '000'.
ls_tab-lineno = gs_goitem-zeile.
ls_tab-msgty = 'E'.
APPEND ls_tab TO lt_tab.
CLEAR ls_tab.

ENDIF.
ENDLOOP.
ENDIF.

IF lt_tab IS NOT INITIAL AND sy-ucomm NE 'YES'.


CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = lt_tab.

MESSAGE e398(00) WITH 'Error'.

ELSEIF lt_tab IS NOT INITIAL AND sy-ucomm EQ 'YES'.

ls_bapiret2-number = 003.
ls_bapiret2-type = 'E'.
ls_bapiret2-id = 'ZMM_STOCK_VALIDATION'.

APPEND ls_bapiret2 TO et_bapiret2.


CLEAR ls_bapiret2.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
********* End of addition by anandp 15432:MM:MIGO Sales order stock assignment
validations
***********************************************************************************
**
***Begin of addition by anandp on 29.08.2022 #12329 SO Shortclose_stock assignment
***********************************************************************************
**
IF sy-tcode EQ 'MIGO' AND <fs_action> EQ 'A08' AND <fs_action2> EQ 'R10' ."AND
sy-ucomm NE 'YES'.
*BREAK-POINT.
FIELD-SYMBOLS:
<lo_kernel2> TYPE any,
<fs_goitem2> TYPE goitem,
<fs_godynpro2> TYPE godynpro,
<fs_bwart2> TYPE bwart,
<fs_sobkz2> TYPE sobkz.
DATA: gs_goitem2 TYPE goitem,
gt_goitem2 TYPE STANDARD TABLE OF goitem,
ld_line2 TYPE sytabix,
ld_tabix2 TYPE sytabix,
lx_dep_tables2 TYPE abap_bool,
gv_bwart TYPE bwart,
gv_sobkz TYPE sobkz.

TYPES : BEGIN OF ty_vbak,


vbeln TYPE vbak-vbeln,
auart TYPE vbak-auart,
augru TYPE vbak-augru,
END OF ty_vbak,
BEGIN OF ty_set_auart,
auart TYPE vbak-auart,
END OF ty_set_auart,
BEGIN OF ty_vbap2,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
matnr TYPE vbap-matnr,
abgru TYPE vbap-abgru,
END OF ty_vbap2.

DATA : gt_vbak TYPE STANDARD TABLE OF ty_vbak,


gs_vbak TYPE ty_vbak,
gt_set_zsd_doctype TYPE TABLE OF rgsb4,
gs_set_zsd_doctype TYPE rgsb4,
gt_auart_check TYPE STANDARD TABLE OF ty_set_auart,
gs_auart_check TYPE ty_set_auart,
gt_tab TYPE esp1_message_tab_type,
gs_tab TYPE esp1_message_wa_type,
gs_bapiret2 TYPE bapiret2,
gt_vbap2 TYPE STANDARD TABLE OF ty_vbap2,
gs_vbap2 TYPE ty_vbap2.

REFRESH : gt_goitem2.
ASSIGN ('(SAPLMIGO)GODYNPRO') TO <fs_godynpro2>.

ld_class = '(SAPLMIGO)LCL_MIGO_GLOBALS=>KERNEL'.
ASSIGN (ld_class) TO <lo_kernel>.
lo_obj ?= <lo_kernel>.
ld_method = 'LINE_GET'.
ld_line = 1.
REFRESH: gt_goitem2.
DO.
ld_line2 = syst-index.
CLEAR: gs_goitem2.
CALL METHOD lo_obj->(ld_method)
EXPORTING
i_line = ld_line2
IMPORTING
es_goitem = gs_goitem2.

IF gs_goitem2-zeile IS INITIAL.
EXIT.
ELSE.
APPEND gs_goitem2 TO gt_goitem2.
ENDIF.
ENDDO.
CLEAR: gs_goitem2.

IF gt_goitem2 IS NOT INITIAL.

ASSIGN ('(SAPLMIGO)GODEFAULT_TV-BWART') TO <fs_bwart2>.


IF <fs_bwart2> IS ASSIGNED.

MOVE : <fs_bwart2> TO gv_bwart.

ENDIF.
ASSIGN ('(SAPLMIGO)GODEFAULT_TV-SOBKZ') TO <fs_sobkz2>.
IF <fs_sobkz2> IS ASSIGNED.

MOVE : <fs_sobkz2> TO gv_sobkz.

ENDIF.
* BREAK-POINT.
REFRESH : gt_set_zsd_doctype, gt_auart_check.
CALL FUNCTION 'G_SET_GET_ALL_VALUES'
EXPORTING
client = sy-mandt
setnr = 'ZSD_DOCTYPE'
table = 'VBAK'
class = '0000'
fieldname = 'AUART'
TABLES
set_values = gt_set_zsd_doctype
EXCEPTIONS
set_not_found = 1
OTHERS = 2.

IF sy-subrc EQ 0.
LOOP AT gt_set_zsd_doctype ASSIGNING FIELD-SYMBOL(<fs_set>).
MOVE : <fs_set>-from TO gs_auart_check-auart.
APPEND gs_auart_check TO gt_auart_check.
CLEAR gs_auart_check.

ENDLOOP.

ENDIF.
IF gv_bwart EQ '413' AND gv_sobkz EQ space
OR gv_bwart EQ '413' AND gv_sobkz EQ 'E'.
IF gt_goitem2 IS NOT INITIAL.
REFRESH : gt_vbak.
SELECT vbeln
auart
augru
FROM vbak
INTO TABLE gt_vbak
FOR ALL ENTRIES IN gt_goitem2
WHERE vbeln EQ gt_goitem2-ummat_kdauf.
IF sy-subrc EQ 0.

SORT gt_vbak BY vbeln.

ENDIF.

REFRESH : gt_vbap2.
SELECT vbeln
posnr
matnr
abgru
FROM vbap
INTO TABLE gt_vbap2
FOR ALL ENTRIES IN gt_goitem2
WHERE vbeln EQ gt_goitem2-ummat_kdauf
AND posnr EQ gt_goitem2-ummat_kdpos
AND matnr EQ gt_goitem2-ummat.
IF sy-subrc EQ 0.

* SORT gt_vbap2 by vbeln posnr.

ENDIF.

*BREAK-POINT.

LOOP AT gt_goitem2 ASSIGNING FIELD-SYMBOL(<fs_item2>).

IF <fs_item2> IS ASSIGNED.

READ TABLE gt_vbak ASSIGNING FIELD-SYMBOL(<fs_vbak>) WITH


KEY vbeln = <fs_item2>-ummat_kdauf BINARY
SEARCH.

IF sy-subrc EQ 0 AND <fs_vbak> IS ASSIGNED.

READ TABLE gt_auart_check ASSIGNING FIELD-SYMBOL(<fs_doctype>)


WITH KEY auart = <fs_vbak>-auart.

IF sy-subrc EQ 0 AND <fs_doctype> IS ASSIGNED.

IF <fs_vbak>-augru IS NOT INITIAL.

* gs_tab-msgid = 'ZMM_CLOSE_STOCK'.
* gs_tab-msgno = '000'.
* gs_tab-msgty = 'E'.
* APPEND gs_tab TO gt_tab.
* CLEAR gs_tab.

ELSE.
READ TABLE gt_vbap2 ASSIGNING FIELD-SYMBOL(<fs_vbap2>) WITH
KEY vbeln = <fs_item2>-ummat_kdauf

posnr = <fs_item2>-ummat_kdpos

matnr = <fs_item2>-ummat.
IF sy-subrc EQ 0 AND <fs_vbap2> IS ASSIGNED.

IF <fs_vbap2>-abgru IS NOT INITIAL.

gs_tab-msgid = 'ZMM_CLOSE_STOCK'.
gs_tab-msgno = '001'.
gs_tab-lineno = <fs_item2>-zeile."<fs_vbap2>-
posnr."<fs_item2>-ummat_kdpos.
gs_tab-msgty = 'E'.
APPEND gs_tab TO gt_tab.
CLEAR gs_tab.

ENDIF.

ENDIF.
UNASSIGN <fs_vbap2>.

ENDIF.

ENDIF.
ENDIF.

ENDIF.

ENDLOOP.
UNASSIGN <fs_item2>.

IF gt_tab IS NOT INITIAL AND sy-ucomm NE 'YES'.


CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'
TABLES
i_message_tab = gt_tab.

MESSAGE e398(00) WITH 'Error'.

ELSEIF gt_tab IS NOT INITIAL AND sy-ucomm EQ 'YES'.

gs_bapiret2-number = 001.
gs_bapiret2-type = 'E'.
gs_bapiret2-id = 'ZMM_CLOSE_STOCK'.

APPEND gs_bapiret2 TO et_bapiret2.


CLEAR gs_bapiret2.
ENDIF.

ENDIF.

ENDIF.

ENDIF.
ENDIF.
***********************************************************************************
**
***End of addition by anandp on 29.08.2022 #12329 SO Shortclose_stock assignment
***********************************************************************************
**

*******************************************************************************
**********************Begin of addition by anandp on 06.10.2022 #16862*********
*******************************************************************************

FIELD-SYMBOLS: <fs_action_e> TYPE refdoc,


<fs_action2_e> TYPE refdoc,
<fs_bwart_e> TYPE bwart,
<fs_sobkz_e> TYPE sobkz.

DATA : "gs_goitem_e TYPE goitem,


gt_item_e TYPE STANDARD TABLE OF goitem.

DATA: lo_obj_e TYPE REF TO object.


DATA: ld_class_e TYPE string,
ld_method_e TYPE string.

FIELD-SYMBOLS:
<lo_kernel_e> TYPE any,
<fs_goitem_e> TYPE goitem,
<fs_godynpro_e> TYPE godynpro.
DATA:
ls_goitem_e TYPE goitem,
lt_goitems_e TYPE STANDARD TABLE OF goitem,
ld_line_e TYPE sytabix,
ld_tabix_e TYPE sytabix,
lx_dep_tables_e TYPE abap_bool,
lv_item_e(6),
lv_msg2_e TYPE string,
lv_msg3_e TYPE string.
DATA: lt_tab_e TYPE esp1_message_tab_type.
DATA: ls_tab_e TYPE esp1_message_wa_type.

DATA : gt_vbap_e TYPE STANDARD TABLE OF ty_vbap,


gs_vbap_e TYPE ty_vbap,
gt_vbap_mat_e TYPE STANDARD TABLE OF ty_vbap,
gs_vbap_mat_e TYPE ty_vbap,
gt_vbfa_e TYPE STANDARD TABLE OF ty_vbfa,
gs_vbfa_e TYPE ty_vbfa,
gt_lips_e TYPE STANDARD TABLE OF ty_lips,
gs_lips_e TYPE ty_lips,
gt_mska_e TYPE STANDARD TABLE OF ty_mska,
gs_mska_e TYPE ty_mska,
gv_kwmeng_e TYPE vbap-kwmeng,
gv_lfimg_e TYPE lips-lfimg,
gv_value1_e TYPE lips-lfimg,
gv_value2_e TYPE mska-kalab,
gv_value3_e TYPE vbap-kwmeng,
gv_value4_e TYPE mska-kalab,
ls_bapiret2_e TYPE bapiret2,
lt_bapiret2_e TYPE STANDARD TABLE OF bapiret2.
ASSIGN ('(SAPLMIGO)GODYNPRO-ACTION') TO <fs_action_e>.
ASSIGN ('(SAPLMIGO)GODYNPRO-REFDOC') TO <fs_action2_e>.

ASSIGN ('(SAPLMIGO)GODEFAULT_TV-BWART') TO <fs_bwart_e>.


ASSIGN ('(SAPLMIGO)GODEFAULT_TV-SOBKZ') TO <fs_sobkz_e>.

IF sy-tcode EQ 'MIGO' AND <fs_action_e> EQ 'A08' AND <fs_action2_e> EQ


'R10' ."AND sy-ucomm NE 'YES'.
*BREAK-POINT.
IF <fs_bwart_e> EQ '412' AND <fs_sobkz_e> EQ 'E'.

* SELECT SINGLE uname


* FROM zmm_trans_post
* INTO @DATA(ls_uname_e)
* WHERE uname EQ @sy-uname.
* IF sy-subrc NE 0.

REFRESH : lt_goitems_e.
ASSIGN ('(SAPLMIGO)GODYNPRO') TO <fs_godynpro_e>.

ld_class_e = '(SAPLMIGO)LCL_MIGO_GLOBALS=>KERNEL'.
ASSIGN (ld_class_e) TO <lo_kernel_e>.
lo_obj_e ?= <lo_kernel_e>.
ld_method_e = 'LINE_GET'.
ld_line_e = 1.
REFRESH: lt_goitems_e.
DO.
ld_line_e = syst-index.
CLEAR: ls_goitem_e.
CALL METHOD lo_obj_e->(ld_method_e)
EXPORTING
i_line = ld_line_e
IMPORTING
es_goitem = ls_goitem_e.

IF ls_goitem_e-zeile IS INITIAL.
EXIT.
ELSE.
APPEND ls_goitem_e TO lt_goitems_e.
ENDIF.
ENDDO.
CLEAR: ls_goitem_e.
* ENDIF.

IF lt_goitems_e IS NOT INITIAL.

REFRESH : gt_vbap_e.
SELECT vbeln
posnr
matnr
kwmeng
FROM vbap
INTO TABLE gt_vbap_e
FOR ALL ENTRIES IN lt_goitems_e
WHERE vbeln EQ lt_goitems_e-mat_kdauf
AND posnr EQ lt_goitems_e-mat_kdpos
AND matnr EQ lt_goitems_e-matnr.
IF sy-subrc EQ 0.

SORT gt_vbap_e BY vbeln posnr matnr.

ENDIF.

REFRESH : gt_vbfa_e.

SELECT ruuid
vbelv
posnv
vbeln
posnn
FROM vbfa
INTO TABLE gt_vbfa_e
FOR ALL ENTRIES IN lt_goitems_e
WHERE vbelv EQ lt_goitems_e-mat_kdauf
AND posnv EQ lt_goitems_e-mat_kdpos.

IF sy-subrc EQ 0.
REFRESH : gt_lips_e.
SELECT vbeln
posnr
lfimg
wbsta
FROM lips
INTO TABLE gt_lips_e
FOR ALL ENTRIES IN gt_vbfa_e
WHERE vbeln EQ gt_vbfa_e-vbeln
AND posnr EQ gt_vbfa_e-posnn
AND wbsta EQ 'C'.
IF sy-subrc EQ 0.

SORT gt_lips_e BY vbeln posnr.

ENDIF.

ENDIF.

REFRESH : gt_mska_e.
SELECT matnr
werks
lgort
charg
sobkz
vbeln
posnr
kalab
FROM mska
INTO TABLE gt_mska_e
FOR ALL ENTRIES IN lt_goitems_e
WHERE matnr EQ lt_goitems_e-matnr
AND werks EQ lt_goitems_e-werks
AND lgort EQ lt_goitems_e-lgort
AND vbeln EQ lt_goitems_e-mat_kdauf
AND posnr EQ lt_goitems_e-mat_kdpos.

IF sy-subrc EQ 0.
SORT gt_mska_e BY matnr
werks
lgort
vbeln
posnr.

ENDIF.

LOOP AT lt_goitems_e INTO DATA(gs_goitem_e).

IF gs_goitem_e-ummat NE gs_goitem_e-matnr.

ls_tab_e-msgid = 'ZMM_STOCK_VALIDATION'.
ls_tab_e-msgno = '000'.
ls_tab_e-lineno = gs_goitem_e-zeile.
ls_tab_e-msgty = 'E'.
APPEND ls_tab_e TO lt_tab_e.
CLEAR ls_tab_e.

ENDIF.

CLEAR : gs_vbap.
READ TABLE gt_vbap_e INTO gs_vbap_e WITH KEY vbeln = gs_goitem_e-
mat_kdauf
posnr = gs_goitem_e-
mat_kdpos
matnr = gs_goitem_e-matnr
BINARY SEARCH.
IF sy-subrc NE 0.

SHIFT gs_goitem_e-mat_kdauf LEFT DELETING LEADING '0'.


SHIFT gs_goitem_e-mat_kdpos LEFT DELETING LEADING '0'.
SHIFT gs_goitem_e-matnr LEFT DELETING LEADING '0'.

CONCATENATE gs_goitem_e-matnr
'doesnt exists in' gs_goitem_e-mat_kdauf 'and' gs_goitem_e-mat_kdpos
INTO lv_msg2_e SEPARATED BY space.

ls_tab_e-msgid = 'ZMM_STOCK_VALIDATION'.
ls_tab_e-msgno = '001'.
ls_tab_e-msgv1 = lv_msg2_e.
ls_tab_e-lineno = gs_goitem_e-zeile.
ls_tab_e-msgty = 'E'.
APPEND ls_tab_e TO lt_tab_e.
CLEAR ls_tab_e.

ELSEIF sy-subrc EQ 0.
CLEAR : gv_kwmeng_e.
gv_kwmeng_e = gs_vbap_e-kwmeng.

CLEAR : gs_vbfa_e,
gv_lfimg_e.
LOOP AT gt_vbfa_e INTO gs_vbfa_e WHERE vbelv EQ gs_goitem_e-mat_kdauf
AND posnv EQ gs_goitem_e-
mat_kdpos.

CLEAR : gs_lips_e.
READ TABLE gt_lips_e INTO gs_lips_e WITH KEY vbeln = gs_vbfa_e-
vbeln
posnr = gs_vbfa_e-
posnn.
IF sy-subrc EQ 0.
gv_lfimg_e = gv_lfimg_e + gs_lips_e-lfimg.
ENDIF.
ENDLOOP.

gv_value1_e = gv_kwmeng_e - gv_lfimg_e. """"""""""""""""""""""""""""


VALUE 1

CLEAR : gs_mska_e, gv_value2_e.


READ TABLE gt_mska_e INTO gs_mska_e WITH KEY matnr = gs_goitem_e-
matnr
werks = gs_goitem_e-werks
lgort = gs_goitem_e-lgort
vbeln = gs_goitem_e-
mat_kdauf
posnr = gs_goitem_e-
mat_kdpos BINARY SEARCH.
IF sy-subrc EQ 0.
* gv_value2 = gs_mska-kalab + gs_goitem-erfmg. """"""""""""" Value
2
ENDIF.
gv_value2_e = gs_mska_e-kalab + gs_goitem_e-erfmg. """""""""""""
Value 2

CLEAR : gv_value3_e.
gv_value3_e = ( gv_value1_e * 105 / 100 ). """""""""""""""""""""""
Value 3

IF gv_value2_e GT gv_value1_e
AND gv_value2_e GT gv_value3_e. " addition on 17.05.2022 by anandp

SHIFT gs_goitem_e-mat_kdauf LEFT DELETING LEADING '0'.


SHIFT gs_goitem_e-mat_kdpos LEFT DELETING LEADING '0'.

CONCATENATE 'Excess Quantity is being assigned to'


gs_goitem_e-mat_kdauf '&' gs_goitem_e-mat_kdpos INTO lv_msg3_e
SEPARATED BY space.

ls_tab_e-msgid = 'ZMM_STOCK_VALIDATION'.
ls_tab_e-msgno = '002'.
ls_tab_e-msgv1 = lv_msg3_e.
ls_tab_e-lineno = gs_goitem_e-zeile.
ls_tab_e-msgty = 'E'.
APPEND ls_tab_e TO lt_tab_e.
CLEAR ls_tab_e.
ENDIF.

ENDIF.
ENDLOOP.
CLEAR : gs_goitem_e.

IF lt_tab_e IS NOT INITIAL AND sy-ucomm NE 'YES'.

CALL FUNCTION 'C14Z_MESSAGES_SHOW_AS_POPUP'


TABLES
i_message_tab = lt_tab_e.

MESSAGE e398(00) WITH 'Error'.

ELSEIF lt_tab_e IS NOT INITIAL AND sy-ucomm EQ 'YES'.

ls_bapiret2_e-number = 003.
ls_bapiret2_e-type = 'E'.
ls_bapiret2_e-id = 'ZMM_STOCK_VALIDATION'.

APPEND ls_bapiret2_e TO et_bapiret2.


CLEAR ls_bapiret2_e.

ENDIF.

ENDIF.

ENDIF.

ENDIF.
*******************************************************************************
******************************End of addition by anandp on 06.10.2022 #16862***
*******************************************************************************
ENDMETHOD.

You might also like