Tuesday, June 07, 2005

INCLUDE ZPP_UPLOAD_PROD_PLAN_INCLUDE

INCLUDE .
*----------------------------------------------------------------------*
***INCLUDE ZPP_UPLOAD_PROD_PLAN_INCLUDE .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form UPLOAD_FILES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_files.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = fileplan
filetype = 'DAT'
TABLES
data_tab = pplan
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
OTHERS = 10.
IF sy-subrc NE 0.
WRITE:/ icon_message_error AS ICON,fileplan ,' açarken hata.'.
EXIT.
ENDIF.
ENDFORM. " UPLOAD_FILES

*&---------------------------------------------------------------------*
*& Form CHECK_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_data.

LOOP AT pplan.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = pplan-matnr
IMPORTING
output = pplan-matnr
* EXCEPTIONS
* LENGTH_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
MODIFY pplan.
ENDLOOP.


LOOP AT pplan.
CHECK sy-tabix > 1.
CLEAR : marc.
SELECT SINGLE * FROM marc WHERE matnr = pplan-matnr
AND werks = pplan-werks.
IF sy-subrc >< 0.
err = 'X'.
WRITE:/ pplan-matnr, pplan-werks, 'mevcut değil'.
ENDIF.
IF marc-pstat CA 'D'.
ELSE.
err = 'X'.
WRITE:/ pplan-matnr, pplan-werks, 'MİP Ekranı yok'.
ENDIF.

CLEAR: i_stb.
REFRESH: i_stb.

CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
ftrel = ' '
altvo = ' '
aufsw = ' '
aumgb = ' '
aumng = 0
auskz = ' '
amind = ' '
bagrp = ' '
beikz = ' '
bessl = ' '
bgixo = ' '
brems = ' '
capid = 'PP01'
cospr = ' '
cuobj = 0
cuols = ' '
datuv = sy-datum
delnl = ' '
ehndl = ' '
emeng = 0
erskz = ' '
erssl = ' '
fbstp = ' '
knfba = ' '
ksbvo = ' '
mbwls = ' '
mktls = 'X'
mdmps = ' '
mehrs = 'X'
mkmat = ' '
mmaps = ' '
salww = ' '
splww = ' '
mmory = ' '
mtnrv = pplan-matnr
postp = ' '
rndkz = ' '
rvrel = ' '
sanfr = ' '
sanin = ' '
sanka = ' '
sanko = ' '
sanvs = ' '
schgt = ' '
stkkz = ' '
stlal = '01'
stlan = ' '
werks = pplan-werks
norvl = ' '
mdnot = ' '
panot = ' '
verid = ' '
* IMPORTING
* TOPMAT =
* DSTST =
TABLES
stb = i_stb
* MATCAT =
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9.

IF sy-subrc EQ 0.

LOOP AT i_stb.
CLEAR : marc.
SELECT SINGLE * FROM marc WHERE matnr = i_stb-idnrk
AND werks = i_stb-werks.
IF marc-pstat CA 'D'.
ELSE.
err = 'X'.
WRITE:/ '_________________', pplan-matnr, pplan-werks,
i_stb-idnrk, 'MİP Ekranı yok'.
ENDIF.

ENDLOOP.
ENDIF.



ENDLOOP.



ENDFORM. " CHECK_DATA
*&---------------------------------------------------------------------*
*& Form CREATE_PPLAN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_pplan.
PERFORM popup_to_inform.
********** production plan *************
LOOP AT pplan WHERE werks NE space.
IF sy-tabix = 1. "başlık bilgilerini oku
MOVE-CORRESPONDING pplan TO tplan.
ELSE.
PERFORM create_pplan_item_new.
ENDIF.
ENDLOOP.

DATA: e_message LIKE msglog-txt .
e_message = 'ÜY alanı boş' .
LOOP AT pplan WHERE werks EQ space.
PERFORM add_log USING pplan-matnr e_message.
ENDLOOP.
ENDFORM. " CREATE_PPLAN
*&---------------------------------------------------------------------*
*& Form CREATE_PPLAN_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_pplan_item.
DATA: amount LIKE x60et-plnmg.
DATA: beg_day LIKE x60et-edatu.
DATA: pweek LIKE scal-week.
REFRESH x60bl.
REFRESH x60et.
PERFORM create_item_header.
g_pos = 1.
DO VARYING amount FROM pplan-f1 NEXT pplan-f2.
MOVE amount TO x60et-plnmg.
IF amount(1) EQ space. "miktarsızları es geç
CONTINUE.
ENDIF.
* pweek = beg_week + g_pos - 1. "locate week

IF sy-index LE pnweek.
PERFORM hafta_hesapla USING beg_week sy-index CHANGING pweek.
* move 'W' to x60et-entlu.
MOVE 'T' TO x60et-entlu. "daily requirement
CALL FUNCTION 'WEEK_GET_FIRST_DAY'
EXPORTING
week = pweek
IMPORTING
date = x60et-edatu
EXCEPTIONS
week_invalid = 1
OTHERS = 2.

