*&---------------------------------------------------------------------* |
*& REPORT ZMM0069 * |
*&---------------------------------------------------------------------* |
*& Module : MM | |
*& Application : The program loads the Purchasing Inforecords | |
*& | |
*----------------------------------------------------------------------* |
*| Modification Log | |
*| ---------------- | |
*| Programmer Date CC# Chg.Ref Description of |
*| Change | |
*| ------------- ----------- ---- ----------- ----------------------| |
*| Rajesh Singh 23-AUG-2005 Initial |
*| development. | |
*----------------------------------------------------------------------* |
REPORT zmm0069 NO STANDARD PAGE HEADING |
MESSAGE-ID z0 |
LINE-SIZE 132 |
LINE-COUNT 65(2). |
*----------------------------------------------------------------------* |
* Internal Tables * |
*----------------------------------------------------------------------* |
*Internal table for the purchasing info records fields. |
DATA: BEGIN OF i_inforecord OCCURS 0, |
matnr(18), |
lifnr(10), |
uom(3), |
ekgrp(3), |
planned_time(3), |
under_tol(3), |
over_tol(3), |
qty(10), |
price_cat(5), |
inco(3), |
designation(28), |
netpr(13), |
scale_qty1(10), |
scale_pr1(13), |
scale_qty2(10), |
scale_pr2(13), |
scale_qty3(13), |
scale_pr3(10), |
scale_qty4(13), |
scale_pr4(10), |
scale_qty5(13), |
scale_pr5(10), |
scale_qty6(13), |
scale_pr6(10), |
scale_qty7(13), |
scale_pr7(10), |
scale_qty8(13), |
scale_pr8(10), |
scale_qty9(13), |
scale_pr9(10), |
scale_qty10(13), |
scale_pr10(10), |
END OF i_inforecord. |
** Internal table for Old and New Vendor number |
DATA : BEGIN OF i_lfb1 OCCURS 1, |
lifnr(10), |
altkn(10), |
END OF i_lfb1. |
** Declare internal table for Call Transaction and BDC Session |
DATA: i_bdc_table LIKE bdcdata OCCURS 0 WITH HEADER LINE. |
*----------------------------------------------------------------------* |
* Global Variables * |
*----------------------------------------------------------------------* |
DATA: g_counter(2) TYPE n, |
g_field_name(18) TYPE c, |
zc_yes TYPE syftype VALUE 'X'. |
*----------------------------------------------------------------------* |
* Selection Screen * |
*----------------------------------------------------------------------* |
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001. |
PARAMETERS: p_fname1 TYPE localfile . |
SELECTION-SCREEN SKIP 1. |
SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-002. |
PARAMETERS: p_rloc1 AS CHECKBOX DEFAULT 'X'. |
SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-003. |
PARAMETERS p_group(12) OBLIGATORY DEFAULT 'ZPURCHINFO'. |
SELECTION-SCREEN END OF BLOCK c. |
SELECTION-SCREEN END OF BLOCK b. |
SELECTION-SCREEN END OF BLOCK a. |
**WRITE the report header |
TOP-OF-PAGE. |
INCLUDE zheading. |
*----------------------------------------------------------------------* |
* Start of selection * |
*----------------------------------------------------------------------* |
START-OF-SELECTION. |
* Load Input file |
PERFORM f_load_input_file. |
* Create BDC records. |
PERFORM create_bdc_records . |
*&---------------------------------------------------------------------* |
*& Form Create_BDC_records |
*&---------------------------------------------------------------------* |
* Perform the BDC for the records in the internal table |
*----------------------------------------------------------------------* |
FORM create_bdc_records . |
IF NOT i_inforecord[] IS INITIAL. |
** Open BDC session |
PERFORM open_bdc_session. |
SELECT lifnr altkn FROM lfb1 INTO TABLE i_lfb1 |
FOR ALL ENTRIES IN i_inforecord |
WHERE altkn = i_inforecord-lifnr. |
* Sorting the Internal table for better performance |
SORT i_lfb1 BY altkn. |
LOOP AT i_inforecord. |
***Mapping Old Vendor number to the new Vendor number |
READ TABLE i_lfb1 WITH KEY altkn = i_inforecord-lifnr BINARY |
SEARCH. |
IF sy-subrc EQ 0. |
i_inforecord-lifnr = i_lfb1-lifnr. |
ENDIF. |
CLEAR i_bdc_table[]. |
PERFORM insert_screen_header. |
* call transaction 'ME11' using i_bdc_table |
* mode 'A'. |
* CLEAR i_bdc_table. |
ENDLOOP. |
CLEAR i_inforecord[]. |
PERFORM close_bdc_session. |
** Release the BDC sessions created |
PERFORM release_bdc. |
ENDIF. |
ENDFORM. " open_group |
*&---------------------------------------------------------------------* |
*& Form bdc_dynpro_start |
*&---------------------------------------------------------------------* |
* Start the screen for the transfer of fields |
*----------------------------------------------------------------------* |
FORM bdc_dynpro_start USING p_g_program_1 |
p_g_screen. |
CLEAR i_bdc_table. |
i_bdc_table-program = p_g_program_1. |
i_bdc_table-dynpro = p_g_screen. |
i_bdc_table-dynbegin = 'X'. |
APPEND i_bdc_table. |
ENDFORM. " bdc_dynpro_start_start |
*&---------------------------------------------------------------------* |
*& Form bdc_insert_field |
*&---------------------------------------------------------------------* |
* Insert field * |
*----------------------------------------------------------------------* |
FORM bdc_insert_field USING f_name f_value. |
IF f_value <> space. |
CLEAR i_bdc_table. |
i_bdc_table-fnam = f_name. |
i_bdc_table-fval = f_value. |
APPEND i_bdc_table. |
ENDIF. |
ENDFORM. "bdc_insert_field |
*&--------------------------------------------------------------------* |
*& Form open_bdc_session |
*&--------------------------------------------------------------------* |
* Open a BDC session |
*---------------------------------------------------------------------* |
FORM open_bdc_session . |
** Open BDC session and create and update records |
CALL FUNCTION 'BDC_OPEN_GROUP' |
EXPORTING |
client = sy-mandt |
* DEST = FILLER8 |
group = p_group |
* HOLDDATE = FILLER8 |
keep = 'X' |
user = sy-uname |
* RECORD = FILLER1 |
* PROG = SY-CPROG |
* IMPORTING |
* QID = |
EXCEPTIONS |
client_invalid = 1 |
destination_invalid = 2 |
group_invalid = 3 |
group_is_locked = 4 |
holddate_invalid = 5 |
internal_error = 6 |
queue_error = 7 |
running = 8 |
system_lock_error = 9 |
user_invalid = 10 |
OTHERS = 11 |
. |
IF sy-subrc <> 0. |
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno |
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. |
ENDIF. |
ENDFORM. " create_bdc_session |
*&---------------------------------------------------------------------* |
*& Form insert_screen_header |
*&---------------------------------------------------------------------* |
* Screen flow for the transfer of fields |
*----------------------------------------------------------------------* |
FORM insert_screen_header . |
* First Screen 100 |
PERFORM bdc_dynpro_start USING 'SAPMM06I' '0100'. |
PERFORM bdc_insert_field USING:'BDC_CURSOR' 'EINA-LIFNR', |
'BDC_OKCODE' '/00', |
'EINA-LIFNR' i_inforecord-lifnr, |
'EINA-MATNR' i_inforecord-matnr, |
'EINE-EKORG' '1000', |
'RM06I-NORMB' zc_yes. |
*****----------------------------------------******** |
* Next Screen 101 |
PERFORM bdc_dynpro_start USING 'SAPMM06I' '0101'. |
PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'EINA-MAHN1', |
'BDC_OKCODE' '/00', |
'EINA-MEINS' i_inforecord-uom. |
*****----------------------------------------******** |
*Next Screen 102 |
PERFORM bdc_dynpro_start USING 'SAPMM06I' '0102'. |
PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'EINE-INCO2', |
'EINE-APLFZ' i_inforecord-planned_time, |
'EINE-EKGRP' i_inforecord-ekgrp, |
'EINE-NORBM' i_inforecord-qty. |
PERFORM bdc_insert USING 'EINE-UEBTK' ' '. |
PERFORM bdc_insert_field USING:'EINE-PEINH' i_inforecord-scale_qty1, |
'EINE-BPRME' i_inforecord-uom, |
'EINE-UNTTO' '5', |
'EINE-UEBTO' '25', |
'EINE-MEPRF' i_inforecord-price_cat, |
'EINE-NETPR' i_inforecord-netpr, |
'EINE-INCO1' i_inforecord-inco, |
'EINE-INCO2' i_inforecord-designation. |
* Checking for Scale quantities |
IF i_inforecord-scale_qty2 = space. |
PERFORM bdc_insert_field USING 'BDC_OKCODE' '=BU'. |
PERFORM insert_bdc_new. |
ELSE. |
PERFORM bdc_insert_field USING 'BDC_OKCODE' '=KO'. |
*****----------------------------------------******** |
* Next Screen 201 |
PERFORM bdc_dynpro_start USING 'SAPMV13A' '0201'. |
PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'RV13A-DATAB', |
'BDC_OKCODE' '=PSTF'. |
*****----------------------------------------******** |
* Next Screen 201 |
PERFORM bdc_dynpro_start USING 'SAPMV13A' '0201'. |
PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'KONP-KSCHL(01)', |
'BDC_OKCODE' '=PSTF', |
'RV130-SELKZ(01)' zc_yes. |
*****----------------------------------------******** |
* LAST SCREEN 303 |
PERFORM bdc_dynpro_start USING 'SAPMV13A' '0303'. |
PERFORM bdc_insert_field USING : 'BDC_CURSOR' 'KONM-KBETR(03)', |
'BDC_OKCODE' '=SICH'. |
* Counter to Loop the Item level entry |
g_counter = 0. |
PERFORM scale_entry USING i_inforecord-scale_qty2 |
i_inforecord-scale_pr2. |
PERFORM scale_entry USING i_inforecord-scale_qty3 |
i_inforecord-scale_pr3. |
PERFORM scale_entry USING i_inforecord-scale_qty4 |
i_inforecord-scale_pr4. |
PERFORM scale_entry USING i_inforecord-scale_qty5 |
i_inforecord-scale_pr5. |
PERFORM scale_entry USING i_inforecord-scale_qty6 |
i_inforecord-scale_pr6. |
PERFORM scale_entry USING i_inforecord-scale_qty7 |
i_inforecord-scale_pr7. |
PERFORM scale_entry USING i_inforecord-scale_qty8 |
i_inforecord-scale_pr8. |
PERFORM scale_entry USING i_inforecord-scale_qty9 |
i_inforecord-scale_pr9. |
PERFORM scale_entry USING i_inforecord-scale_qty10 |
i_inforecord-scale_pr10. |
PERFORM insert_bdc_new. |
ENDIF. |
ENDFORM. " insert_screen_header |
*&---------------------------------------------------------------------* |
*& Form insert_bdc |
*&---------------------------------------------------------------------* |
* Insert BDC |
*----------------------------------------------------------------------* |
FORM insert_bdc_new . |
CALL FUNCTION 'BDC_INSERT' |
EXPORTING |
tcode = 'ME11' |
* POST_LOCAL = NOVBLOCAL |
* PRINTING = NOPRINT |
* SIMUBATCH = ' ' |
* CTUPARAMS = ' ' |
TABLES |
dynprotab = i_bdc_table |
EXCEPTIONS |
internal_error = 1 |
not_open = 2 |
queue_error = 3 |
tcode_invalid = 4 |
printing_invalid = 5 |
posting_invalid = 6 |
OTHERS = 7 |
. |
IF sy-subrc <> 0. |
MESSAGE ID sy-msgid TYPE |