Sunteți pe pagina 1din 25

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

*& Report ZSD_BAUTO_PO_GENERATION


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

REPORT zsd_bauto_po_generation.

TABLES : vbap,mara,vbak,zsd_sash.

DATA : it_fieldcat TYPE slis_t_fieldcat_alv,


wa_fieldcat TYPE slis_fieldcat_alv,
wa_layout TYPE slis_layout_alv,
counter TYPE i.

TYPES : BEGIN OF ty_vbrk,


vbeln TYPE vbrk-vbeln,
fkdat TYPE vbrk-fkdat,
kunag TYPE zsd_sash-zwss_code,
rfbsk TYPE vbrk-rfbsk,
fksto TYPE vbrk-fksto,
END OF ty_vbrk.

DATA : it_vbrk TYPE STANDARD TABLE OF ty_vbrk,


wa_vbrk TYPE ty_vbrk.
FIELD-SYMBOLS : <wa_vbrk> TYPE ty_vbrk.
TYPES : BEGIN OF ty_vbrp,
vbeln TYPE vbrp-vbeln,
posnr TYPE vbrp-posnr,
matnr TYPE vbrp-matnr,
fklmg TYPE vbrp-fklmg,
END OF ty_vbrp.

DATA : it_vbrp TYPE STANDARD TABLE OF ty_vbrp,


wa_vbrp TYPE ty_vbrp.
FIELD-SYMBOLS : <wa_vbrp> TYPE ty_vbrp.

TYPES : BEGIN OF ty_blcnt,


kunag TYPE zwss_code,
fkdat TYPE vbrk-fkdat,
matnr TYPE zitem_code1,
mmtnr TYPE zitem_codem,
fklmg TYPE vbrp-fklmg,
END OF ty_blcnt.

DATA : it_blcnt TYPE STANDARD TABLE OF ty_blcnt,


it_blcnt_cnt TYPE STANDARD TABLE OF ty_blcnt,
it_blcnt_cnt1 TYPE STANDARD TABLE OF ty_blcnt,
it_blcnt_sum TYPE STANDARD TABLE OF ty_blcnt,
wa_blcnt TYPE ty_blcnt,
wa_blcntc TYPE ty_blcnt,
wa_blcnts TYPE ty_blcnt.

DATA : gv_werks TYPE vbap-werks,


gv_matnr TYPE mara-matnr,
gv_auart TYPE vbak-auart,
gv_vkorg TYPE vbak-vkorg,
gv_vtweg TYPE vbak-vtweg,
gv_spart TYPE vbak-spart,
gv_vkgrp TYPE vbak-vkgrp.

TYPES : BEGIN OF ty_marc,


matnr TYPE marc-matnr,
werks TYPE marc-werks,
END OF ty_marc.

DATA : it_marc TYPE STANDARD TABLE OF ty_marc,


wa_marc TYPE ty_marc.

FIELD-SYMBOLS : <fs_sash> TYPE zsd_sash.


DATA : gt_zsd_sash TYPE STANDARD TABLE OF zsd_sash,
gt_zsd_sashm TYPE STANDARD TABLE OF zsd_sash,
gt_zsd_sash1 TYPE STANDARD TABLE OF zsd_sash.

TYPES : BEGIN OF ty_knvv,


kunnr TYPE knvv-kunnr,
vkorg TYPE knvv-vkorg,
vtweg TYPE knvv-vtweg,
spart TYPE knvv-spart,
aufsd TYPE knvv-aufsd, " (+) Amit 08.05.2018
vkgrp TYPE knvv-vkgrp,
wsscode TYPE knvv-wsscode,
END OF ty_knvv.

DATA : gt_knvv TYPE TABLE OF ty_knvv,


gs_knvv TYPE ty_knvv.

FIELD-SYMBOLS : <gs_knvv> TYPE ty_knvv.

TYPES : BEGIN OF ty_kna1,


kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
aufsd TYPE kna1-aufsd,
winomkar TYPE kna1-winomkar,
END OF ty_kna1.

DATA : gt_kna1 TYPE TABLE OF ty_kna1,


gs_kna1 TYPE ty_kna1.

TYPES : BEGIN OF ty_mara,


matnr TYPE mara-matnr,
fsnca TYPE mara-fsnca,
prdha TYPE mara-prdha,
ntgew TYPE mara-ntgew,
END OF ty_mara.
DATA : it_mara TYPE STANDARD TABLE OF ty_mara,
wa_mara TYPE ty_mara.
DATA : v_qtyf TYPE zautopo_qtyf,
v_avgs TYPE zautopo_qtyf,
v_prdh TYPE mara-prdha.

DATA : v_frdt TYPE vbrk-fkdat,


v_todt TYPE vbrk-fkdat,
v_day TYPE numc2.

DATA : gt_final TYPE STANDARD TABLE OF zsd_autopo_planb," ty_final,


gt_finalm TYPE STANDARD TABLE OF zsd_autopo_planb," ty_final,
gs_final TYPE zsd_autopo_planb." ty_final.

FIELD-SYMBOLS : <gs_final> TYPE zsd_autopo_planb.

TYPES : BEGIN OF ty_makt,


matnr TYPE makt-matnr,
maktx TYPE makt-maktx,
END OF ty_makt.
DATA : it_makt TYPE STANDARD TABLE OF ty_makt,
wa_makt TYPE ty_makt.

TYPES : BEGIN OF ty_mvke,


matnr TYPE mvke-matnr,
vkorg TYPE mvke-vkorg,
vtweg TYPE mvke-vtweg,
vrkme TYPE mvke-vrkme,
END OF ty_mvke.

DATA : gt_mvke TYPE TABLE OF ty_mvke,


gs_mvke TYPE ty_mvke.

DATA : lv_qty TYPE p DECIMALS 0,


lv_qty1 TYPE p DECIMALS 0.

DATA : BEGIN OF itab OCCURS 0,


vbkd_bstkd TYPE char35,
vbkd_bstdk TYPE char10,
vbkd_bsark TYPE char4,
vbak_vkorg TYPE char4,
vbak_vtweg TYPE char2,
vbak_spart TYPE char2,
vbak_kunnr TYPE char10,
vbap_matnr TYPE char18,
vbap_kwmeng TYPE char18,
vbap_meins TYPE char3,
vbap_werks TYPE char4,
color TYPE char12,
END OF itab.
DATA : o_proxy TYPE REF TO zco_si_auto_and_push_poresult.
DATA : it_log1 TYPE STANDARD TABLE OF zpi_log WITH HEADER LINE.