IF sy-subrc EQ 0.
* OD 15/04 haftanın 2.günü olacak PZTESI --> ÇARŞAMBA
ADD 2 TO x60et-edatu.
APPEND x60et.
ELSE.
WRITE:/ icon_message_error AS ICON, ' date convertion'.
ENDIF.
ELSE.
IF sy-index LE 27.
PERFORM ay_hesapla USING sy-index CHANGING x60et-edatu.
MOVE 'M' TO x60et-entlu. "KALAN AYLAR İÇİN GİRİŞLER
APPEND x60et.
ELSE.
EXIT.
ENDIF.
ENDIF.
g_pos = g_pos + 1.
ENDDO.

CALL FUNCTION 'REQUIREMENTS_CREATE'
EXPORTING
e60bl = x60bl
" EPRASTA = ' '
" EDELET = 'X'
" ELANGU = 'D'
" MSG_LOG = ' '
TABLES
e60et = x60et
proto = proto
EXCEPTIONS
requirement_not_found = 01
calendar_id_missing = 02
calendar_not_found = 03
date_after_range = 04
date_before_range = 05
date_invalid = 06
date_option_invalid = 07
t009b_not_found = 08
no_data = 09
period_invalid = 10.
IF sy-subrc NE 0.
CASE sy-subrc.
WHEN 1.
PERFORM add_log USING pplan-matnr ', requirement_not_found'.
WHEN 2.
PERFORM add_log USING pplan-matnr ', calendar_id_missing'.
WHEN 3.
PERFORM add_log USING pplan-matnr ', calendar_not_found'.
WHEN 4.
PERFORM add_log USING pplan-matnr ', date_after_range'.
WHEN 5.
PERFORM add_log USING pplan-matnr ', date_before_range'.
WHEN 6.
PERFORM add_log USING pplan-matnr ', date_invalid'.
WHEN 7.
PERFORM add_log USING pplan-matnr ', date_option_invalid'.
WHEN 8.
PERFORM add_log USING pplan-matnr ', t009b_not_found'.
WHEN 9.
PERFORM add_log USING pplan-matnr ', no_data'.
WHEN 10.
PERFORM add_log USING pplan-matnr ' period_invalid'.
ENDCASE.
ENDIF.
ENDFORM. " CREATE_PPLAN_ITEM
*&---------------------------------------------------------------------*
*& Form REPORT_ERRORS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM report_errors.

if err is initial and msglog[] is initial.
write:/ ICON_ACTION_SUCCESS AS ICON, 'Program başarıyla çalıştı'.
else.
write:/ icon_message_error AS ICON, 'Hatalar Oluştu'.
endif.

LOOP AT msglog.
WRITE:/ msglog-matnr, msglog-txt.
ENDLOOP.

ENDFORM. " REPORT_ERRORS

*&---------------------------------------------------------------------*
*& Form ADD_LOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PPLAN_MATNR text *
* -->P_0241 text *
*----------------------------------------------------------------------*
FORM add_log USING p_pplan_matnr
value(p_0241).
msglog-matnr = p_pplan_matnr.
msglog-txt = p_0241.
APPEND msglog.
ENDFORM. " ADD_LOG
*&---------------------------------------------------------------------*
*& Form HAFTA_HESAPLA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_BEG_WEEK text *
* -->P_G_POS text *
* <--P_PWEEK text *
*----------------------------------------------------------------------*
FORM hafta_hesapla USING p_beg_week
p_g_pos
CHANGING p_pweek.
DATA: yr(4),wk(2),tmp(7),mt(2).

PERFORM getdate USING p_g_pos CHANGING tmp.
yr = tmp+3(4). mt = tmp(2).
CONCATENATE yr mt INTO p_pweek.
ENDFORM. " HAFTA_HESAPLA
*&---------------------------------------------------------------------*
*& Form CREATE_ITEM_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_item_header.
DATA: l TYPE i,pos TYPE i,wa LIKE x60bl-matnr.


IF pplan-matnr CO '0123456789 ' .
l = STRLEN( pplan-matnr ). pos = 18 - l.
wa = '000000000000000000'.
wa+pos(l) = pplan-matnr.
ELSE.
wa = pplan-matnr.
ENDIF.
* overlay wa with pplan-matnr only '0'.
* create header material, version and planname
MOVE wa TO x60bl-matnr.
MOVE pplan-werks TO x60bl-werks.
MOVE 'VSF' TO x60bl-bedae. "lsf --> Bsf --> Vsf
MOVE 'X' TO x60bl-vervs.
MOVE versb TO x60bl-versb.
MOVE planname TO x60bl-pbdnr.
APPEND x60bl.

ENDFORM. " CREATE_ITEM_HEADER

