‎2008 Jan 31 2:16 PM
Hi All,
we have written a bdc for material upload for Tcode MMZ1. all works fine till the Accounting screen where we have to give the valuation type as D. (MBEW-BWTTY). and the Costing Screen we have to manually give enter to cross these screens and then save it. How can i overcome this issue.
Points vl be rewarded for all suggestions.
This is the Program - (Problem area is in bold)
&----
*& Report Z_GMM
*&
&----
*&
*&
&----
REPORT Z_GMM.
TABLES : RMMG1,MAKT,MARA,MVKE,MG03STEUER,MARC,MPOP,MBEW,RM03M.
DATA: BEGIN OF IT_MATE OCCURS 1,
MATNR(16) TYPE C,
MBRSH(1) TYPE C,
MTART(4) TYPE C,
WERKS(4) TYPE C,
LGORT(4) TYPE C,
BWTAR(10) TYPE C,
VKORG(4) TYPE C,
VTWEG(2) TYPE C,
REF_MATNR(16) TYPE C,
REF_WERKS(4) TYPE C,
REF_LGORT(4) TYPE C,
REF_BWTAR(10) TYPE C,
REF_VKORG(4) TYPE C,
REF_VTWEG(2) TYPE C,
VERSG(1) TYPE C,
KTGRM(2) TYPE C,
MTPOS(4) TYPE C,
PRMOD(1) TYPE C,
TAXKM(1) TYPE C,
KLART(3) TYPE C,
BWTTY(1) TYPE C,
END OF IT_MATE.
DATA: BEGIN OF IT_MATE_ERR OCCURS 1,
MATNR(16) TYPE C,
MBRSH(1) TYPE C,
MTART(4) TYPE C,
WERKS(4) TYPE C,
LGORT(4) TYPE C,
BWTAR(10) TYPE C,
VKORG(4) TYPE C,
VTWEG(2) TYPE C,
REF_MATNR(16) TYPE C,
REF_WERKS(4) TYPE C,
REF_LGORT(4) TYPE C,
REF_BWTAR(10) TYPE C,
REF_VKORG(4) TYPE C,
REF_VTWEG(2) TYPE C,
VERSG(1) TYPE C,
KTGRM(2) TYPE C,
MTPOS(4) TYPE C,
PRMOD(1) TYPE C,
TAXKM(1) TYPE C,
KLART(3) TYPE C,
BWTTY(1) TYPE C,
MSG(100) TYPE C,
END OF IT_MATE_ERR.
DATA: IT_BDCDATA LIKE BDCDATA OCCURS 1 WITH HEADER LINE.
DATA: IT_MSGS LIKE BDCMSGCOLL OCCURS 1 WITH HEADER LINE.
DATA: V_MSG(100) TYPE C,
V_MODE,
V1(20) TYPE C.
DATA: V_FILE TYPE STRING.
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-H01.
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME OBLIGATORY DEFAULT 'C:\'.
SELECTION-SCREEN: BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-H02.
PARAMETERS: P_ALL RADIOBUTTON GROUP G1,
P_NO RADIOBUTTON GROUP G1 DEFAULT 'X',
P_ERR RADIOBUTTON GROUP G1.
SELECTION-SCREEN: END OF BLOCK B2.
SELECTION-SCREEN: END OF BLOCK B1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM SHOW_OPEN_DIALOG.
START-OF-SELECTION.
PERFORM READ_DATA.
IF NOT IT_MATE[] IS INITIAL.
IF P_ALL = 'X'.
V_MODE = 'A'.
ELSEIF P_NO = 'X'.
V_MODE = 'N'.
ELSE.
V_MODE = 'E'.
ENDIF.
PERFORM POPULATE_BDCDATA.
ENDIF.
END-OF-SELECTION.
IF NOT IT_MATE_ERR[] IS INITIAL.
PERFORM DOWNLOAD_ERR_REC.
ENDIF.
&----
*& Form SHOW_OPEN_DIALOG
&----
text
----
FORM SHOW_OPEN_DIALOG .
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = P_FILE.
ENDFORM. " SHOW_OPEN_DIALOG
&----
*& Form READ_DATA
&----
text
----
FORM READ_DATA.
DATA: V_FILE TYPE STRING.
V_FILE = P_FILE.
IF NOT V_FILE IS INITIAL.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = V_FILE
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = IT_MATE
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
ENDIF.
ENDFORM. " READ_DATA
&----
*& Form POPULATE_BDCDATA
&----
text
----
FORM POPULATE_BDCDATA .
LOOP AT IT_MATE.
perform bdc_dynpro using 'SAPMM03M' '0060'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'RM03M-MATNR' IT_MATE-MATNR.
perform bdc_field using 'RM03M-MBRSH' IT_MATE-MBRSH.
perform bdc_field using 'RM03M-MTART' IT_MATE-MTART.
perform bdc_field using 'RM03M-REF_MATNR' IT_MATE-REF_MATNR.
perform bdc_dynpro using 'SAPMM03M' '0070'.
perform bdc_field using 'BDC_OKCODE' '=SELA'.
perform bdc_dynpro using 'SAPMM03M' '0070'.
perform bdc_field using 'BDC_OKCODE' '=SCHL'.
perform bdc_field using 'RM03M-KZAU1(01)' 'X'.
perform bdc_field using 'RM03M-KZAU1(03)' 'X'.
perform bdc_field using 'RM03M-KZAU1(04)' 'X'.
perform bdc_field using 'RM03M-KZAU1(05)' 'X'.
perform bdc_field using 'RM03M-KZAU1(06)' 'X'.
perform bdc_field using 'RM03M-KZAU1(08)' 'X'.
perform bdc_field using 'RM03M-KZAU1(09)' 'X'.
perform bdc_field using 'RM03M-KZAU1(11)' 'X'.
perform bdc_field using 'RM03M-KZAU1(12)' 'X'.
perform bdc_field using 'RM03M-KZAU2(02)' 'X'.
perform bdc_field using 'RM03M-KZAU2(05)' 'X'.
perform bdc_field using 'RM03M-KZAU2(06)' 'X'.
perform bdc_dynpro using 'SAPMM03M' '0080'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'RM03M-WERKS' IT_MATE-WERKS.
perform bdc_field using 'RM03M-LGORT' IT_MATE-LGORT.
perform bdc_field using 'RM03M-VKORG' IT_MATE-VKORG.
perform bdc_field using 'RM03M-VTWEG' IT_MATE-VTWEG.
perform bdc_field using 'RM03M-REF_WERKS' IT_MATE-REF_WERKS.
perform bdc_field using 'RM03M-REF_LGORT' IT_MATE-REF_LGORT.
perform bdc_field using 'RM03M-REF_VKORG' IT_MATE-REF_VKORG.
perform bdc_field using 'RM03M-REF_VTWEG' IT_MATE-REF_VTWEG.
perform bdc_dynpro using 'SAPMM03M' '0210'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0215'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0216'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0212'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0248'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0249'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0252'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0260'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0270'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0275'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0280'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPMM03M' '0290'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'BDC_OKCODE' '=ENTR'.
perform bdc_dynpro using 'SAPLSPO1' '0300'.
perform bdc_field using 'BDC_OKCODE' '=YES'.
CALL TRANSACTION 'MMZ1' USING IT_BDCDATA
MODE V_MODE
UPDATE 'S' "SYNCHRONOUS
MESSAGES INTO IT_MSGS.
IF SY-SUBRC = 0.
PERFORM HANDLE_SUCCESS_RECS.
REFRESH IT_MSGS.
CLEAR: V_MSG.
ELSE.
PERFORM HANDLE_ERROR_RECS.
REFRESH IT_MSGS.
CLEAR: V_MSG,
IT_MATE_ERR.
ENDIF.
CLEAR: IT_BDCDATA,
IT_BDCDATA[].
ENDLOOP.
ENDFORM. " POPULATE_BDCDATA
&----
*& Form BDC_DYNPRO
&----
text
----
-->PROGRAM text
-->DYNPRO text
----
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR IT_BDCDATA.
IT_BDCDATA-PROGRAM = PROGRAM.
IT_BDCDATA-DYNPRO = DYNPRO.
IT_BDCDATA-DYNBEGIN = 'X'.
APPEND IT_BDCDATA.
ENDFORM. "BDC_DYNPRO
&----
*& Form BDC_FIELD
&----
text
----
-->FNAM text
-->FVAL text
----
FORM BDC_FIELD USING FNAM FVAL.
IF NOT FVAL IS INITIAL.
CLEAR IT_BDCDATA.
IT_BDCDATA-FNAM = FNAM.
IT_BDCDATA-FVAL = FVAL.
APPEND IT_BDCDATA.
ENDIF.
ENDFORM. "BDC_FIELD
&----
*& Form HANDLE_SUCCESS_RECS
&----
text
----
FORM HANDLE_SUCCESS_RECS .
READ TABLE IT_MSGS WITH KEY MSGTYP = 'S'.
IF SY-SUBRC = 0.
*--Formatting the message
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = IT_MSGS-MSGID
LANG = SY-LANGU
NO = IT_MSGS-MSGNR
V1 = IT_MSGS-MSGV1
V2 = IT_MSGS-MSGV2
V3 = IT_MSGS-MSGV3
V4 = IT_MSGS-MSGV4
IMPORTING
MSG = V_MSG
EXCEPTIONS
NOT_FOUND = 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.
ELSE.
WRITE:/ V_MSG.
CLEAR: V_MSG,
IT_MSGS.
ENDIF.
ENDIF.
ENDFORM. " HANDLE_SUCCESS_RECS
*&----
*& Form HANDLE_ERROR_RECS
*&----
*text
*----
FORM HANDLE_ERROR_RECS .
READ TABLE IT_MSGS WITH KEY MSGTYP = 'E'.
IF SY-SUBRC = 0.
*--Formatting the message
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = IT_MSGS-MSGID
LANG = SY-LANGU
NO = IT_MSGS-MSGNR
V1 = IT_MSGS-MSGV1
V2 = IT_MSGS-MSGV2
V3 = IT_MSGS-MSGV3
V4 = IT_MSGS-MSGV4
IMPORTING
MSG = IT_MATE_ERR-MSG
EXCEPTIONS
NOT_FOUND = 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.
ELSE.
MOVE-CORRESPONDING IT_MATE TO IT_MATE_ERR.
APPEND IT_MATE_ERR.
DELETE IT_MATE INDEX SY-TABIX.
CLEAR IT_MATE_ERR.
ENDIF.
ENDIF.
ENDFORM. " HANDLE_ERROR_RECS
*&----
*& Form DOWNLOAD_ERR_REC
*&----
*text
*----
FORM DOWNLOAD_ERR_REC .
V1 = P_FILE(3).
SHIFT P_FILE BY 3 PLACES LEFT.
CONCATENATE 'ERR_' P_FILE INTO P_FILE.
CONCATENATE V1 P_FILE INTO P_FILE.
V_FILE = P_FILE.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE =
FILENAME = 'C:\ERR_MMZ1.XLS'
FILETYPE = 'ASC'
APPEND = ' '
WRITE_FIELD_SEPARATOR = 'X'
HEADER = '00'
TRUNC_TRAILING_BLANKS = ' '
WRITE_LF = 'X'
COL_SELECT = ' '
COL_SELECT_MASK = ' '
DAT_MODE = ' '
CONFIRM_OVERWRITE = ' '
NO_AUTH_CHECK = ' '
CODEPAGE = ' '
IGNORE_CERR = ABAP_TRUE
REPLACEMENT = '#'
WRITE_BOM = ' '
TRUNC_TRAILING_BLANKS_EOL = 'X'
WK1_N_FORMAT = ' '
WK1_N_SIZE = ' '
WK1_T_FORMAT = ' '
WK1_T_SIZE = ' '
WRITE_EOL = ABAP_TRUE
IMPORTING
FILELENGTH =
TABLES
DATA_TAB = IT_MATE_ERR
FIELDNAMES =
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
IF SY-SUBRC = 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
MESSAGE I000(Z00) WITH 'Error File downloaded at' V_FILE.
ENDIF.
ENDFORM. " DOWNLOAD_ERR_REC
‎2008 Feb 04 1:59 PM
Hi,
don't use batch input to create materials.
You should prefer "direct input" standard programm RMDATIND by LSMW
or the BAPI : BAPI_MATERIAL_SAVEDATA
Regards.
David
‎2008 Feb 05 11:09 AM
we have written a bdc for material upload for Tcode MMZ1. all works fine till the Accounting screen where we have to give the valuation type as D. (MBEW-BWTTY). and the Costing Screen we have to manually give enter to cross these screens and then save it. How can i overcome this issue.
Hi,
Do re recording for the same process by adding valuation type as D, cross the screen by hitting the enter and save it. after completioin of recording.
ex. 1st screen ->2nd screen->3rd Manula operation screen->4thscreen(where u r saving)
pick the 3 screen number and bdc-okcode for particuler action. place the same code in between before and after the screen.
ex. 1st screen ->2nd screen->3rd add peice of code of that action->4thscreen(where u r saving)
‎2008 Feb 05 11:40 AM
Hi,
In your code just try and replace the lines
perform bdc_dynpro using 'SAPMM03M' '0290'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'BDC_OKCODE' '=ENTR'.
perform bdc_dynpro using 'SAPLSPO1' '0300'.
perform bdc_field using 'BDC_OKCODE' '=YES'.
with this code and see if it helps.Please add you itab fields at necessary places in this code.
perform bdc_dynpro using 'SAPMM03M' '0290'.
perform bdc_field using 'BDC_CURSOR'
'MARA-MEINS'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'MARA-MEINS'
record-MEINS_014.
perform bdc_field using 'MBEW-EKALR'
record-EKALR_015.
perform bdc_field using 'MARC-LOSGR'
record-LOSGR_016.
perform bdc_field using 'MBEW-BKLAS'
record-BKLAS_017.
perform bdc_field using 'MBEW-BWTTY'
record-BWTTY_018.
perform bdc_field using 'MBEW-VPRSV'
record-VPRSV_019.
perform bdc_field using 'MBEW-PEINH'
record-PEINH_020.
perform bdc_dynpro using 'SAPLSPO1' '0300'.
perform bdc_field using 'BDC_OKCODE'
'=YES'.
Reward points if useful
Regards,
Bhavin P Shah