***Inbound Internal table


DATA : it_datain_start TYPE zauto_and_push_po_in_data_tab,
wa_datain_start LIKE itab."TYPE zauto_and_push_po_in_data.

TYPES : BEGIN OF it_datain,


posnr TYPE vbap-posnr,
it_datain_start TYPE zauto_and_push_po_in_data_tab,
END OF it_datain.

***Outbound Internal table


DATA : it_dataout TYPE zauto_and_push_poresult_da_tab,
wa_dataout TYPE zauto_and_push_poresult_data.

**For sending data to PI server(outbound)


DATA: it_output TYPE zauto_and_push_poresult1.

**To raise exceptions


DATA : l_sys_exc TYPE REF TO cx_ai_system_fault,
l_app_exc TYPE REF TO cx_ai_application_fault,
l_ref_init TYPE REF TO cx_sy_ref_is_initial,
l_exception_msg TYPE string,
l_exception_msg1 TYPE string.

TYPES:BEGIN OF ty_podata,
bstkd TYPE bstkd,
bstdk TYPE bstdk,
bsark TYPE bsark,
auart TYPE vbak-auart,
posnr TYPE vbap-posnr,
vkorg TYPE vkorg,
vtweg TYPE vtweg,
spart TYPE spart,
kunnr TYPE kunag,
matnr TYPE matnr,
kwmeng TYPE kwmeng,
meins TYPE meins,
werks TYPE werks_ext,
vbeln TYPE vbeln_va,
flag(1) TYPE c,
remark TYPE char480,
color TYPE char12,
END OF ty_podata.

TYPES:BEGIN OF ty_log,
bstkd TYPE bstkd,
bstdk TYPE bstdk,
bsark TYPE bsark,
auart TYPE vbak-auart,
posnr TYPE vbap-posnr,
vkorg TYPE vkorg,
vtweg TYPE vtweg,
spart TYPE spart,
kunnr TYPE kunag,
vbeln TYPE vbeln_va,
flag(1) TYPE c,
message TYPE char480,
END OF ty_log.

DATA : it_header_sim TYPE STANDARD TABLE OF bapisdhead,


wa_header_sim TYPE bapisdhead.

DATA : it_partners_sim TYPE STANDARD TABLE OF bapipartnr,


wa_partners_sim TYPE bapipartnr.

DATA : it_items_sim TYPE STANDARD TABLE OF bapiitemin,


wa_items_sim TYPE bapiitemin.

DATA : it_schedules_sim TYPE STANDARD TABLE OF bapischdl,


wa_schedules_sim TYPE bapischdl.
DATA : it_return_sim TYPE bapireturn,
wa_return_sim TYPE bapireturn.
DATA : v_cnt TYPE char1.
"DATA : r_vbeln TYPE vbeln.
DATA : s_vbeln TYPE vbeln.
DATA : v_cnt1 TYPE char1.
DATA:it_header_in TYPE bapisdhd1,
it_header_inx TYPE bapisdhd1x,

it_partners TYPE STANDARD TABLE OF bapiparnr,


wa_partners TYPE bapiparnr,

it_items_in TYPE STANDARD TABLE OF bapisditm,


wa_items_in TYPE bapisditm,

it_items_inx TYPE STANDARD TABLE OF bapisditmx,


wa_items_inx TYPE bapisditmx,

it_schedules_in TYPE STANDARD TABLE OF bapischdl,


wa_schedules_in TYPE bapischdl,

it_schedules_inx TYPE STANDARD TABLE OF bapischdlx,


wa_schedules_inx TYPE bapischdlx,

it_return TYPE STANDARD TABLE OF bapiret2,


wa_return TYPE bapiret2,

it_hdpodata TYPE STANDARD TABLE OF ty_podata,


wa_hdpodata TYPE ty_podata,

it_detpodata TYPE STANDARD TABLE OF ty_podata,


wa_detpodata TYPE ty_podata,

it_detpodata1 TYPE STANDARD TABLE OF ty_podata,


wa_detpodata1 TYPE ty_podata,
it_detpodata_e TYPE STANDARD TABLE OF ty_podata,
wa_detpodata_e TYPE ty_podata,

it_log TYPE STANDARD TABLE OF ty_log,


wa_log TYPE ty_log,
vnetwr TYPE vbap-netwr,
vwss TYPE zsd_autopo_planb-zwss_code,
vbln TYPE vbap-vbeln.

DATA : gv_salesdocument TYPE bapivbeln-vbeln,


gv_counter TYPE i,
gv_monthend_dt TYPE sy-datum,
gv_kunnr TYPE kunag,
gv_meins TYPE meins.

FIELD-SYMBOLS : <fs_autopo_stock> TYPE zsd_autopo_planb.

TYPES : BEGIN OF ty_plant,


werks TYPE werks_d,
END OF ty_plant.

DATA : it_plant TYPE STANDARD TABLE OF ty_plant,


wa_plant TYPE ty_plant.
DATA : it_tspat TYPE STANDARD TABLE OF tspat,
wa_tspat TYPE tspat.

DATA : it_tvgrt TYPE STANDARD TABLE OF tvgrt,


wa_tvgrt TYPE tvgrt.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.


SELECT-OPTIONS : s_werks FOR gv_werks OBLIGATORY,
s_matnr FOR gv_matnr ,
s_spart FOR gv_spart,
s_vkgrp FOR gv_vkgrp,
s_vkorg FOR gv_vkorg,
s_wsscd FOR zsd_sash-zwss_code NO INTERVALS.

PARAMETERS : p_date TYPE sy-datum OBLIGATORY.


SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.


PARAMETERS : cb1 AS CHECKBOX DEFAULT 'X',
cb2 AS CHECKBOX,
cb3 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b2.

AT SELECTION-SCREEN.

SELECT werks FROM t001w INTO TABLE it_plant WHERE werks IN s_werks.

******************** Authority Check For Plant----------------------


LOOP AT it_plant INTO wa_plant.

AUTHORITY-CHECK OBJECT 'ZSDWERKS'


ID 'WERKS' FIELD wa_plant-werks.
IF sy-subrc <> 0 .
MESSAGE e001(zauth) WITH wa_plant-werks.
ENDIF.
CLEAR : wa_plant.
ENDLOOP.