*&---------------------------------------------------------------------*
*& Form GETDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_TMP text *
*----------------------------------------------------------------------*
FORM getdate USING p_g_pos CHANGING tmp.
CASE p_g_pos.
WHEN 1.
tmp = tplan-f1.
WHEN 2.
tmp = tplan-f2.
WHEN 3.
tmp = tplan-f3.
WHEN 4.
tmp = tplan-f4.
WHEN 5.
tmp = tplan-f5.
WHEN 6.
tmp = tplan-f6.
WHEN 7.
tmp = tplan-f7.
WHEN 8.
tmp = tplan-f8.
WHEN 9.
tmp = tplan-f9.
WHEN 10.
tmp = tplan-f10.
WHEN 11.
tmp = tplan-f11.
WHEN 12.
tmp = tplan-f12.
WHEN 13.
tmp = tplan-f13.
WHEN 14.
tmp = tplan-f14.
WHEN 15.
tmp = tplan-f15.
WHEN 16.
tmp = tplan-f16.
WHEN 17.
tmp = tplan-f17.
WHEN 18.
tmp = tplan-f18.
WHEN 19.
tmp = tplan-f19.
WHEN 20.
tmp = tplan-f20.
WHEN 21.
tmp = tplan-f21.
WHEN 22.
tmp = tplan-f22.
WHEN 23.
tmp = tplan-f23.
WHEN 24.
tmp = tplan-f24.
WHEN 25.
tmp = tplan-f25.
WHEN 26.
tmp = tplan-f26.
WHEN 27.
tmp = tplan-f27.
WHEN OTHERS.
tmp = '*ERROR*'.
WRITE:/ 'oops.'.
EXIT.
ENDCASE.

ENDFORM. " GETDATE
*&---------------------------------------------------------------------*
*& Form AY_HESAPLA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SY_INDEX text *
* <--P_X60ET_EDATU text *
*----------------------------------------------------------------------*
FORM ay_hesapla USING p_sy_index
CHANGING p_x60et_edatu.
DATA: yr(4),wk(2),tmp(7),mt(2).

PERFORM getdate USING p_sy_index CHANGING tmp.
yr = tmp+3(4). mt = tmp(2).
CONCATENATE yr mt '01' INTO p_x60et_edatu.
ENDFORM. " AY_HESAPLA
*&---------------------------------------------------------------------*
*& Form DEACTIVATE_PLAN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM deactivate_plan.
DATA: xpbim LIKE TABLE OF pbim WITH HEADER LINE.
DATA: ret LIKE TABLE OF bapireturn1 WITH HEADER LINE.
DATA: req_schedule LIKE TABLE OF bapisshdin WITH HEADER LINE.
DATA: req_out LIKE TABLE OF bapisitmeo WITH HEADER LINE.


SELECT * FROM pbim
APPENDING CORRESPONDING FIELDS OF TABLE xpbim
WHERE pbdnr EQ oldplan .
* AND WERKS EQ WERKS.

IF sy-subrc NE 0.
WRITE:/ icon_message_error AS ICON,oldplan ,'mevcut değil.'.
ENDIF.

LOOP AT xpbim.
* read PLAN
CALL FUNCTION 'BAPI_REQUIREMENTS_GETDETAIL'
EXPORTING
material = xpbim-matnr
plant = xpbim-werks
requirementstype = xpbim-bedae
version = xpbim-versb
reqmtsplannumber = oldplan
TABLES
requirements_out = req_out
return = ret
EXCEPTIONS
OTHERS = 1.

IF sy-subrc NE 0.
WRITE:/ icon_message_error AS ICON,' İhtiyaçları okuyamıyorum'.
LOOP AT ret.
WRITE:/ ret.
ENDLOOP.
ENDIF.

* copy plan values
LOOP AT req_out.
MOVE-CORRESPONDING req_out TO req_schedule.
APPEND req_schedule.
ENDLOOP.

* change PLAN
CALL FUNCTION 'BAPI_REQUIREMENTS_CHANGE'
EXPORTING
material = xpbim-matnr
plant = xpbim-werks
requirementstype = xpbim-bedae
version = xpbim-versb
reqmtsplannumber = oldplan
vers_activ = ' ' "deactivate
* REQUIREMENT_PARAM =
* IMPORTING
* REQUIREMENT_ITEM_OUT =
TABLES
requirements_schedule_in = req_schedule
* REQUIREMENTS_CHAR_IN =
return = ret
EXCEPTIONS
OTHERS = 1.

IF sy-subrc NE 0.
WRITE:/ icon_message_error AS ICON,' İhtiyaçları değiştiremiyorum'.
LOOP AT ret.
WRITE:/ ret.
ENDLOOP.
ENDIF.

ENDLOOP.

ENDFORM. " DEACTIVATE_PLAN

