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.