***************Authority Check For Division----------------------------


SELECT * FROM tspat INTO TABLE it_tspat WHERE spart IN s_spart AND spras = 'E'.
LOOP AT it_tspat INTO wa_tspat.
AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
ID 'SPART' FIELD wa_tspat-spart.
IF sy-subrc <> 0 .
MESSAGE e000(zauth) WITH wa_tspat-spart.
ENDIF.
CLEAR : wa_tspat.
ENDLOOP.

****************Authority Check For Sales Grp-------------------------


SELECT * FROM tvgrt INTO TABLE it_tvgrt WHERE vkgrp IN s_vkgrp AND spras = 'E' .
LOOP AT it_tvgrt INTO wa_tvgrt.
AUTHORITY-CHECK OBJECT 'ZVKGRP'
ID 'VKGRP' FIELD wa_tvgrt-vkgrp.
IF sy-subrc <> 0 .
MESSAGE e002(zauth) WITH wa_tvgrt-vkgrp.
ENDIF.
CLEAR : wa_tvgrt.
ENDLOOP.

START-OF-SELECTION.

PERFORM get_data.
PERFORM process_data.

IF cb1 = 'X' AND cb2 NE 'X'.


PERFORM display_data.
ENDIF.
IF cb2 = 'X' .
" PERFORM create_so.
IF cb3 = 'X'.
PERFORM display_data.
ELSE.
PERFORM send_email.
ENDIF.
ENDIF.

*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data.
v_day = p_date+6(2).

IF v_day GE '01' AND v_day LE '10'.


v_frdt = p_date - 21.
v_todt = p_date .
ELSEIF v_day GE '11' AND v_day LE '20'.
v_frdt = p_date - 7.
v_todt = p_date .
ELSEIF v_day GE '21' AND v_day LE '31'.
v_frdt = p_date - 3.
v_todt = p_date .
ENDIF.

REFRESH gt_zsd_sash.
SELECT * FROM zsd_sash
INTO TABLE gt_zsd_sash
WHERE zcreated_on = p_date
AND zitem_codem IN s_matnr
AND werks IN s_werks
AND zwss_code IN s_wsscd.
DELETE gt_zsd_sash WHERE zsash_qty LE 0.
IF gt_zsd_sash IS NOT INITIAL.
PERFORM winomkar1.
SELECT vbeln fkdat kunag rfbsk fksto
INTO CORRESPONDING FIELDS OF TABLE it_vbrk
FROM vbrk
FOR ALL ENTRIES IN gt_zsd_sash
WHERE fkdat BETWEEN v_frdt AND v_todt
AND kunag = gt_zsd_sash-zwss_code
AND fkart = 'ZDDS'.
DELETE it_vbrk WHERE rfbsk NE 'C'.
DELETE it_vbrk WHERE fksto IS NOT INITIAL.
ELSE.
p_date = p_date - 1.
SELECT * FROM zsd_sash
INTO TABLE gt_zsd_sash
WHERE zcreated_on = p_date
AND zitem_codem IN s_matnr
AND werks IN s_werks
AND zwss_code IN s_wsscd.
IF gt_zsd_sash IS NOT INITIAL.
SELECT vbeln fkdat kunag rfbsk fksto
INTO CORRESPONDING FIELDS OF TABLE it_vbrk
FROM vbrk
FOR ALL ENTRIES IN gt_zsd_sash
WHERE fkdat BETWEEN v_frdt AND v_todt
AND kunag = gt_zsd_sash-zwss_code
AND fkart = 'ZDDS'.
DELETE it_vbrk WHERE rfbsk NE 'C'.
DELETE it_vbrk WHERE fksto IS NOT INITIAL.
ENDIF.
ENDIF.

IF it_vbrk IS NOT INITIAL.


SELECT vbeln posnr matnr fklmg
INTO CORRESPONDING FIELDS OF TABLE it_vbrp
FROM vbrp
FOR ALL ENTRIES IN it_vbrk
WHERE vbeln = it_vbrk-vbeln.
ENDIF.
LOOP AT it_vbrk ASSIGNING <wa_vbrk>.

LOOP AT it_vbrp ASSIGNING <wa_vbrp> WHERE vbeln = <wa_vbrk>-vbeln.

wa_blcnt-kunag = <wa_vbrk>-kunag.
wa_blcnt-fkdat = <wa_vbrk>-fkdat.
wa_blcnt-matnr = <wa_vbrp>-matnr.
PERFORM mth_data USING <wa_vbrp>-matnr CHANGING wa_blcnt-mmtnr.
wa_blcnt-fklmg = <wa_vbrp>-fklmg.
APPEND wa_blcnt TO it_blcnt.

wa_blcnt-fklmg = 1.
APPEND wa_blcnt TO it_blcnt_cnt.

CLEAR : wa_blcnt-fkdat,wa_blcnt-matnr .
wa_blcnt-fklmg = <wa_vbrp>-fklmg.
COLLECT wa_blcnt INTO it_blcnt_sum.

CLEAR : wa_blcnt.
ENDLOOP.

ENDLOOP.

SORT : it_blcnt_cnt BY kunag fkdat mmtnr.


DELETE ADJACENT DUPLICATES FROM it_blcnt_cnt COMPARING kunag fkdat mmtnr.
LOOP AT it_blcnt_cnt INTO wa_blcnt.
CLEAR : wa_blcnt-fkdat,wa_blcnt-matnr .
COLLECT wa_blcnt INTO it_blcnt_cnt1.
CLEAR : wa_blcnt.
ENDLOOP.

REFRESH it_blcnt_cnt.
it_blcnt_cnt[] = it_blcnt_cnt1[].
REFRESH it_blcnt_cnt1.

gt_zsd_sash1[] = gt_zsd_sash[].
SORT gt_zsd_sash1 BY zitem_codem .
DELETE ADJACENT DUPLICATES FROM gt_zsd_sash1 COMPARING zitem_codem.

IF gt_zsd_sash1[] IS NOT INITIAL.


SELECT matnr
vkorg
vtweg
vrkme
FROM mvke
INTO TABLE gt_mvke
FOR ALL ENTRIES IN gt_zsd_sash1
WHERE matnr = gt_zsd_sash1-zitem_codem.

SORT : gt_mvke BY matnr vkorg vtweg.

SELECT matnr fsnca prdha ntgew INTO TABLE it_mara