*{ INSERT DUPK902810 1
*&---------------------------------------------------------------------*
*& Form CREATE_PPLAN_ITEm_new
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_pplan_item_new .
DATA : requirements_item LIKE bapisitemr,
requirement_param LIKE cm60r,
requirements_schedule_in LIKE bapisshdin OCCURS 10 WITH HEADER LINE,
requirements_char_in LIKE bapischarr OCCURS 10 WITH HEADER LINE,
return LIKE bapireturn1 OCCURS 10 WITH HEADER LINE.


DATA: amount LIKE x60et-plnmg.
DATA: beg_day LIKE x60et-edatu.
DATA: pweek LIKE scal-week.
REFRESH x60bl.
REFRESH x60et.
PERFORM create_item_header.
g_pos = 1.
DO VARYING amount FROM pplan-f1 NEXT pplan-f2.
MOVE amount TO x60et-plnmg.
IF amount(1) EQ space. "miktarsızları es geç
CONTINUE.
ENDIF.
* pweek = beg_week + g_pos - 1. "locate week

IF sy-index LE pnweek.
PERFORM hafta_hesapla USING beg_week sy-index CHANGING pweek.
* move 'W' to x60et-entlu.
* MOVE 'T' TO X60ET-ENTLU. "daily requirement
MOVE '1' TO x60et-entlu. "daily requirement
CALL FUNCTION 'WEEK_GET_FIRST_DAY'
EXPORTING
week = pweek
IMPORTING
date = x60et-edatu
EXCEPTIONS
week_invalid = 1
OTHERS = 2.

IF sy-subrc EQ 0.
* OD 15/04 haftanın 2.günü olacak PZTESI --> ÇARŞAMBA
* ADD 2 TO X60ET-EDATU.
APPEND x60et.
ELSE.
WRITE:/ icon_message_error AS ICON, ' date convertion'.
ENDIF.
ELSE.
IF sy-index LE 27.
PERFORM ay_hesapla USING sy-index CHANGING x60et-edatu.
* MOVE 'M' TO X60ET-ENTLU. "KALAN AYLAR İÇİN GİRİŞLER
MOVE '2' TO x60et-entlu.
APPEND x60et.
ELSE.
EXIT.
ENDIF.
ENDIF.
g_pos = g_pos + 1.
ENDDO.

requirements_item-material = x60bl-matnr.
requirements_item-plant = x60bl-werks.
requirements_item-requ_type = x60bl-bedae.
requirements_item-version = x60bl-versb.
requirements_item-vers_activ = x60bl-vervs.
requirements_item-req_number = x60bl-pbdnr.

LOOP AT x60et.
requirements_schedule_in-date_type = x60et-entlu.
requirements_schedule_in-req_date = x60et-edatu.
requirements_schedule_in-req_qty = x60et-plnmg.


*----------------------------------------------------------------------*
*-- miktar çevrimi
DATA: input TYPE f,
meins LIKE mara-meins,
meinh LIKE marm-meinh,
output TYPE f ,
lv_qty TYPE i .

CLEAR meins .
SELECT SINGLE meins INTO meins
FROM mara
WHERE matnr EQ requirements_item-material .

meinh = 'KG' .
input = requirements_schedule_in-req_qty * 1000 .

CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
EXPORTING
input = input
kzmeinh = 'X'
matnr = requirements_item-material
meinh = meinh
meins = meins
* EXTENDED_CONV = ' '
* TYPE_UMR = ' '
* NO_OUTPUT = ' '
* CHARGE =
* CHARG_CUOBJ =
* WERKS =
IMPORTING
* ADDKO =
* MEINS =
output = output .

CLEAR lv_qty .
lv_qty = output .
requirements_schedule_in-req_qty = lv_qty .

*----------------------------------------------------------------------*

APPEND requirements_schedule_in.
ENDLOOP.




* IF p_sim = 'X'.
*
* CALL FUNCTION 'BAPI_REQUIREMENTS_SIMULATE'
* EXPORTING
* material = requirements_item-material
* plant = requirements_item-plant
* requirementstype = requirements_item-requ_type
* version = requirements_item-version
* reqmtsplannumber = requirements_item-req_number
* vers_activ = requirements_item-vers_activ
* mrp_area = requirements_item-mrp_area
** IMPORTING
** REQUIREMENT_ITEM_OUT =
* TABLES
* requirements_schedule_in = requirements_schedule_in
** REQUIREMENTS_SCHEDULE_OUT =
** REQUIREMENTS_CHAR_IN =
* return = return .
*
* LOOP AT return WHERE type = 'E' OR type = 'A'.
*
* PERFORM add_log USING pplan-matnr return-message.
*
* ENDLOOP.
*
*
*
* ELSE.

CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE'
EXPORTING
requirements_item = requirements_item
* REQUIREMENT_PARAM =
* IMPORTING
* MATERIAL =
* PLANT =
* REQUIREMENTSTYPE =
* VERSION =
* REQMTSPLANNUMBER =
* MRP_AREA =
TABLES
requirements_schedule_in = requirements_schedule_in
* REQUIREMENTS_CHAR_IN =
return = return
.

LOOP AT return WHERE type = 'E' OR type = 'A'.

PERFORM add_log USING pplan-matnr return-message.

ENDLOOP.
* ENDIF.

ENDFORM. " CREATE_PPLAN_ITEm_new

*} INSERT
*&---------------------------------------------------------------------*
*& Form popup_to_inform
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM popup_to_inform .

* IF p_sim = 'X'.
*
* CALL FUNCTION 'POPUP_TO_INFORM'
* EXPORTING
* titel = 'Dikkat'
* txt1 = 'Program Simülasyon modunda çalışıyor.'
* txt2 = 'kayıtlar yaratılmayacak'
** TXT3 = ' '
** TXT4 = ' '
* .
* ENDIF.
ENDFORM. " popup_to_inform

ZPPH_UPLOAD_PROD_PLAN

REPORT ZPPH_UPLOAD_PROD_PLAN .
**********SELECTION SCREEN*******************************************

SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-BL1.
PARAMETERS:
AKT AS CHECKBOX DEFAULT 'X',
PLANNAME LIKE RM60X-PBDNR,
FILEPLAN LIKE RLGRAP-FILENAME,
VERSB LIKE B60BL-VERSB DEFAULT '00',
* WERKS LIKE B60BL-WERKS DEFAULT 'GONF',
PNWEEK(2) DEFAULT '14'.
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-BL2.
PARAMETERS:
DEAKT AS CHECKBOX,
OLDPLAN LIKE RM60X-PBDNR.
SELECTION-SCREEN END OF BLOCK BL2.
*parameters : p_sim radiobutton group rad1,
* p_run radiobutton group rad1.
data : err.
TABLES:
MARA,
MARC.
*****************************D A T A**********************************
** data
TABLES: PBIM.
DATA: BEG_WEEK LIKE B60ET-EDATU.
DATA: BEGIN OF X60ET OCCURS 1 .
INCLUDE STRUCTURE B60ET.
DATA: END OF X60ET.

DATA: BEGIN OF X60BL OCCURS 1 .
INCLUDE STRUCTURE B60BL.
DATA: END OF X60BL.

DATA: BEGIN OF PROTO OCCURS 1.
INCLUDE STRUCTURE PBMSG.
DATA: END OF PROTO.
** production plan
DATA: BEGIN OF PPLAN OCCURS 0,
MATNR LIKE X60BL-MATNR,
WERKS LIKE X60BL-WERKS,
MATTXT(100),
F1 LIKE X60ET-PLNMG,
F2 LIKE X60ET-PLNMG,
F3 LIKE X60ET-PLNMG,
F4 LIKE X60ET-PLNMG,
F5 LIKE X60ET-PLNMG,
F6 LIKE X60ET-PLNMG,
F7 LIKE X60ET-PLNMG,
F8 LIKE X60ET-PLNMG,
F9 LIKE X60ET-PLNMG,
F10 LIKE X60ET-PLNMG,
F11 LIKE X60ET-PLNMG,
F12 LIKE X60ET-PLNMG,
F13 LIKE X60ET-PLNMG,
F14 LIKE X60ET-PLNMG,
F15 LIKE X60ET-PLNMG,
F16 LIKE X60ET-PLNMG,
F17 LIKE X60ET-PLNMG,
F18 LIKE X60ET-PLNMG,
F19 LIKE X60ET-PLNMG,
F20 LIKE X60ET-PLNMG,
F21 LIKE X60ET-PLNMG,
F22 LIKE X60ET-PLNMG,
F23 LIKE X60ET-PLNMG,
F24 LIKE X60ET-PLNMG,
F25 LIKE X60ET-PLNMG,
F26 LIKE X60ET-PLNMG,
F27 LIKE X60ET-PLNMG,
FFF LIKE X60ET-PLNMG,
END OF PPLAN,
TPLAN LIKE PPLAN.
*************message log
DATA: BEGIN OF MSGLOG OCCURS 10,
MATNR LIKE MARA-MATNR,
WERKS LIKE MSEG-WERKS,
TXT(100),
END OF MSGLOG.
DATA: G_POS(3) VALUE 0.

DATA: BEGIN OF I_STB OCCURS 0.
INCLUDE STRUCTURE STPOX.
DATA: END OF I_STB.



data: WERKS LIKE B60BL-WERKS value 'HNDE' .

AT SELECTION-SCREEN ON VALUE-REQUEST FOR FILEPLAN.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
STATIC = 'X'
CHANGING
FILE_NAME = FILEPLAN.

END-OF-SELECTION.
IF AKT EQ 'X'.
PERFORM UPLOAD_FILES.
PERFORM CHECK_DATA.
check err is initial.
PERFORM CREATE_PPLAN.
ENDIF.
IF DEAKT EQ 'X'.
PERFORM DEACTIVATE_PLAN.
ENDIF.
PERFORM REPORT_ERRORS.

INCLUDE ZPPH_UPLOAD_PROD_PLAN_INCLUDE.
* INCLUDE ZPP_UPLOAD_PROD_PLAN_INCLUDE.

ZMM_BATCH_CREATE

*&---------------------------------------------------------------------*
*& Report ZMM_BATCH_CREATE *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

REPORT ZMM_BATCH_CREATE .

TYPE-POOLS: slis.
*----------------------------------------------------------------------
* Deklaration der globalen Variablen
*----------------------------------------------------------------------
DATA:
g_repid LIKE sy-repid.

*** Fuer ALV
DATA:
* Feldkatalog fuer ALV
gt_fieldcat TYPE slis_t_fieldcat_alv,
* Callback routines
g_status_set TYPE slis_formname VALUE 'SET_STATUS',
g_user_command TYPE slis_formname VALUE 'USER_COMMAND',
* List layout description
gs_layout TYPE slis_layout_alv,
* Funktionscodes, die vom Status ausgeschlossen werden sollen
gt_excluding TYPE slis_t_extab.
DATA : BEGIN OF i_tab OCCURS 100,
matnr LIKE mara-matnr, "Malzeme numarası
BATCH like BAPIBATCHKEY-BATCH, "Batch
werks LIKE marc-werks. "Üretim yeri
DATA : END OF i_tab.

DATA : BEGIN OF result OCCURS 100,
material LIKE bapimathead-material, "Malzeme numarası
plant LIKE bapi_marc-plant, "Üretim yeri
type LIKE bapiret2-type ,
message LIKE bapiret2-message.
DATA : END OF result.


DATA : return LIKE bapiret2 occurs 100 with header line.
DATA : fname(256).

DATA : pc_file TYPE string.