FROM mara
FOR ALL ENTRIES IN gt_zsd_sash1
WHERE matnr = gt_zsd_sash1-zitem_codem.

SORT it_mara BY matnr.

SELECT matnr maktx INTO TABLE it_makt FROM makt


FOR ALL ENTRIES IN gt_zsd_sash1
WHERE matnr = gt_zsd_sash1-zitem_codem.
SORT : it_makt BY matnr.

ENDIF.

gt_zsd_sash1[] = gt_zsd_sash[].
SORT : gt_zsd_sash1 BY zwss_code .
DELETE ADJACENT DUPLICATES FROM gt_zsd_sash1 COMPARING zwss_code.

IF gt_zsd_sash1[] IS NOT INITIAL.

SELECT kunnr
vkorg
vtweg
spart
aufsd
wsscode
FROM knvv
INTO TABLE gt_knvv
FOR ALL ENTRIES IN gt_zsd_sash1
WHERE kunnr = gt_zsd_sash1-zwss_code
AND spart IN s_spart.

SORT : gt_knvv BY kunnr.

SELECT kunnr name1 aufsd


FROM kna1
INTO TABLE gt_kna1
FOR ALL ENTRIES IN gt_zsd_sash1
WHERE kunnr = gt_zsd_sash1-zwss_code.
SORT : gt_kna1 BY kunnr.

ENDIF.
ENDFORM. "get_data

*&---------------------------------------------------------------------*
*& Form mth_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->MTR text
* <--MMTR text
*----------------------------------------------------------------------*
FORM mth_data USING mtr CHANGING mmtr.
DATA : knu TYPE kotd001-knumh.
SELECT SINGLE knumh INTO knu FROM kotd001
WHERE kappl EQ 'V'
AND kschl EQ 'ZA01'
AND matwa EQ mtr
AND datbi GE sy-datum
AND datab LE sy-datum.
SELECT SINGLE smatn INTO mmtr FROM konddp
WHERE knumh EQ knu.
IF sy-subrc NE 0.
SELECT SINGLE knumh INTO knu FROM konddp
WHERE smatn EQ mtr.
SELECT SINGLE matwa INTO mmtr FROM kotd001
WHERE kappl EQ 'V'
AND kschl EQ 'ZA01'
AND knumh EQ knu
AND datbi GE sy-datum
AND datab LE sy-datum.
IF sy-subrc NE 0.
mmtr = mtr.
ENDIF.
ENDIF.
ENDFORM. "mth_data

*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM process_data.

LOOP AT gt_zsd_sash ASSIGNING <fs_sash>.


gs_final-zcreated_on = sy-datum.
gs_final-zcreated_by = sy-uname.
READ TABLE it_blcnt_sum INTO wa_blcnts WITH KEY kunag = <fs_sash>-zwss_code
mmtnr = <fs_sash>-zitem_codem.

READ TABLE it_blcnt_cnt INTO wa_blcntc WITH KEY kunag = <fs_sash>-zwss_code


mmtnr = <fs_sash>-zitem_codem.
IF wa_blcnts-fklmg IS NOT INITIAL.
gs_final-auto_po_qty = wa_blcnts-fklmg / wa_blcntc-fklmg.
ENDIF.

gs_final-zwss_code = <fs_sash>-zwss_code.
gs_final-zitem_code = <fs_sash>-zitem_codem.
gs_final-werks = <fs_sash>-werks.
gs_final-zsash_qty = <fs_sash>-zsash_qty.

CONCATENATE <fs_sash>-zwss_code '/BT/' <fs_sash>-werks '/' sy-datum INTO


gs_final-po_no.

SELECT SINGLE name1 INTO gs_final-pname FROM t001w WHERE werks = <fs_sash>-
werks.
READ TABLE it_makt INTO wa_makt WITH KEY matnr = <fs_sash>-zitem_codem BINARY
SEARCH.
IF sy-subrc = 0.
gs_final-maktx = wa_makt-maktx.
ELSE.
SELECT SINGLE maktx INTO gs_final-maktx FROM makt WHERE matnr = <fs_sash>-
zitem_codem.
ENDIF.

CLEAR gs_knvv.
READ TABLE gt_knvv INTO gs_knvv WITH KEY kunnr = <fs_sash>-zwss_code vtweg =
'30' spart = '70' .
IF sy-subrc EQ 0.
gs_final-spart = '70'.
ELSE.
READ TABLE gt_knvv INTO gs_knvv WITH KEY kunnr = <fs_sash>-zwss_code.
IF sy-subrc = 0.
gs_final-spart = gs_knvv-spart.
ENDIF.
ENDIF.

CLEAR gs_kna1.
READ TABLE gt_kna1 INTO gs_kna1 WITH KEY kunnr = <fs_sash>-zwss_code BINARY
SEARCH.
IF sy-subrc = 0.
gs_final-name1 = gs_kna1-name1.
IF gs_kna1-aufsd = 'Z7' OR gs_kna1-aufsd = 'Z8' OR gs_kna1-aufsd = 'ZL' OR
gs_kna1-aufsd = 'CC' .
gs_final-aufsd = 'B'.
ELSEIF gs_knvv-aufsd = 'Z7' OR gs_knvv-aufsd = 'Z8' OR gs_knvv-aufsd = 'ZL'
OR gs_knvv-aufsd = 'CC' .
gs_final-aufsd = 'B'.
ENDIF.
ELSE.
SELECT SINGLE name1 INTO gs_final-name1 FROM kna1 WHERE kunnr = <fs_sash>-
zwss_code.
ENDIF.

READ TABLE gt_mvke INTO gs_mvke WITH KEY matnr = <fs_sash>-zitem_codem vkorg =
gs_knvv-vkorg vtweg = gs_knvv-vtweg BINARY SEARCH.

IF sy-subrc EQ 0.
IF gs_mvke-vrkme IS NOT INITIAL.
gs_final-uom = gs_mvke-vrkme.
ELSE.
SELECT SINGLE meinh FROM marm INTO gs_mvke-vrkme WHERE matnr = <fs_sash>-
zitem_codem.
gs_final-uom = gs_mvke-vrkme.
ENDIF.
ELSE.
SELECT SINGLE meinh FROM marm INTO gs_mvke-vrkme WHERE matnr = <fs_sash>-
zitem_codem.
gs_final-uom = gs_mvke-vrkme.
ENDIF.

IF gs_final-auto_po_qty GT 0.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
i_matnr = <fs_sash>-zitem_codem
i_in_me = 'EA'
i_out_me = gs_mvke-vrkme
i_menge = gs_final-auto_po_qty
IMPORTING
e_menge = gs_final-autopo_caseqty
EXCEPTIONS
error_in_application = 1
error = 2
OTHERS = 3.
ELSE.
gs_final-auto_po_qty = 0.
gs_final-autopo_caseqty = 0.
ENDIF.

* Rounding Original Case Quantity


CALL FUNCTION 'ROUND'
EXPORTING
decimals = 1
input = gs_final-autopo_caseqty
sign = '-'
IMPORTING
output = lv_qty
EXCEPTIONS
input_invalid = 1
overflow = 2
type_invalid = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

gs_final-autopo_csqtyf = lv_qty.
IF gs_final-autopo_csqtyf GE 0.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
i_matnr = <fs_sash>-zitem_codem
i_in_me = gs_mvke-vrkme
i_out_me = 'EA'
i_menge = gs_final-autopo_csqtyf
IMPORTING
e_menge = gs_final-auto_po_qtyf
EXCEPTIONS
error_in_application = 1
error = 2
OTHERS = 3.
ENDIF.
APPEND gs_final TO gt_final.
CLEAR : gs_final,gs_mvke,wa_blcnts,wa_blcntc.
ENDLOOP.

IF gt_final[] IS NOT INITIAL.


MODIFY zsd_autopo_planb FROM TABLE gt_final.
* IF sy-subrc NE 0.
* MESSAGE 'Error while updating Table ZSD_AUTOPO_PLANB.' TYPE 'S' DISPLAY LIKE
'E'.
* ENDIF.
ENDIF.
ENDFORM. "PROCESS_DATA

*&---------------------------------------------------------------------*
*& Form winomkar1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM winomkar1.
REFRESH : gt_kna1,gt_knvv.

gt_zsd_sashm[] = gt_zsd_sash[].
SORT gt_zsd_sashm BY zwss_code.
DELETE ADJACENT DUPLICATES FROM gt_zsd_sashm COMPARING zwss_code.
IF gt_zsd_sashm[] IS NOT INITIAL.
SELECT kunnr
name1
aufsd
winomkar
FROM kna1
INTO TABLE gt_kna1
FOR ALL ENTRIES IN gt_zsd_sashm
WHERE kunnr = gt_zsd_sashm-zwss_code.
DELETE gt_kna1 WHERE winomkar = '1'.
DELETE gt_kna1 WHERE winomkar = '2'.
SORT gt_kna1 BY kunnr.
LOOP AT gt_kna1 INTO gs_kna1.
DELETE gt_zsd_sash WHERE zcreated_on = p_date AND zwss_code = gs_kna1-kunnr.
DELETE FROM zsd_sash WHERE zcreated_on = p_date AND zwss_code = gs_kna1-
kunnr.
COMMIT WORK.
WAIT UP TO 1 SECONDS.
ENDLOOP.
ENDIF.

"---------------------
REFRESH : gt_zsd_sashm.
gt_zsd_sashm[] = gt_zsd_sash[].
SORT gt_zsd_sashm BY zwss_code.
DELETE ADJACENT DUPLICATES FROM gt_zsd_sashm COMPARING zwss_code.
IF gt_zsd_sashm[] IS NOT INITIAL.
SELECT kunnr
vkorg
vtweg
spart
aufsd
wsscode
FROM knvv
INTO TABLE gt_knvv
FOR ALL ENTRIES IN gt_zsd_sashm
WHERE kunnr = gt_zsd_sashm-zwss_code
AND spart IN s_spart
AND vkgrp IN s_vkgrp
AND vkorg IN s_vkorg.

LOOP AT gt_zsd_sashm ASSIGNING <fs_sash>.


CLEAR gs_knvv.
READ TABLE gt_knvv INTO gs_knvv WITH KEY kunnr = <fs_sash>-zwss_code vtweg =
'30' spart = '70' .
IF sy-subrc EQ 0.
CONTINUE.
ELSE.
READ TABLE gt_knvv INTO gs_knvv WITH KEY kunnr = <fs_sash>-zwss_code.
IF sy-subrc = 0.
CONTINUE.
ELSE.
DELETE gt_zsd_sash WHERE zcreated_on = p_date AND zwss_code = <fs_sash>-
zwss_code.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
"---------------------

IF gt_zsd_sash[] IS INITIAL.
MESSAGE 'No winomkar WSS found.' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
REFRESH : gt_zsd_sashm,gt_kna1,gt_knvv.
ENDFORM. "winomkar

*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display_data .

wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'ZCREATED_ON'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'Creation Date'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'ZWSS_CODE'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'WSS Code'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'NAME1'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'WSS Name'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'ZITEM_CODE'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'Item Code'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'MAKTX'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'Item Name'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'UOM'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'UOM'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'SPART'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'Division'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'WERKS'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'Plant'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'PNAME'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'Plant Name'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'AUTO_PO_QTYF'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'AutoPO Qty (EA)'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'AUTOPO_CSQTYF'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'AutoPO Qty (CS)'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'PO_NO'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'PO No'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

IF cb2 = 'X'.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'ZSONO'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'SO No'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'ZSODT'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'SO Date'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'ZSOVAL'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'SO Value'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'ZSOUOM'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'SO UOM'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.

counter = counter + 1.
wa_fieldcat-col_pos = counter.
wa_fieldcat-fieldname = 'REMARKS'.
wa_fieldcat-tabname = 'GT_FINAL'.
wa_fieldcat-seltext_m = 'Remarks'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = wa_layout
it_fieldcat = it_fieldcat
" i_callback_user_command = 'USER_COMMAND'
TABLES
t_outtab = gt_final
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
*** Implement suitable error handling here
ENDIF.

ENDFORM. "display_data

*&---------------------------------------------------------------------*
*& Form get_form
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM create_so.

DELETE gt_final WHERE aufsd IS NOT INITIAL.