PARAMETERS: p_file(128) DEFAULT 'c:\batch.txt' LOWER CASE
OBLIGATORY.




START-OF-SELECTION.

PERFORM upload_itab.
PERFORM run_bapi.
perform write_result.

*&---------------------------------------------------------------------*
*& Form upload_itab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form upload_itab .
pc_file = p_file.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = pc_file
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = i_tab
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
gui_refuse_filetransfer = 8
OTHERS = 9.

endform. " upload_itab
*&---------------------------------------------------------------------*
*& Form run_bapi
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form run_bapi .
loop at i_tab.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = i_tab-matnr
IMPORTING
output = i_tab-matnr.

CALL FUNCTION 'BAPI_BATCH_CREATE'
EXPORTING
material = i_tab-matnr
BATCH = i_tab-batch
PLANT = i_tab-werks
* BATCHATTRIBUTES =
* BATCHCONTROLFIELDS =
* BATCHSTORAGELOCATION =
* INTERNALNUMBERCOM =
* EXTENSION1 =
* IMPORTING
* BATCH =
* BATCHATTRIBUTES =
TABLES
RETURN = return
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.



loop at return.
MOVE-CORRESPONDING i_tab TO result.
MOVE-CORRESPONDING return TO result.
APPEND result. CLEAR result.
endloop.

endloop.
endform. " run_bapi
*&---------------------------------------------------------------------*
*& Form write_result
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form write_result .
g_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = g_repid
i_internal_tabname = 'RESULT'
i_inclname = g_repid
CHANGING
ct_fieldcat = gt_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.



CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
* i_callback_pf_status_set = g_status_set
* i_callback_user_command = g_user_command
* is_layout = gs_layout
it_fieldcat = gt_fieldcat
TABLES
t_outtab = result
EXCEPTIONS
program_error = 1
OTHERS = 2.


endform. " write_result

ZPP_MATERIAL_CREATE

*&---------------------------------------------------------------------*
*& Report ZPP_MATERIAL_CREATE *
*& *
*&---------------------------------------------------------------------*
*& asd
*
*& *
*&---------------------------------------------------------------------*
REPORT zpp_material_create .
TYPE-POOLS: slis.
TABLES : bapimathead, bapi_marc, bapi_mbew, makt.

DATA : headdata LIKE bapimathead.
DATA : plantdata LIKE bapi_marc.
DATA : plantdatax LIKE bapi_marcx.
DATA : valuationdata LIKE bapi_mbew.
DATA : valuationdatax LIKE bapi_mbewx.
DATA : storagelocationdata LIKE bapi_mard.
DATA : storagelocationdatax LIKE bapi_mardx.
DATA : return LIKE bapiret2.
DATA : fname(256).

*----------------------------------------------------------------------
* Deklaration der globalen Variablen
*----------------------------------------------------------------------
DATA:
g_repid LIKE sy-repid.

*** Fuer ALV
DATA:
* Feldkatalog fuer ALV
gt_fieldcat TYPE slis_t_fieldcat_alv,
* Callback routines
g_status_set TYPE slis_formname VALUE 'SET_STATUS',
g_user_command TYPE slis_formname VALUE 'USER_COMMAND',
* List layout description
gs_layout TYPE slis_layout_alv,
* Funktionscodes, die vom Status ausgeschlossen werden sollen
gt_excluding TYPE slis_t_extab.




DATA : BEGIN OF i_tab OCCURS 100,
matl_type LIKE bapimathead-matl_type, "Malzeme türü
material LIKE bapimathead-material, "Malzeme numarası
maktxx LIKE makt-maktx, "Malzeme tanımı
plant LIKE bapi_marc-plant, "Üretim yeri
mrp_type LIKE bapi_marc-mrp_type, "MİP karakteristiği
mrp_ctrler LIKE bapi_marc-mrp_ctrler, "MİP sorumlusu
lotsizekey LIKE bapi_marc-lotsizekey, "MİP parti büyüklüğü
minlotsize LIKE bapi_marc-minlotsize, "Asgari parti büyüklüğü
reorder_pt LIKE bapi_marc-reorder_pt, " Yeniden sipariş seviyesi
round_val LIKE bapi_marc-round_val, "yuvarlama değeri
plnd_delry LIKE bapi_marc-plnd_delry, "Planlanan teslimat süresi
proc_type LIKE bapi_marc-proc_type, "Tedarik türü
iss_st_loc LIKE bapi_marc-iss_st_loc, "Üretim depo yeri
inhseprodt LIKE bapi_marc-inhseprodt, "Dahili üretim süresi
sm_key LIKE bapi_marc-sm_key, "süre anahtarı
plan_strgp LIKE bapi_marc-plan_strgp, "Planlama stratejisi grubu
consummode LIKE bapi_marc-consummode, "Mahsuplaştırma kipi
bwd_cons LIKE bapi_marc-bwd_cons, "Mahs. geriye doğru
fwd_cons LIKE bapi_marc-fwd_cons, "Mahs. ileriye doğru
availcheck LIKE bapi_marc-availcheck, "Kull. kontrolü
ind_post_to_insp_stock LIKE bapi_marc-ind_post_to_insp_stock,
* Kalite kontrol stoku
unlimited LIKE bapi_marc-unlimited, "Sınırsız teslimat
prodprof LIKE bapi_marc-prodprof, "Üretim yöneltim profili
production_scheduler LIKE bapi_marc-production_scheduler,
* Üretim yöneltim sorumlusu
qty_struct LIKE bapi_mbew-qty_struct, "miktar yapısı
orig_mat LIKE bapi_mbew-orig_mat, "malzeme kaynağı
specprocty LIKE bapi_marc-specprocty, "m.h. özel tedarik tipi
variance_key LIKE bapi_marc-variance_key, "Sapma anahtarı
lot_size LIKE bapi_marc-lot_size, "m.h. parti büyüklüğü
webaz LIKE marc-webaz, "MG isleme Suresi
takzt LIKE marc-takzt, "Takt Zamani
bstma LIKE marc-bstma, " Azami Parti Buy
safety_stk LIKE bapi_marc-safety_stk. " Emniyet Stoğu
DATA : END OF i_tab.