DELETE gt_final WHERE autopo_csqtyf LE 0.
LOOP AT gt_final ASSIGNING <gs_final> .
itab-vbkd_bstdk = sy-datum.
itab-vbkd_bsark = '0001' .
CLEAR gs_knvv.
READ TABLE gt_knvv INTO gs_knvv WITH KEY kunnr = <gs_final>-zwss_code vtweg =
'30' spart = '70' .
IF sy-subrc EQ 0.
itab-vbak_spart = '70'.
itab-vbak_vkorg = gs_knvv-vkorg.
itab-vbak_vtweg = gs_knvv-vtweg.
ELSE.
READ TABLE gt_knvv INTO gs_knvv WITH KEY kunnr = <gs_final>-zwss_code.
IF sy-subrc = 0.
itab-vbak_spart = gs_knvv-spart.
itab-vbak_vkorg = gs_knvv-vkorg.
itab-vbak_vtweg = gs_knvv-vtweg.
ENDIF.
ENDIF.
itab-vbkd_bstkd = <gs_final>-po_no .
itab-vbak_kunnr = <gs_final>-zwss_code .
itab-vbap_matnr = <gs_final>-zitem_code .
itab-vbap_kwmeng = <gs_final>-autopo_csqtyf.
itab-vbap_meins = <gs_final>-uom .
itab-vbap_werks = <gs_final>-werks .
itab-color = <gs_final>-zcolor .
APPEND itab TO itab.
CLEAR itab.
ENDLOOP.
LOOP AT itab INTO wa_datain_start.
wa_hdpodata-bstkd = wa_datain_start-vbkd_bstkd.
wa_hdpodata-bstdk = wa_datain_start-vbkd_bstdk.
wa_hdpodata-bsark = wa_datain_start-vbkd_bsark.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_hdpodata-bsark
IMPORTING
output = wa_hdpodata-bsark.
wa_hdpodata-auart = 'ZDDW'.
wa_hdpodata-vkorg = wa_datain_start-vbak_vkorg.
wa_hdpodata-vtweg = wa_datain_start-vbak_vtweg.
wa_hdpodata-spart = wa_datain_start-vbak_spart.
wa_hdpodata-kunnr = wa_datain_start-vbak_kunnr.
wa_hdpodata-matnr = wa_datain_start-vbap_matnr.
wa_hdpodata-kwmeng = wa_datain_start-vbap_kwmeng.
wa_hdpodata-meins = wa_datain_start-vbap_meins.
wa_hdpodata-werks = wa_datain_start-vbap_werks.
wa_hdpodata-color = wa_datain_start-color. "(+) Amit 26.04.2018
v_cnt = 0 .
CLEAR : s_vbeln." ,r_vbeln.
SELECT SINGLE vbeln INTO s_vbeln
FROM vbkd
WHERE bstkd = wa_hdpodata-bstkd.
IF sy-subrc <> 0 .
v_cnt1 = 0.
APPEND wa_hdpodata TO it_hdpodata.
ELSE.
wa_log-message = wa_hdpodata-bstkd.
CONCATENATE wa_log-message ' PO Already Exists' INTO wa_log-message.
wa_dataout-vbak_vbeln = wa_hdpodata-bstkd.
wa_dataout-vbkd_bstkd = wa_hdpodata-bstkd.
wa_dataout-vbkd_bstdk = wa_hdpodata-bstdk.
wa_dataout-vbkd_bsark = wa_hdpodata-bsark.
wa_dataout-vbak_vkorg = wa_hdpodata-vkorg.
wa_dataout-vbak_vtweg = wa_hdpodata-vtweg.
wa_dataout-vbak_spart = wa_hdpodata-spart.
wa_dataout-vbak_kunnr = wa_hdpodata-kunnr.
wa_dataout-vbap_matnr = wa_hdpodata-matnr.
wa_dataout-vbap_kwmeng = wa_hdpodata-kwmeng.
wa_dataout-vbap_meins = wa_hdpodata-meins.
wa_dataout-vbap_werks = wa_hdpodata-werks.
wa_dataout-flag = 'E'."wa_detpodata1-flag'.
wa_dataout-remark = wa_log-message.
APPEND wa_dataout TO it_dataout. "Changes BY AM
ENDIF.
IF wa_log IS NOT INITIAL.
APPEND wa_log TO it_log.
CLEAR: wa_log , v_cnt , v_cnt1.
ENDIF.
CLEAR: wa_hdpodata,wa_datain_start,v_cnt ,wa_dataout, s_vbeln .",r_vbeln..
ENDLOOP.

SORT it_hdpodata BY bstkd bstdk bsark.


it_detpodata[] = it_hdpodata[].
DELETE ADJACENT DUPLICATES FROM it_hdpodata COMPARING bstkd bstdk bsark.

*To get last date of current month for BAPI header data
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = sy-datum
IMPORTING
last_day_of_month = gv_monthend_dt
EXCEPTIONS
day_in_no_date = 1
OTHERS = 2.

LOOP AT it_hdpodata INTO wa_hdpodata.


REFRESH it_partners.
REFRESH it_items_in.
REFRESH it_items_inx.
REFRESH it_schedules_in.
REFRESH it_schedules_inx.
REFRESH it_return.

CLEAR : it_header_in.
CLEAR : it_header_inx.
CLEAR : it_partners.
CLEAR : it_items_in.
CLEAR : it_items_inx.
CLEAR : it_schedules_in.
CLEAR : it_schedules_inx.
CLEAR : it_return.
CLEAR : gv_counter.

*To populate data in BAPI header tables


it_header_in-doc_type = 'ZDDW'.
it_header_in-sales_org = wa_hdpodata-vkorg.
it_header_in-distr_chan = wa_hdpodata-vtweg.
it_header_in-division = wa_hdpodata-spart.
it_header_in-purch_date = wa_hdpodata-bstdk.
it_header_in-po_method = wa_hdpodata-bsark.
it_header_in-purch_no_c = wa_hdpodata-bstkd.
it_header_in-sd_doc_cat = 'C'.

it_header_inx-updateflag = 'I'.
it_header_inx-doc_type = 'X'.
it_header_inx-sales_org = 'X'.
it_header_inx-distr_chan = 'X'.
it_header_inx-division = 'X'.
it_header_inx-purch_date = 'X'.
it_header_inx-po_method = 'X'.
it_header_inx-purch_no_c = 'X'.
it_header_inx-sd_doc_cat = 'X'.

IF wa_hdpodata-kunnr IS NOT INITIAL.


gv_kunnr = wa_hdpodata-kunnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gv_kunnr
IMPORTING
output = gv_kunnr.
wa_hdpodata-kunnr = gv_kunnr.
CLEAR gv_kunnr.
ENDIF.
*BAPI header table preparation for customer data
wa_partners-partn_role = 'AG'.
wa_partners-partn_numb = wa_hdpodata-kunnr.
APPEND wa_partners TO it_partners.