DATA : BEGIN OF result OCCURS 100,
matl_type LIKE bapimathead-matl_type, "Malzeme türü
material LIKE bapimathead-material, "Malzeme numarası
plant LIKE bapi_marc-plant, "Üretim yeri
type LIKE bapiret2-type ,
message LIKE bapiret2-message.
DATA : END OF result.

DATA : pc_file TYPE string.


PARAMETERS: p_file(128) DEFAULT 'c:\BOLU_Malzeme.txt' LOWER CASE
OBLIGATORY.




START-OF-SELECTION.

PERFORM upload_itab.
PERFORM run_bapi.
PERFORM write_result.

*&---------------------------------------------------------------------*
*& Form upload_itab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_itab .

pc_file = p_file.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = pc_file
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = i_tab
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
gui_refuse_filetransfer = 8
OTHERS = 9.


ENDFORM. " upload_itab
*&---------------------------------------------------------------------*
*& Form run_bapi
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM run_bapi .

LOOP AT i_tab.

CLEAR : headdata, plantdata, plantdatax, valuationdata,
valuationdatax.

headdata-matl_type = i_tab-matl_type .
headdata-material = i_tab-material .
headdata-mrp_view = 'X' .
headdata-work_sched_view = 'X' .
headdata-cost_view = 'X' .
headdata-storage_view = 'X'.

plantdata-plant = i_tab-plant .
plantdata-mrp_type = i_tab-mrp_type .
plantdata-mrp_ctrler = i_tab-mrp_ctrler .
plantdata-lotsizekey = i_tab-lotsizekey .
plantdata-minlotsize = i_tab-minlotsize .
plantdata-reorder_pt = i_tab-reorder_pt .
plantdata-round_val = i_tab-round_val .
plantdata-plnd_delry = i_tab-plnd_delry .
plantdata-proc_type = i_tab-proc_type .
plantdata-iss_st_loc = i_tab-iss_st_loc .
plantdata-inhseprodt = i_tab-inhseprodt .
plantdata-sm_key = i_tab-sm_key .
plantdata-plan_strgp = i_tab-plan_strgp .
plantdata-consummode = i_tab-consummode .
plantdata-bwd_cons = i_tab-bwd_cons .
plantdata-fwd_cons = i_tab-fwd_cons .
plantdata-availcheck = i_tab-availcheck .
plantdata-ind_post_to_insp_stock = i_tab-ind_post_to_insp_stock .
plantdata-unlimited = i_tab-unlimited .
plantdata-prodprof = i_tab-prodprof .
plantdata-production_scheduler = i_tab-production_scheduler .
plantdata-gr_pr_time = i_tab-webaz.
plantdata-cycle_time = i_tab-takzt.
plantdata-maxlotsize = i_tab-bstma.
plantdata-specprocty = i_tab-specprocty .
plantdata-variance_key = i_tab-variance_key .
plantdata-lot_size = i_tab-lot_size .
plantdata-safety_stk = i_tab-safety_stk.
plantdata-backflush = '1'.
plantdata-pur_group = 'D01'.

valuationdata-val_area = i_tab-plant .
valuationdata-val_type = ' ' .
valuationdata-orig_mat = i_tab-orig_mat.
valuationdata-qty_struct = i_tab-qty_struct .

valuationdatax-val_area = i_tab-plant .
valuationdatax-val_type = ' ' .
valuationdatax-orig_mat = 'X'.
valuationdatax-qty_struct = 'X'.

storagelocationdata-plant = i_tab-plant.
storagelocationdata-stge_loc = i_tab-iss_st_loc.

storagelocationdatax-plant = i_tab-plant.
storagelocationdatax-stge_loc = i_tab-iss_st_loc.


plantdatax-plant = i_tab-plant .

IF NOT plantdata-mrp_type IS INITIAL.
plantdatax-mrp_type = 'X'.
ENDIF.

IF NOT plantdata-mrp_ctrler IS INITIAL.
plantdatax-mrp_ctrler = 'X'.
ENDIF.

IF NOT plantdata-lotsizekey IS INITIAL.
plantdatax-lotsizekey = 'X'.
ENDIF.

IF NOT plantdata-minlotsize IS INITIAL.
plantdatax-minlotsize = 'X'.
ENDIF.

IF NOT plantdata-reorder_pt IS INITIAL.
plantdatax-reorder_pt = 'X'.
ENDIF.