wa_partners-partn_role = 'RE'.
wa_partners-partn_numb = wa_hdpodata-kunnr.
APPEND wa_partners TO it_partners.

wa_partners-partn_role = 'RG'.
wa_partners-partn_numb = wa_hdpodata-kunnr.
APPEND wa_partners TO it_partners.

wa_partners-partn_role = 'WE'.
wa_partners-partn_numb = wa_hdpodata-kunnr.
APPEND wa_partners TO it_partners.

****************** For Dummy simulation

MOVE-CORRESPONDING it_header_in TO wa_header_sim.


APPEND wa_header_sim TO it_header_sim.

CLEAR wa_partners_sim.
REFRESH it_partners_sim.

LOOP AT it_partners INTO wa_partners.


MOVE-CORRESPONDING wa_partners TO wa_partners_sim.
APPEND wa_partners_sim TO it_partners_sim.
CLEAR wa_partners_sim.
ENDLOOP.

****************** For Dummy simulation

*To populate data in BAPI Item tables


LOOP AT it_detpodata INTO wa_detpodata
WHERE bstkd = wa_hdpodata-bstkd
AND bstdk = wa_hdpodata-bstdk
AND bsark = wa_hdpodata-bsark.

gv_counter = gv_counter + 10.


wa_items_in-itm_number = gv_counter.
wa_detpodata-posnr = wa_items_in-itm_number.
MODIFY it_detpodata FROM wa_detpodata.

IF wa_detpodata-meins IS NOT INITIAL.


gv_meins = wa_detpodata-meins.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = gv_meins
language = sy-langu
IMPORTING
output = gv_meins
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
wa_detpodata-meins = gv_meins.
wa_items_in-target_qu = wa_detpodata-meins.
wa_items_in-sales_unit = wa_detpodata-meins.
CLEAR gv_meins.
ENDIF.

wa_items_in-material = wa_detpodata-matnr.
wa_items_in-plant = wa_detpodata-werks.
wa_items_in-target_qty = wa_detpodata-kwmeng.
wa_items_in-ref_1 = wa_detpodata-color. " (+) Amit 26.04.2018

****************** For Dummy simulation


CLEAR wa_items_sim.
REFRESH it_items_sim.

MOVE-CORRESPONDING wa_items_in TO wa_items_sim.


APPEND wa_items_sim TO it_items_sim.
****************** For Dummy simulation

wa_items_inx-itm_number = gv_counter.
wa_items_inx-updateflag = 'I'.
wa_items_inx-material = 'X'.
wa_items_inx-plant = 'X'.
wa_items_inx-target_qty = 'X'.
wa_items_inx-target_qu = 'X'.
wa_items_inx-sales_unit = 'X'.
wa_items_inx-ref_1 = 'X'. " (+) Amit 26.04.2018

wa_schedules_in-itm_number = gv_counter.
wa_schedules_in-req_qty = wa_detpodata-kwmeng.

****************** For Dummy simulation


CLEAR wa_schedules_sim.
REFRESH it_schedules_sim.

MOVE-CORRESPONDING wa_schedules_in TO wa_schedules_sim.


APPEND wa_schedules_sim TO it_schedules_sim.
****************** For Dummy simulation

wa_schedules_inx-itm_number = gv_counter.
wa_schedules_inx-updateflag = 'I'.
wa_schedules_inx-req_qty = 'X'.

****************** For Dummy simulation


CALL FUNCTION 'BAPI_SALESORDER_SIMULATE'
EXPORTING
order_header_in = wa_header_sim
IMPORTING
return = it_return_sim
TABLES
order_items_in = it_items_sim
order_partners = it_partners_sim
order_schedule_in = it_schedules_sim.

IF sy-subrc EQ 0 AND it_return_sim-type EQ 'E'.


wa_detpodata-flag = 'E'.
CONCATENATE it_return_sim-type it_return_sim-code it_return_sim-message
it_return_sim-log_no it_return_sim-log_msg_no
it_return_sim-message_v1 it_return_sim-message_v2
it_return_sim-message_v3 it_return_sim-message_v4
INTO wa_detpodata-remark.
* wa_detpodata-remark = 'Error'.
MODIFY it_detpodata FROM wa_detpodata.

ELSE.
APPEND wa_items_in TO it_items_in.
APPEND wa_items_inx TO it_items_inx.
APPEND wa_schedules_in TO it_schedules_in.
APPEND wa_schedules_inx TO it_schedules_inx.
ENDIF.
****************** For Dummy simulation
CLEAR:wa_detpodata.
CLEAR it_return_sim.

ENDLOOP.

IF it_items_in[] IS NOT INITIAL.


CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
* SALESDOCUMENTIN =
order_header_in = it_header_in
order_header_inx = it_header_inx
IMPORTING
salesdocument = gv_salesdocument
TABLES
return = it_return
order_items_in = it_items_in
order_items_inx = it_items_inx
order_partners = it_partners
order_schedules_in = it_schedules_in
order_schedules_inx = it_schedules_inx.

*BAPI Commit
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
WAIT UP TO 1 SECONDS.
ENDIF.
* MOVE-CORRESPONDING header data TO it_log.
wa_log-bstkd = wa_hdpodata-bstkd.
wa_log-bstdk = wa_hdpodata-bstdk.
wa_log-bsark = wa_hdpodata-bsark.
* wa_log-auart = wa_hdpodata-auart.
wa_log-vkorg = wa_hdpodata-vkorg.
wa_log-vtweg = wa_hdpodata-vtweg.
wa_log-spart = wa_hdpodata-spart.
wa_log-kunnr = wa_hdpodata-kunnr.

*Move Quotation no.(if created),flag('S' or 'E') and remark to it_log table


IF gv_salesdocument IS NOT INITIAL.
wa_log-vbeln = gv_salesdocument.
wa_log-flag = 'S'.
wa_log-message = 'Order created successfully'.
it_log1-tcode = sy-tcode.
* it_log1-filename = p1.
it_log1-uname = sy-uname.
it_log1-dat = sy-datum.
it_log1-time = sy-timlo.
APPEND it_log1.
MODIFY zpi_log FROM it_log1.
CLEAR it_log1.