IF NOT plantdata-round_val IS INITIAL.
plantdatax-round_val = 'X'.
ENDIF.

IF NOT plantdata-plnd_delry IS INITIAL.
plantdatax-plnd_delry = 'X'.
ENDIF.

IF NOT plantdata-proc_type IS INITIAL.
plantdatax-proc_type = 'X'.
ENDIF.

IF NOT plantdata-iss_st_loc IS INITIAL.
plantdatax-iss_st_loc = 'X'.
ENDIF.

IF NOT plantdata-inhseprodt IS INITIAL.
plantdatax-inhseprodt = 'X'.
ENDIF.

IF NOT plantdata-sm_key IS INITIAL.
plantdatax-sm_key = 'X'.
ENDIF.

IF NOT plantdata-plan_strgp IS INITIAL.
plantdatax-plan_strgp = 'X'.
ENDIF.

IF NOT plantdata-consummode IS INITIAL.
plantdatax-consummode = 'X'.
ENDIF.

IF NOT plantdata-bwd_cons IS INITIAL.
plantdatax-bwd_cons = 'X'.
ENDIF.

IF NOT plantdata-fwd_cons IS INITIAL.
plantdatax-fwd_cons = 'X'.
ENDIF.

IF NOT plantdata-availcheck IS INITIAL.
plantdatax-availcheck = 'X'.
ENDIF.

IF NOT plantdata-ind_post_to_insp_stock IS INITIAL.
plantdatax-ind_post_to_insp_stock = 'X'.
ENDIF.

IF NOT plantdata-unlimited IS INITIAL.
plantdatax-unlimited = 'X'.
ENDIF.

IF NOT plantdata-prodprof IS INITIAL.
plantdatax-prodprof = 'X'.
ENDIF.

IF NOT plantdata-production_scheduler IS INITIAL.
plantdatax-production_scheduler = 'X'.
ENDIF.

IF NOT valuationdata-qty_struct IS INITIAL.
valuationdatax-qty_struct = 'X'.
ENDIF.

IF NOT valuationdata-mat_origin IS INITIAL.
valuationdatax-mat_origin = 'X'.
ENDIF.

IF NOT plantdata-specprocty IS INITIAL.
plantdatax-specprocty = 'X'.
ENDIF.

IF NOT plantdata-variance_key IS INITIAL.
plantdatax-variance_key = 'X'.
ENDIF.

IF NOT plantdata-lot_size IS INITIAL.
plantdatax-lot_size = 'X'.
ENDIF.

IF NOT plantdata-gr_pr_time IS INITIAL.
plantdatax-gr_pr_time = 'X'.
ENDIF.

IF NOT plantdata-cycle_time IS INITIAL.
plantdatax-cycle_time = 'X'.
ENDIF.

IF NOT plantdata-maxlotsize IS INITIAL.
plantdatax-maxlotsize = 'X'.
ENDIF.

IF NOT plantdata-safety_stk IS INITIAL.
plantdatax-safety_stk = 'X'.
ENDIF.

IF NOT plantdata-backflush IS INITIAL.
plantdatax-backflush = 'X'.
ENDIF.

IF NOT plantdata-pur_group IS INITIAL.
plantdatax-pur_group = 'X'.
ENDIF.




CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = headdata-material
IMPORTING
output = headdata-material
* EXCEPTIONS
* LENGTH_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CLEAR return.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = headdata
* CLIENTDATA =
* CLIENTDATAX =
plantdata = plantdata
plantdatax = plantdatax
* FORECASTPARAMETERS =
* FORECASTPARAMETERSX =
* PLANNINGDATA =
* PLANNINGDATAX =
storagelocationdata = storagelocationdata
storagelocationdatax = storagelocationdatax
valuationdata = valuationdata
valuationdatax = valuationdatax
* WAREHOUSENUMBERDATA =
* WAREHOUSENUMBERDATAX =
* SALESDATA =
* SALESDATAX =
* STORAGETYPEDATA =
* STORAGETYPEDATAX =
* FLAG_ONLINE = ' '
* FLAG_CAD_CALL = ' '
* NO_DEQUEUE = ' '
IMPORTING
return = return
* TABLES
* MATERIALDESCRIPTION =
* UNITSOFMEASURE =
* UNITSOFMEASUREX =
* INTERNATIONALARTNOS =
* MATERIALLONGTEXT =
* TAXCLASSIFICATIONS =
* RETURNMESSAGES =
* PRTDATA =
* PRTDATAX =
* EXTENSIONIN =
* EXTENSIONINX =
.

MOVE-CORRESPONDING i_tab TO result.
MOVE-CORRESPONDING return TO result.
APPEND result. CLEAR result.

ENDLOOP.

ENDFORM. " run_bapi
*&---------------------------------------------------------------------*
*& Form write_result
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM write_result .


g_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = g_repid
i_internal_tabname = 'RESULT'
i_inclname = g_repid
CHANGING
ct_fieldcat = gt_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.



CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
* i_callback_pf_status_set = g_status_set
* i_callback_user_command = g_user_command
* is_layout = gs_layout
it_fieldcat = gt_fieldcat
TABLES
t_outtab = result
EXCEPTIONS
program_error = 1
OTHERS = 2.





ENDFORM. " write_result