ELSE.
wa_log-flag = 'E'.
SORT it_return BY type.
LOOP AT it_return INTO wa_return WHERE type EQ 'E'.
IF wa_log-message IS INITIAL.
wa_log-message = wa_return-message.
ELSE.
CONCATENATE wa_log-message wa_return-message INTO wa_log-message
SEPARATED BY ','.
ENDIF.
CLEAR wa_return.
ENDLOOP.
ENDIF.
IF wa_log IS NOT INITIAL.
APPEND wa_log TO it_log.
CLEAR: wa_log.
ENDIF.
CLEAR wa_hdpodata.
ENDLOOP.

it_detpodata1[] = it_detpodata[].

* Update final table for BAPI related outbound data


IF it_log[] IS NOT INITIAL.
LOOP AT it_detpodata1 INTO wa_detpodata1 ."WHERE flag NE 'E'.
READ TABLE it_log INTO wa_log
WITH KEY bstkd = wa_detpodata1-bstkd
bstdk = wa_detpodata1-bstdk
bsark = wa_detpodata1-bsark.
IF sy-subrc = 0.
wa_detpodata1-vbeln = wa_log-vbeln.
wa_detpodata1-flag = wa_log-flag.
IF wa_detpodata1-remark IS INITIAL.
wa_detpodata1-remark = wa_log-message.
ELSE.
CONCATENATE wa_detpodata1-remark wa_log-message
INTO wa_detpodata1-remark SEPARATED BY ','.
ENDIF.
ENDIF.

MODIFY it_detpodata1 FROM wa_detpodata1


TRANSPORTING vbeln flag remark.
CLEAR: wa_detpodata1,wa_log.
ENDLOOP.
ENDIF.

LOOP AT it_detpodata1 INTO wa_detpodata1.


wa_dataout-vbak_vbeln = wa_detpodata1-vbeln.
wa_dataout-vbkd_bstkd = wa_detpodata1-bstkd.
wa_dataout-vbkd_bstdk = wa_detpodata1-bstdk.
wa_dataout-vbkd_bsark = wa_detpodata1-bsark.
wa_dataout-vbak_vkorg = wa_detpodata1-vkorg.
wa_dataout-vbak_vtweg = wa_detpodata1-vtweg.
wa_dataout-vbak_spart = wa_detpodata1-spart.
wa_dataout-vbak_kunnr = wa_detpodata1-kunnr.
wa_dataout-vbap_matnr = wa_detpodata1-matnr.
wa_dataout-vbap_kwmeng = wa_detpodata1-kwmeng.
wa_dataout-vbap_meins = wa_detpodata1-meins.
wa_dataout-vbap_werks = wa_detpodata1-werks.
wa_dataout-flag = wa_detpodata1-flag.
wa_dataout-remark = wa_detpodata1-remark.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
input = wa_dataout-vbak_kunnr
IMPORTING
output = vwss.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_detpodata1-vbeln
IMPORTING
output = vbln.
APPEND wa_dataout TO it_dataout.
SELECT SINGLE netwr INTO vnetwr
FROM vbap
WHERE vbeln = vbln
AND matnr = wa_detpodata1-matnr.

IF sy-subrc = 0.
CLEAR : gs_final.
READ TABLE gt_final INTO gs_final WITH KEY po_no = wa_detpodata1-bstkd
zwss_code = vwss zitem_code = wa_detpodata1-matnr.
IF sy-subrc = 0.
gs_final-zsono = vbln.
gs_final-zsodt = sy-datum.
gs_final-zsoval = vnetwr.
gs_final-zsouom = wa_detpodata1-meins.
gs_final-remarks = wa_detpodata1-remark.
MODIFY gt_final FROM gs_final TRANSPORTING zsono zsodt zsoval zsouom
remarks
WHERE po_no = wa_detpodata1-bstkd
AND zwss_code = vwss
AND zitem_code = wa_detpodata1-matnr.
ENDIF.
* UPDATE zsd_autopo_planb SET zsono = vbln
* zsodt = sy-datum
* zsoval = vnetwr
* zsouom = wa_detpodata1-meins
* remarks = wa_detpodata1-remark
* WHERE po_no = wa_detpodata1-bstkd
* AND zwss_code = vwss
* AND zitem_code = wa_detpodata1-matnr.
ELSE.
CLEAR : gs_final.
READ TABLE gt_final INTO gs_final WITH KEY po_no = wa_detpodata1-bstkd
zwss_code = vwss zitem_code = wa_detpodata1-matnr.
IF sy-subrc = 0.
gs_final-remarks = wa_detpodata1-remark.
MODIFY gt_final FROM gs_final TRANSPORTING remarks WHERE po_no =
wa_detpodata1-bstkd AND zwss_code = vwss AND zitem_code = wa_detpodata1-matnr.
ENDIF.
* UPDATE zsd_autopo_planb SET remarks = wa_detpodata1-remark
* WHERE po_no = wa_detpodata1-bstkd
* AND zwss_code = vwss
* AND zitem_code = wa_detpodata1-matnr.
ENDIF.
COMMIT WORK.
CLEAR : vnetwr,vbln.
ENDLOOP.
IF gt_final[] IS NOT INITIAL.
MODIFY zsd_autopo_planb FROM TABLE gt_final.
ENDIF.
it_output-auto_and_push_poresult-data[] = it_dataout[].

CREATE OBJECT o_proxy.


TRY.
CALL METHOD o_proxy->si_auto_and_push_poresult_out
EXPORTING
output = it_output.
COMMIT WORK.
CATCH cx_ai_system_fault INTO l_sys_exc.
CATCH cx_ai_application_fault INTO l_app_exc.
CATCH cx_sy_ref_is_initial INTO l_ref_init.
ENDTRY.

* Error handling
IF l_sys_exc IS NOT INITIAL .
l_exception_msg = l_sys_exc->get_text( ).
WRITE : 'System Error :' ,l_exception_msg.
ELSEIF l_app_exc IS NOT INITIAL.
l_exception_msg1 = l_app_exc->get_text( ).
WRITE : 'Appln Error :' ,l_exception_msg1.
* ELSE.
* PERFORM display_data.
" WRITE 'Executed Successfully - Data Sent to PI'.
ENDIF.

ENDFORM. "get_form

*&---------------------------------------------------------------------*
*& Form SEND_EMAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM send_email.

ENDFORM. "SEND_EMAIL

S-ar putea să vă placă și