REFRESH BDCDATA
Hi Gurus ,
Could anyone guide me for the folowing scenario : -BDC Call transaction
A custom report was created to extend payee vendors for every principal vendors in two company codes : xxxx and yyyy.
But when ever tested : the payee vendors were getting created for one company code and later when the same payee vendor details were being passed as Reference Vendor information : it was not creating vendors in the other company code : yyyy.
using FK01 : creating vendors .
1st Step : provide company code (xxxx) and Account groupdetails in FK01 : vendor created through custom interface.
2nd Step : created vendor details : Vendor Number (created in step1), Company Code (yyyy), Account group(grp1) and Reference Vendor details : Vendor number (created in step1) , Company Code (xxxx) were suppose to be passed through
the BDC process.
While testing the BDC the first step was executing fine no issues but while executing the second step the reference field details were not populating automatically (it was blank) although the Recording was correct , all the neccessary BDC code were available .
Now between the first and second creation there was a BDC table which was being populated with DYNNAME , FNAME FVAL detatils: all the BDC details were in that table. I have used a REFRESH BDCDATA between 1st and 2 nd step (as mentioned above) and then it started creating the vendors with reference details also.
Could you please tell me the importance of REFRESH BDCDATA ?
My question is : what is the importance of REFRESH BDCDATA : since after adding that i could check that all the neccessary details were being populated to the screen fields of FK01 (first screen) through BDC ?
Thanks
Kylietisha
Edited by: kylietisha on Jun 23, 2010 7:03 AM
Hi Kylietisha,
A transaction can contain many screens, in ur case FK01 u r updating in 2 screens.
For eg. if u have to uplaod 10 vendor creation ie (10 records in flat file) using BDC in ur case each record will go to 2 screens then BDCDATA internal table will populate first record i.e data for two screens.
After completing 1st record(i.e for 2 screens) before going to 2nd record u have to refresh table BDCDATA the reason is if u don't REFRESH the 1st record will also be there so when transaction is called 1st record data will go.
Plz check wheter data for whole cycle of the transaction is present in BDCDATA and ur refreshing when ur going for 2nd record.
Hope this might help u............
Similar Messages
-
could the error generated be because of the file?? the code is as follows:
a<u>sset upload</u>
report ZAST_UPL line-size 255.
data: remaining_life_yrs type p,
remaining_life_periods type p,
days type p,
remainder type p,
useful_life type p,
useful_period type p.
include bdcrecx1.
parameters: pfile type rlgrap-filename.
tables: ankb.
*data: pfile1 type string.
TYPES: begin of t_datatab ,
assets_class(10),
c_code(4),
description(50),
add_description(50),
serial(18),
capitalisation(8),
c_centre(10),
plant(4),
asset_location(10),
amount1(13),
amount2(13),
end of t_datatab.
data: begin of t_datatabfinal occurs 0,
assets_class(10),
c_code(4),
description(50),
add_description(50),
serial(18),
capitalisation(8),
c_centre(10),
plant(4),
asset_location(10),
amount1(13),
amount2(13),
end of t_datatabfinal.
data : assets_class1(4) value '0000',
class_asset(8).
data : date_diff type p, earliest type C, timediff type p.
data : a_new type d, b_new type d.
data : capitalisation type string.
DATA: it_datatab TYPE STANDARD TABLE OF t_datatab,
wa_datatab TYPE t_datatab.
DATA: wa_record TYPE t_datatab,
it_record TYPE STANDARD TABLE OF t_datatab INITIAL SIZE 0.
DATA: itab LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATA: gd_currentrow TYPE i.
At selection screen
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pfile.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'PFILE'
IMPORTING
file_name = pfile.
data: itab like ALSMEX_TABLINE occurs 0 with header line.
*pfile1 = pfile.
START-OF-SELECTION.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = pfile
I_BEGIN_COL = '1'
I_BEGIN_ROW = '1' "Column headers not required
I_END_COL = '11'
I_END_ROW = '4'
TABLES
INTERN = itab
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Sort table by rows and colums
SORT itab BY row col.
Get first row retrieved
READ TABLE itab INDEX 1.
Set first row retrieved to current row
gd_currentrow = itab-row.
LOOP AT itab.
Reset values for next row
IF itab-row NE gd_currentrow.
APPEND wa_datatab TO it_record.
CLEAR wa_datatab.
gd_currentrow = itab-row.
ENDIF.
CASE itab-col.
WHEN '0001'.
wa_datatab-assets_class = itab-value.
WHEN '0002'.
wa_datatab-c_code = itab-value.
WHEN '0003'.
wa_datatab-description = itab-value.
WHEN '0004'.
wa_datatab-add_description = itab-value.
WHEN '0005'.
wa_datatab-serial = itab-value.
WHEN '0006'.
wa_datatab-capitalisation = itab-value.
WHEN '0007'.
wa_datatab-c_centre = itab-value.
WHEN '0008'.
wa_datatab-plant = itab-value.
WHEN '0009'.
wa_datatab-asset_location = itab-value.
WHEN '0010'.
wa_datatab-amount1 = itab-value.
WHEN '0011'.
wa_datatab-amount2 = itab-value.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
APPEND wa_datatab TO it_record.
LOOP AT it_record INTO t_datatabfinal.
APPEND t_datatabfinal.
ENDLOOP.
start-of-selection.
refresh bdcdata.
clear bdcdata.
perform open_group.
Loop at t_datatabfinal.
data: stop(1),
date1(8).
stop = `.`.
concatenate assets_class1 t_datatabfinal-assets_class into class_asset.
concatenate t_datatabfinal-capitalisation(2) stop t_datatabfinal-capitalisation2(2) stop t_datatabfinal-capitalisation6(2) into date1.
select * from ankb where ANLKL = class_asset
and AFABE = '01'
and afasl = 'LINS'.
if sy-subrc = 0 .
useful_life = ankb-NDJAR.
useful_period = ankb-NDPER.
endif.
useful_life = useful_life * 365.
useful_period = useful_period * 30.
endselect.
perform bdc_dynpro using 'SAPLAIST' '0105'.
perform bdc_field using 'BDC_CURSOR'
'ANLA-BUKRS'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'ANLA-ANLKL' "TOPICK Asset class
t_datatabfinal-assets_class.
'4000'.
perform bdc_field using 'ANLA-BUKRS' "TOPICK Company code
t_datatabfinal-c_code.
'2000'.
perform bdc_dynpro using 'SAPLAIST' '1000'.
perform bdc_field using 'BDC_OKCODE'
'=TAB02'.
perform bdc_field using 'ANLA-TXT50' "TOPICK Asset description
t_datatabfinal-description.
'Compaq Evo D3102'.
perform bdc_field using 'ANLA-TXA50' "TOPICK Additional asset description
t_datatabfinal-add_description.
'Desktop Computer'.
perform bdc_field using 'ANLA-SERNR' "TOPICK Serial number
t_datatabfinal-serial.
'V309LB42A259'.
perform bdc_field using 'RA02S-XHIST'
'X'.
perform bdc_field using 'BDC_CURSOR'
'ANLA-AKTIV'.
perform bdc_field using 'ANLA-AKTIV' "TOPICK Asset capitalization
date1.
'13.10.03'.
perform bdc_dynpro using 'SAPLAIST' '1000'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'BDC_CURSOR'
'ANLZ-KOSTL'.
perform bdc_field using 'ANLZ-KOSTL'
t_datatabfinal-c_centre.
'203000'.
perform bdc_dynpro using 'SAPLAIST' '1000'.
perform bdc_field using 'BDC_OKCODE'
'=ALTD'.
perform bdc_field using 'BDC_CURSOR'
'ANLZ-STORT'.
perform bdc_field using 'ANLZ-GSBER' "TOPICK Business area
t_datatabfinal-bus_area.
'B008'.
perform bdc_field using 'ANLZ-KOSTL' "TOPICK Cost center
t_datatabfinal-c_centre.
'203000'.
perform bdc_field using 'ANLZ-WERKS' "TOPICK Plant
t_datatabfinal-plant.
'2001'.
perform bdc_field using 'ANLZ-STORT' "TOPICK Asset location
t_datatabfinal-asset_location.
'001'.
perform bdc_field using 'ANLZ-FISTL' "TOPICK Funds center
t_datatabfinal-c_centre.
'203000'.
perform bdc_dynpro using 'SAPLALTD' '1100'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'BDC_CURSOR'
'RALT_DYNP_STRUC-ANBTR01(06)'.
perform bdc_field using 'RALT_DYNP_STRUC-ANBTR01(01)'
t_datatabfinal-amount1.
' 450000'.
perform bdc_field using 'RALT_DYNP_STRUC-ANBTR01(06)'
t_datatabfinal-amount2.
' 25000'.
perform bdc_dynpro using 'SAPLALTD' '1100'.
perform bdc_field using 'BDC_CURSOR'
'ANLA-ANLN1'.
perform bdc_field using 'BDC_OKCODE'
'=BUCH'.
perform bdc_transaction using 'AS91'.
concatenate t_datatabfinal-capitalisation4(4) t_datatabfinal-capitalisation2(2) t_datatabfinal-capitalisation(2) into capitalisation.
a_new = '20070701'. "Date format is YYYYMMDD
b_new = capitalisation. "Date format is YYYYMMDD
CALL FUNCTION '/SDF/CMO_DATETIME_DIFFERENCE'
EXPORTING
date1 = a_NEW
time1 = '000000'
date2 = b_NEW
time2 = '000000'
IMPORTING
DATEDIFF = date_diff
EXCEPTIONS
INVALID_DATETIME = 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.
***calculation of remaining life in years and periods for the asset***
remaining_life_yrs = ( useful_life - date_diff ) div 365.
remainder = ( useful_life - date_diff ) mod 365.
remaining_life_periods = remainder div 30.
perform bdc_dynpro using 'SAPLAIST' '0100'.
perform bdc_field using 'BDC_CURSOR'
'ANLA-ANLN1'.
perform bdc_field using 'BDC_OKCODE'
'=D190'.
perform bdc_field using 'ANLA-ANLN1'
'40006'.
perform bdc_field using 'ANLA-ANLN2'
'0'.
perform bdc_field using 'ANLA-BUKRS'
t_datatabfinal-c_code.
'2000'.
perform bdc_dynpro using 'SAPLAIST' '1000'.
perform bdc_field using 'BDC_OKCODE'
'=BUCH'.
perform bdc_field using 'BDC_CURSOR'
'ANLB-AFABG(01)'.
perform bdc_field using 'ANLB-NDJAR(01)'
remaining_life_yrs.
' 1'.
perform bdc_field using 'ANLB-NDPER(01)'
remaining_life_periods.
' 8'.
perform bdc_field using 'ANLB-AFABG(01)'
'01.07.2007'.
perform bdc_transaction using 'AS92'.
endloop.
perform close_group.Formatting error in file. resolved.
-
Unable to incorporate multiple data in BDC * URGENT*
Hi EveryOne .
See the code. This code can do BDC for a single value of store and bonus buy no., in transaction WPMA
The current requirement is for a given store all bonus buy values should get populated and then executed each time store wise.
Eg
Store bonus buy values
1001 1
1001 2
1001 4
1002 A
1002 L
1003 6
1003 7
1003 H.
See the code below, and tell me the necessary changes required!!
report zwpma1
no standard page heading line-size 255.
type-pools slis.
data: wt_fcat type slis_fieldcat_alv.
data: it_fcat type slis_t_fieldcat_alv.
data: cnt type sy-tabix.
*include bdcrecx1.
types: begin of ty_final,
store(10) type c,
docnum type docnum,
bbynr type bbynr,
end of ty_final.
types: begin of ty_final1,
store(10),
bbynr type bbynr,
end of ty_final1.
data: wa_bonusbuy type zbonusbuy,
it_bonusbuy type standard table of zbonusbuy with header line,
it_bonusbuy1 type standard table of ty_final1 with header line,
it_t001w type standard table of t001w with header line,
it_edidc type standard table of edidc with header line,
it_edid4 type standard table of edid4 with header line,
it_final type standard table of ty_final with header line,
*Work areas:
wa_edidc type edidc,
wa_edid4 type edid4,
wa_final type ty_final.
data : it_bdcmsgcoll like bdcmsgcoll occurs 0 with header line.
data: bdcdata like table of bdcdata with header line.
data: lv_mode(1) value 'N'.
data : mtext(100) type c,
mvar1 like balm-msgv1,
w_msg(200) type c.
data : l_startt type sy-uzeit, " Time before Recording
l_endt type sy-uzeit, " time after recording
l_cdate type sy-datum. " Current date
start-of-selection.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
percentage = 100
text = 'Extracting Data....... '.
select werks from t001w into corresponding fields of table it_t001w.
delete adjacent duplicates from it_t001w comparing werks.
if not it_t001w[] is initial.
select store bbynr mmid from zbonusbuy into corresponding fields of table it_bonusbuy for all
entries in it_t001w where store = it_t001w-werks.
if sy-subrc = 0.
sort it_bonusbuy by store.
endif.
endif.
refresh it_t001w.
loop at it_bonusbuy.
move-corresponding it_bonusbuy to it_bonusbuy1.
append it_bonusbuy1.
clear: it_bonusbuy, it_bonusbuy1.
endloop.
l_cdate = sy-datum.
clear l_startt .
l_startt = sy-uzeit.
loop at it_bonusbuy.
*break retaildev.
*perform open_group.
perform bdc_dynpro using 'RWDPOSAN' '1000'.
perform bdc_field using 'BDC_CURSOR'
'SO_BBUY-LOW'.
perform bdc_field using 'BDC_OKCODE'
'=ONLI'.
perform bdc_field using 'PA_VKORG'
'HB00'.
perform bdc_field using 'PA_VTWEG'
'H2'.
perform bdc_field using 'SO_FISEL-LOW'
'1001'.
it_bonusbuy-store.
LOOP AT it_bonusbuy1 WHERE store = it_bonusbuy-store.
if sy-subrc = 0.
perform bdc_field using 'PA_BBUY'
'X'.
perform bdc_field using 'SO_BBUY-LOW'
'TEST_00035'.
it_bonusbuy1-bbynr.
it_bonusbuy-bbynr.
endif.
clear it_bonusbuy1.
ENDLOOP.
*Refresh: it_bonusbuy1.
clear bdcdata.
call transaction 'WPMA' using bdcdata
mode lv_mode
UPDATE 'S'
messages into it_bdcmsgcoll.
refresh bdcdata.
clear it_bonusbuy.
endloop.
l_endt = sy-uzeit.
break retaildev.
select docnum
direct
credat
cretim
mestyp
idoctp
from edidc into corresponding fields of table it_edidc
where
credat = l_cdate and
( cretim ge l_startt and cretim le l_endt ) and
mestyp = 'WPDBBY' and
idoctp = 'WPDBBY01'. " " l_startt and l_endt and
break retaildev.
if sy-subrc = 0.
select docnum
counter
segnum
segnam
sdata
from edid4 into corresponding fields of table it_edid4 for all entries in it_edidc
where
docnum = it_edidc-docnum.
endif.
*Loop at it_final into wa_final.
loop at it_edid4 into wa_edid4 where segnam = 'E1WPBB01'.
wa_final-store = wa_edid4-sdata(10).
wa_final-docnum = wa_edid4-docnum.
wa_final-bbynr = wa_edid4-sdata+10(12).
append wa_final to it_final.
endloop.
delete adjacent duplicates from it_final comparing docnum store bbynr.
sort it_final by store.
clear: wa_final,wa_edidc, wa_edid4.
refresh : it_edid4, it_edidc.
*ALV OutPut
write :'Following are the Idocs posted successfully Storewise' .
loop at it_final.
write : it_final-store , it_final-docnum , it_final-bbynr .
endloop.
*Break retaildev.
perform top_of_page.
perform alv_layout-settings.
perform zalv_fieldcatpopn using it_fcat.
perform z_reuse_alv_grid_display.Have you tried serialization and sendingas an object using something like Zend AMF?
Please mark this question as answered if this works for you.
-Mr.12 -
I am new to the bdc .
i have gone to SHDB and created a new recording for the some T-code .
After that i have created a prog (transfer from recording ) .
i got some values in the file in my presenation server.
i got default code generated .
I have to declare the internal table of some time .
may i know of which type should i declare my internal table ??
My code ****************************************************************
report ZRAJESH_BDC
no standard page heading line-size 255.
include bdcrecx1.
start-of-selection.
perform open_group.
*******loop
perform bdc_dynpro using 'SAPMF02K' '0101'.
perform bdc_field using 'BDC_CURSOR'
'RF02K-D0110'.
perform bdc_field using 'RF02K-LIFNR'
'12345'.
perform bdc_field using 'RF02K-D0110'
'X'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro using 'SAPMF02K' '0110'.
perform bdc_field using 'BDC_CURSOR'
'LFA1-TELF2'.
perform bdc_field using 'BDC_OKCODE'
'=UPDA'.
perform bdc_field using 'LFA1-ANRED'
'Mr.'.
perform bdc_field using 'LFA1-NAME1'
'RAJESH'.
perform bdc_field using 'LFA1-SORTL'
'Q'.
perform bdc_field using 'LFA1-LAND1'
'US'.
perform bdc_field using 'LFA1-SPRAS'
'EN'.
perform bdc_field using 'LFA1-TELF2'
'9033558227'.
perform bdc_transaction using 'XK02'.
perform close_group.
Start new screen *
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
Insert field *
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> NODATA.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM.Hi,
I have one simple BDC Program .
Just you have to do recording by using SHDB Transaction Code.
and Copy that program and do some modification by following my Program and upload data to that perticular transaction.
before that u have to prepare data in Text file by using TAB Space .
Below is the Code(I have used MM01 transaction)
******************************************************************************************8
report ZBDCTEST no standard page heading line-size 255.
***DECLARING TABLES.
TABLES : MARA.
**DECLARING INTERNAL TABLE.
DATA : BEGIN OF ITAB OCCURS 0,
MATNR LIKE MARA-MATNR,
MEINS LIKE MARA-MEINS,
MATKL LIKE MARA-MATKL,
Maktx like makt-maktx,
SPART LIKE MARA-SPART,
END OF ITAB.
DATA BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
CODEPAGE = 'IBM'
FILENAME = 'C:\TEST.TXT'
FILETYPE = 'DAT'
HEADLEN = ' '
LINE_EXIT = ' '
TRUNCLEN = ' '
USER_FORM = ' '
USER_PROG = ' '
DAT_D_FORMAT = ' '
IMPORTING
FILELENGTH =
TABLES
DATA_TAB = ITAB
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 <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*include bdcrecx1.
*start-of-selection.
*perform open_group.
LOOP AT ITAB.
REFRESH BDCDATA.
perform bdc_dynpro using 'SAPLMGMM' '0060'.
perform bdc_field using 'BDC_CURSOR'
'RMMG1_REF-MATNR'.
perform bdc_field using 'BDC_OKCODE'
'=AUSW'.
perform bdc_field using 'RMMG1-MATNR'
ITAB-MATNR.
perform bdc_field using 'RMMG1-MBRSH'
'M'.
perform bdc_field using 'RMMG1-MTART'
'FOOD'.
perform bdc_dynpro using 'SAPLMGMM' '0070'.
perform bdc_field using 'BDC_CURSOR'
'MSICHTAUSW-DYTXT(02)'.
perform bdc_field using 'BDC_OKCODE'
'=ENTR'.
perform bdc_field using 'MSICHTAUSW-KZSEL(01)'
'X'.
perform bdc_field using 'MSICHTAUSW-KZSEL(02)'
'X'.
perform bdc_dynpro using 'SAPLMGMM' '4000'.
perform bdc_field using 'BDC_OKCODE'
'=SP02'.
perform bdc_field using 'MAKT-MAKTX'
'T1003'.
perform bdc_field using 'BDC_CURSOR'
'MARA-MATKL'.
perform bdc_field using 'MARA-MEINS'
'BOX'.
perform bdc_field using 'MARA-MATKL'
ITAB-MATKL.
perform bdc_field using 'MARA-SPART'
ITAB-SPART.
perform bdc_field using 'MARA-MTPOS_MARA'
'NORM'.
perform bdc_dynpro using 'SAPLMGMM' '4004'.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
perform bdc_field using 'BDC_CURSOR'
'MAKT-MAKTX'.
perform bdc_field using 'MAKT-MAKTX'
'T1003'.
*perform bdc_transaction using 'MM01'.
*perform close_group.
CALL TRANSACTION 'MM01' USING BDCDATA MODE 'A'. "A= all screens ,N= no screens
ENDLOOP.
Start new screen *
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
Insert field *
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> SPACE.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM.
if you want further help let me know
Regards,
Jak -
How to skip first record while inserting data from a flat file to BW system
Hi Experts,
In my project we have to upload flat file into a BW system. I have written a program and it is working fine.
Now we have got another requirement. The flat file will have a header record (first row). While uploading the flat file we have to skip this record. How I can do so?
The code is as below:
FORM upload1.
DATA : wf_title TYPE string,
lt_filetab TYPE filetable,
l_separator TYPE char01,
l_action TYPE i,
l_count TYPE i,
ls_filetab TYPE file_table,
wf_delemt TYPE rollname,
wa_fieldcat TYPE lvc_s_fcat,
tb_fieldcat TYPE lvc_t_fcat,
rows_read TYPE i,
p_error TYPE char01,
l_file TYPE string.
DATA: wf_object(30) TYPE c,
wf_tablnm TYPE rsdchkview.
wf_object = 'myprogram'.
DATA i TYPE i.
DATA:
lr_mdmt TYPE REF TO cl_rsdmd_mdmt,
lr_mdmtr TYPE REF TO cl_rsdmd_mdmtr,
lt_idocstate TYPE rsarr_t_idocstate,
lv_subrc TYPE sysubrc.
TYPES : BEGIN OF test_struc,
/bic/myprogram TYPE /bic/oimyprogram,
txtmd TYPE rstxtmd,
END OF test_struc.
DATA : tb_assum TYPE TABLE OF /bic/pmyprogram.
DATA: wa_ztext TYPE /bic/tmyprogram,
myprogram_temp TYPE ziott_assum,
wa_myprogram TYPE /bic/pmyprogram.
DATA : test_upload TYPE STANDARD TABLE OF test_struc,
wa2 TYPE test_struc.
DATA : wa_test_upload TYPE test_struc,
ztable_data TYPE TABLE OF /bic/pmyprogram,
ztable_text TYPE TABLE OF /bic/tmyprogram,
wa_upld_text TYPE /bic/tmyprogram,
wa_upld_data TYPE /bic/pmyprogram,
t_assum TYPE ziott_assum.
DATA : wa1 LIKE test_upload.
wf_title = text-026.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = wf_title
default_extension = 'txt'
file_filter = 'Tab delimited Text Files (*.txt)'
CHANGING
file_table = lt_filetab
rc = l_count
user_action = l_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
OTHERS = 3. "#EC NOTEXT
IF sy-subrc <> 0.
EXIT.
ENDIF.
LOOP AT lt_filetab INTO ls_filetab.
l_file = ls_filetab.
ENDLOOP.
CHECK l_action = 0.
IF l_file IS INITIAL.
EXIT.
ENDIF.
l_separator = 'X'.
wa_fieldcat-fieldname = 'test'.
wa_fieldcat-dd_roll = wf_delemt.
APPEND wa_fieldcat TO tb_fieldcat.
CALL FUNCTION 'MESSAGES_INITIALIZE'.
CLEAR wa_test_upload.
Upload file from front-end (PC)
File format is tab-delimited ASCII
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_file
has_field_separator = l_separator
TABLES
data_tab = i_mara
data_tab = test_upload
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.
IF sy-subrc <> 0.
EXIT.
ELSE.
CALL FUNCTION 'MESSAGES_INITIALIZE'.
IF test_upload IS NOT INITIAL.
DESCRIBE TABLE test_upload LINES rows_read.
CLEAR : wa_test_upload,wa_upld_data.
LOOP AT test_upload INTO wa_test_upload.
CLEAR : p_error.
rows_read = sy-tabix.
IF wa_test_upload-/bic/myprogram IS INITIAL.
p_error = 'X'.
MESSAGE s153 WITH wa_test_upload-/bic/myprogram sy-tabix.
CONTINUE.
ELSE.
TRANSLATE wa_test_upload-/bic/myprogram TO UPPER CASE.
wa_upld_text-txtmd = wa_test_upload-txtmd.
wa_upld_text-txtsh = wa_test_upload-txtmd.
wa_upld_text-langu = sy-langu.
wa_upld_data-chrt_accts = 'xyz1'.
wa_upld_data-co_area = '12'.
wa_upld_data-/bic/zxyzbcsg = 'Iy'.
wa_upld_data-objvers = 'A'.
wa_upld_data-changed = 'I'.
wa_upld_data-/bic/zass_mdl = 'rrr'.
wa_upld_data-/bic/zass_typ = 'I'.
wa_upld_data-/bic/zdriver = 'yyy'.
wa_upld_text-langu = sy-langu.
MOVE-CORRESPONDING wa_test_upload TO wa_upld_data.
MOVE-CORRESPONDING wa_test_upload TO wa_upld_text.
APPEND wa_upld_data TO ztable_data.
APPEND wa_upld_text TO ztable_text.
ENDIF.
ENDLOOP.
DELETE ADJACENT DUPLICATES FROM ztable_data.
DELETE ADJACENT DUPLICATES FROM ztable_text.
IF ztable_data IS NOT INITIAL.
CALL METHOD cl_rsdmd_mdmt=>factory
EXPORTING
i_chabasnm = 'myprogram'
IMPORTING
e_r_mdmt = lr_mdmt
EXCEPTIONS
invalid_iobjnm = 1
OTHERS = 2.
CALL FUNCTION 'MESSAGES_INITIALIZE'.
**Lock the Infoobject to update
CALL FUNCTION 'RSDG_IOBJ_ENQUEUE'
EXPORTING
i_objnm = wf_object
i_scope = '1'
i_msgty = rs_c_error
EXCEPTIONS
foreign_lock = 1
sys_failure = 2.
IF sy-subrc = 1.
MESSAGE i107(zddd_rr) WITH wf_object sy-msgv2.
EXIT.
ELSEIF sy-subrc = 2.
MESSAGE i108(zddd_rr) WITH wf_object.
EXIT.
ENDIF.
*****Update Master Table
IF ztable_data IS NOT INITIAL.
CALL FUNCTION 'RSDMD_WRITE_ATTRIBUTES_TEXTS'
EXPORTING
i_iobjnm = 'myprogram'
i_tabclass = 'M'
I_T_ATTR = lt_attr
TABLES
i_t_table = ztable_data
EXCEPTIONS
attribute_name_error = 1
iobj_not_found = 2
generate_program_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = 'zddd_rr'
msgty = 'E'
txtnr = '054'
msgv1 = text-033
EXCEPTIONS
OTHERS = 3.
MESSAGE e054(zddd_rr) WITH 'myprogram'.
ELSE.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = 'zddd_rr'
msgty = 'S'
txtnr = '053'
msgv1 = text-033
EXCEPTIONS
OTHERS = 3.
ENDIF.
*endif.
*****update Text Table
IF ztable_text IS NOT INITIAL.
CALL FUNCTION 'RSDMD_WRITE_ATTRIBUTES_TEXTS'
EXPORTING
i_iobjnm = 'myprogram'
i_tabclass = 'T'
TABLES
i_t_table = ztable_text
EXCEPTIONS
attribute_name_error = 1
iobj_not_found = 2
generate_program_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
CALL FUNCTION 'MESSAGE_STORE'
EXPORTING
arbgb = 'zddd_rr'
msgty = 'E'
txtnr = '055'
msgv1 = text-033
EXCEPTIONS
OTHERS = 3.
ENDIF.
ENDIF.
ELSE.
MESSAGE s178(zddd_rr).
ENDIF.
ENDIF.
COMMIT WORK.
CALL FUNCTION 'RSD_CHKTAB_GET_FOR_CHA_BAS'
EXPORTING
i_chabasnm = 'myprogram'
IMPORTING
e_chktab = wf_tablnm
EXCEPTIONS
name_error = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
****Release locks on Infoobject
CALL FUNCTION 'RSDG_IOBJ_DEQUEUE'
EXPORTING
i_objnm = 'myprogram'
i_scope = '1'.
ENDIF.
ENDIF.
PERFORM data_selection .
PERFORM update_alv_grid_display.
CALL FUNCTION 'MESSAGES_SHOW'.
ENDFORM.
Please let me know how I can skip first record of the flat file?
Regards,
Sgo through this hope u can get some idea
REPORT ztest no standard page heading line-size 255.
Declaration *
TYPES t_itab1 TYPE alsmex_tabline.
types: begin of t_csks,
kostl like csks-kostl,
end of t_csks.
types: begin of t_cska,
kstar like cska-kstar,
end of t_cska.
data: begin of t_flatfile,
docdate like COHEADER-BLDAT,
postdate like COHEADER-BUDAT,
doctext like COHEADER-BLTXT,
costele like RK23F-KSTAR,
amount like RK23F-WTGBTR,
scostctr like RK23F-SKOSTL,
rcostctr like RK23F-EKOSTL,
rintorder like RK23F-EAUFNR,
end of t_flatfile.
data: begin of t_flatfile1,
docdate like COHEADER-BLDAT,
postdate like COHEADER-BUDAT,
doctext like COHEADER-BLTXT,
costele like RK23F-KSTAR,
amount like RK23F-WTGBTR,
scostctr like RK23F-SKOSTL,
rcostctr like RK23F-EKOSTL,
rintorder like RK23F-EAUFNR,
NUM LIKE SY-INDEX,
end of t_flatfile1.
data: itab like table of t_flatfile with header line.
data: itab2 like table of t_flatfile1 with header line.
DATA: it_itab1 TYPE STANDARD TABLE OF t_itab1 WITH HEADER LINE,
MESSTAB1 LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE,
MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
data: begin of bdcdata occurs 0.
include structure bdcdata.
data: end of bdcdata.
data:t_lin type i VALUE '0',
u_rec type i VALUE '0',
s_rec type i VALUE '0'.
data: it_csks type standard table of t_csks,
wa_csks type t_csks.
data: it_cska type standard table of t_cska,
wa_cska type t_cska.
*Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-010.
parameters: p_docdat LIKE COHEADER-BLDAT obligatory,
p_postda LIKE COHEADER-BUDAT obligatory,
p_doctxt LIKE COHEADER-BLTXT.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-011.
parameters: p_file LIKE RLGRAP-FILENAME obligatory,
DIS_MODE LIKE CTU_PARAMS-DISMODE DEFAULT 'N'.
SELECTION-SCREEN END OF BLOCK b2.
A T S E L E C T I O N S C R E E N *
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM get_local_file_name USING p_file.
*Start of Selection
START-OF-SELECTION.
Perform get_Excel_data.
perform validate_data.
Perform Process_Data.
end-of-selection
end-of-selection.
perform display_data.
*& Form get_local_file_name
text
-->P_P_FILE text
FORM get_local_file_name USING P_P_FILE.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
CHANGING
file_name = p_file.
ENDFORM. " get_local_file_name
*& Form get_Excel_data
text
--> p1 text
<-- p2 text
FORM get_Excel_data .
FIELD-SYMBOLS : <FS>.
DATA : V_INDEX TYPE I.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = 2
i_begin_row = 1
i_end_col = 256
i_end_row = 9999 "65536
TABLES
intern = it_itab1
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
Message text-013 type 'E'.
ENDIF.
IF IT_ITAB1[] IS INITIAL.
Message text-001 type 'E'.
else. "IF IT_ITAB1[] IS INITIAL.
data: itab2 like itab occurs 0 with header line.
SORT IT_ITAB1 BY ROW COL.
LOOP AT IT_ITAB1.
MOVE :IT_ITAB1-COL TO V_INDEX.
ASSIGN COMPONENT V_INDEX OF STRUCTURE itab2 TO <FS>.
MOVE : IT_ITAB1-VALUE TO <FS>.
AT END OF ROW.
MOVE-CORRESPONDING itab2 TO itab.
APPEND itab.
CLEAR:itab,itab2.
ENDAT.
endloop.
describe table itab lines t_lin.
endif. "IF IT_ITAB1[] IS INITIAL.
ENDFORM. " get_Excel_data
*& Form Process_Data
text
--> p1 text
<-- p2 text
FORM Process_Data .
data:l_tabix type sy-tabix.
data:l_periv like t001-periv,
l_monat like bkpf-monat,
l_gjahr like bkpf-gjahr,
l_amt(21) type c.
data: l_ddate(10),
l_pdate(10).
WRITE p_docdat TO l_ddate.
WRITE p_postda TO l_pdate.
clear: l_periv,l_monat,l_gjahr.
select single periv from t001 into l_periv where bukrs = '5000'. "P_bukrs
if sy-subrc eq 0.
l_gjahr = p_postda+0(4).
call function 'FI_PERIOD_DETERMINE'
EXPORTING
i_budat = p_postda
i_bukrs = '5000' "p_bukrs
i_periv = l_periv
i_gjahr = l_gjahr
IMPORTING
e_monat = l_monat.
clear:l_periv.
endif.
loop at itab2.
refresh:bdcdata.
clear:bdcdata.
l_tabix = sy-tabix.
perform bdc_dynpro using 'SAPLK23F1' '1200'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'COHEADER-SEND_REC_REL'
'10SAP'.
perform bdc_field using 'RK23F-STATUS'
'S'.
perform bdc_field using 'COHEADER-BLDAT'
itab-docdate.
l_ddate.
perform bdc_field using 'COHEADER-BUDAT'
itab-postdate.
l_pdate.
perform bdc_field using 'COHEADER-PERIO'
l_monat. "'9'.
perform bdc_field using 'COHEADER-BLTXT'
itab-doctext.
p_doctxt.
perform bdc_field using 'RK23F-KSTAR'
itab2-costele.
WRITE itab2-amount TO l_amt.
l_amt = itab-amount.
condense l_amt no-gaps.
perform bdc_field using 'RK23F-WTGBTR'
l_amt.
itab-amount.
perform bdc_field using 'RK23F-WAERS'
'USD'.
*perform bdc_field using 'RK23F-SGTXT'
itab-doctext.
perform bdc_field using 'RK23F-SKOSTL'
itab2-scostctr.
perform bdc_field using 'BDC_CURSOR'
'RK23F-EAUFNR'.
perform bdc_field using 'RK23F-EKOSTL'
itab2-rcostctr.
perform bdc_field using 'RK23F-EAUFNR'
itab2-rintorder.
perform bdc_dynpro using 'SAPLK23F1' '1200'.
perform bdc_field using 'BDC_OKCODE'
'=POST'.
perform bdc_field using 'COHEADER-SEND_REC_REL'
'10SAP'.
perform bdc_field using 'RK23F-STATUS'
'S'.
perform bdc_field using 'COHEADER-BLDAT'
itab-docdate.
l_ddate.
perform bdc_field using 'COHEADER-BUDAT'
itab-postdate.
l_pdate.
perform bdc_field using 'COHEADER-PERIO'
'9'.
l_monat.
perform bdc_field using 'COHEADER-BLTXT'
itab-doctext.
p_doctxt.
perform bdc_field using 'BDC_CURSOR'
'RK23F-KSTAR'.
perform bdc_field using 'RK23F-WAERS'
'USD'.
CALL TRANSACTION 'KB15N' USING BDCDATA MODE DIS_MODE MESSAGES INTO MESSTAB.
If sy-subrc = 0.
s_rec = s_rec + 1.
ELSE.
u_rec = u_rec + 1.
move ITAB2-NUM to messtab1-msgv1.
concatenate itab2-costele ' | ' itab2-scostctr ' | ' itab2-rcostctr ' | ' itab2-rintorder into messtab1-msgv2.
condense messtab1-msgv2.
condense messtab1-msgv1.
append messtab1.
endif.
clear:itab2.
endloop.
ENDFORM. " Process_Data
BDC_DYNPRO *
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
BDC_FIELD *
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> ''. "NODATA.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM. "BDC_FIELD
*& Form display_data
text
--> p1 text
<-- p2 text
FORM display_data .
skip 2.
write:/15 text-002.
skip 2.
write:/8 text-003.
SKIP.
write:/12 text-008,
25 P_DOCDAT.
SKIP.
write:/12 text-009,
25 P_POSTDA.
SKIP.
write:/12 text-012,
25 P_DOCTXT.
SKIP.
write:/12 text-004,
25 p_file.
skip 2.
write:/8 text-005,
60 t_lin.
skip.
write:/8 text-006,
60 s_rec.
skip.
write:/8 text-007,
60 u_rec.
skip.
write:/10 'row no',
20 'Information'.
skip.
loop at messtab1.
write:/10 messtab1-msgv1,
20 messtab1-msgv2.
clear:messtab1.
endloop.
ENDFORM. " display_data
*& Form validate_data
text
--> p1 text
<-- p2 text
FORM validate_data .
data: l_tabix1 type sy-tabix.
data: l_tabix2 type sy-tabix.
if not itab[] is initial.
select kostl from CSKS into table it_csks.
if sy-subrc eq 0.
sort it_csks by kostl.
endif.
select kstar from CSKA into table it_cska.
if sy-subrc eq 0.
sort it_cska by kstar.
endif.
loop at itab.
l_tabix1 = sy-tabix.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = itab-scostctr
IMPORTING
OUTPUT = itab-scostctr .
read table it_csks into wa_csks with key kostl = itab-scostctr.
if sy-subrc ne 0.
u_rec = u_rec + 1.
L_TABIX2 = l_tabix1 + 1.
move l_tabix2 to messtab1-msgv1.
move l_tabix1 to messtab1-msgv1.
move itab-rintorder to messtab1-msgv2.
concatenate itab-costele ' | ' itab-scostctr ' | ' itab-rcostctr ' | ' itab-rintorder into messtab1-msgv2.
condense messtab1-msgv2.
condense messtab1-msgv1.
append messtab1.
clear:wa_csks.
CLEAR:L_TABIX2.
continue.
endif.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = itab-rcostctr
IMPORTING
OUTPUT = itab-rcostctr .
read table it_csks into wa_csks with key kostl = itab-rcostctr.
if sy-subrc ne 0.
u_rec = u_rec + 1.
L_TABIX2 = l_tabix1 + 1.
move l_tabix2 to messtab1-msgv1.
move l_tabix1 to messtab1-msgv1.
concatenate itab-costele ' | ' itab-scostctr ' | ' itab-rcostctr ' | ' itab-rintorder into messtab1-msgv2.
condense messtab1-msgv2.
condense messtab1-msgv1.
append messtab1.
clear:wa_csks.
CLEAR:L_TABIX2.
continue.
endif.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = itab-costele
IMPORTING
OUTPUT = itab-costele .
read table it_cska into wa_cska with key kstar = itab-costele.
if sy-subrc ne 0.
u_rec = u_rec + 1.
L_TABIX2 = l_tabix1 + 1.
move l_tabix2 to messtab1-msgv1.
move l_tabix1 to messtab1-msgv1.
concatenate itab-costele ' | ' itab-scostctr ' | ' itab-rcostctr ' | ' itab-rintorder into messtab1-msgv2.
condense messtab1-msgv2.
condense messtab1-msgv1.
append messtab1.
clear:wa_csks.
CLEAR:L_TABIX2.
continue.
endif.
move-corresponding itab to itab2.
MOVE l_tabix1 TO ITAB2-NUM.
append itab2.
clear: itab2.
clear:itab.
endloop.
else.
message 'No records in File' type 'S'.
endif.
ENDFORM. " validate_data -
Adding Data to the database for SAP Transactions
Hi
I'm new to the whole ABAP. I would like to enquire about adding transaction data in SAP through ABAP but it must be immediate.
I know that one can use a BAPI to add data and can rollback if any problems occur.
But if no BAPI exists how does one write code to add a document to the SAP database but with everything SAP transaction requires like the BAPI. What is the process and how???
So let say I wanted to do FB01 which is SAP FI document and must be immediate. There is a BAPI that exists for it but if there was not one how would I do this???
I know one can also use BDC but that creates a batch and then needs to be executed in SM35, I want a way to add data for two or three SAP transactions, if any problems occur with any of the steps rollback everything else commit everything to the database.
Any simple detail examples (code) that satisfy the above will be greatly appreciated and REWARDED.
Thanks in advanceLuis,
i have a code exactly same BDC for FB01.
refer:
REPORT z_etching_fb01
NO STANDARD PAGE HEADING LINE-SIZE 255.
*etching invoice load
INCLUDE bdcrecx1.
TYPE-POOLS: truxs , slis.
*PARAMETERS: dataset(132) LOWER CASE DEFAULT
* 'c:\temp\etchingload.txt'.
PARAMETER: pfile LIKE rlgrap-filename." OBLIGATORY.
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.
PARAMETER: p_kunnr LIKE kna1-kunnr OBLIGATORY, "kna1-kunnr
p_bukrs LIKE bseg-bukrs,
p_mwskz LIKE t007a-mwskz OBLIGATORY,"t007a-mwskz
p_prctr LIKE cepc-prctr OBLIGATORY,"cepc-prctr
* p_newko LIKE ska1-saknr OBLIGATORY DEFAULT 41000000,"
p_budat LIKE bkpf-budat OBLIGATORY ,
p_hkont LIKE bseg-hkont OBLIGATORY DEFAULT 41000000 ,
p_waers TYPE waers OBLIGATORY DEFAULT 'GBP'."tcurr-waers
SELECTION-SCREEN END OF BLOCK a.
SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-002.
PARAMETER : report AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b.
*** DO NOT CHANGE - the generated data section - DO NOT CHANGE ***
* If it is nessesary to change the data section use the rules:
* 1.) Each definition of a field exists of two lines
* 2.) The first line shows exactly the comment
* '* data element: ' followed with the data element
* which describes the field.
* If you don't have a data element use the
* comment without a data element name
* 3.) The second line shows the fieldname of the
* structure, the fieldname must consist of
* a fieldname and optional the character '_' and
* three numbers and the field length in brackets
* 4.) Each field must be type C.
*** Generated data section with specific formatting - DO NOT CHANGE ***
* ALV *
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat LIKE LINE OF it_fieldcat,
it_top_of_page TYPE slis_t_listheader,
ls_layout TYPE slis_layout_alv,
gt_events TYPE slis_t_event.
DATA: it_raw TYPE truxs_t_text_data.
DATA: BEGIN OF record,
* data element: BLDAT
bldat_001(010), "Invoice Date
* data element: BLART
blart_002(002), " Doc Type DR or DG if credit
* data element: BUKRS
bukrs_003(004), " Company Code
* data element: BUDAT
budat_004(010), "Posting Date
* data element: MONAT
monat_005(002), "period"
* data element: WAERS
waers_006(005), "Currency
* data element: XBLNR1
xblnr_007(016), "Invoice Number
* data element: BKTXT
bktxt_008(025), "PO number
* data element: SAEOBJART
docid_009(010),
* data element: NEWBS
newbs_010(002), "posting Key
* data element: NEWKO
newko_011(017), "Customer number or GL account
* data element: WRBTR
wrbtr_012(016), "Amount
* data element: DZTERM
zterm_013(004),
* data element: DZBD1T
zbd1t_014(003),
* data element: DZFBDT
zfbdt_015(010),
* data element: DZUONR
zuonr_016(018), "Invoice Number
* data element: SGTXT
sgtxt_017(050), " PO number
* data element: NEWBS
newbs_018(002),
* data element: NEWKO
newko_019(017), "GL Account
* data element: WRBTR
wrbtr_020(016), "Amount
* data element: MWSKZ
mwskz_021(002), "Tax
* data element: DZUONR
zuonr_022(018), "Invoice Number
* data element: SGTXT
sgtxt_023(050), "PO Number
* data element: PRCTR
prctr_024(010), "Profit Center
* data element: WRBTR
wrbtr_025(016), " Amount
* data element: MWSKZ
mwskz_026(002), "Tax
* data element: DZUONR
zuonr_027(018), "Invoice Number
* data element: SGTXT
sgtxt_028(050), "PO Number
* data element: FMORE
fmore_029(001),
* data element: PRCTR
prctr_030(010), "Pr Center
* data element: FWSTE
fwste_01_031(016),
END OF record.
DATA: BEGIN OF it_excel OCCURS 0,
* data element: XBLNR1
xblnr_007(016), "Invoice Number
* data element: BLDAT
bldat_001(010), "Invoice Date
* data element: WRBTR
wrbtr_012(016), "Amount
* data element: WRBTR
wrbtr_025(016), " Tax Amount
* data element: WRBTR
wrbtr_020(016), "Gross Amount
* data element: BLART
blart_002(002), " No of units
* data element: MONAT
monat_005(002), "No of units second test"
* data element: BKTXT
bktxt_008(025), "PO number
* data element: SGTXT
sgtxt_017(050), " PO number
* data element: BUKRS
bukrs_003(004), " Company Code
* data element: BUDAT
budat_004(010), "Posting Date
* budat_004 TYPE string, "Posting Date
* data element: WAERS
waers_006(005), "Currency*
* data element: NEWKO
newko_011(017), "Customer number or GL account
* data element : kunnr
kunnr_019(010), " customer
mwskz(002),
prctr(010),
date(002),
month(002),
** data element: BKTXT
* bktxt_008(025), "PO number
** data element: SAEOBJART
* docid_009(010),
** data element: NEWBS
* newbs_010(002), "posting Key
** data element: DZTERM
* zterm_013(004),
** data element: DZBD1T
* zbd1t_014(003),
** data element: DZFBDT
* zfbdt_015(010),
** data element: DZUONR
* zuonr_016(018), "Invoice Number
** data element: NEWBS
* newbs_018(002),
** data element: NEWKO
* newko_019(017), "GL Account
** data element: MWSKZ
* mwskz_021(002), "Tax
** data element: DZUONR
* zuonr_022(018), "Invoice Number
** data element: SGTXT
* sgtxt_023(050), "PO Number
** data element: PRCTR
* prctr_024(010), "Profit Center
** data element: MWSKZ
* mwskz_026(002), "Tax
** data element: DZUONR
* zuonr_027(018), "Invoice Number
** data element: SGTXT
* sgtxt_028(050), "PO Number
** data element: FMORE
* fmore_029(001),
** data element: PRCTR
* prctr_030(010), "Pr Center
** data element: FWSTE
* fwste_01_031(016),
END OF it_excel.
DATA : BEGIN OF it_bkpf OCCURS 0,
belnr LIKE bkpf-belnr,
budat LIKE bkpf-budat,
bldat LIKE bkpf-bldat,
xblnr LIKE bkpf-xblnr,
bktxt LIKE bkpf-bktxt,
total LIKE bseg-dmbtr,
numdocs TYPE p DECIMALS 0,
END OF it_bkpf,
BEGIN OF it_bseg OCCURS 0,
belnr LIKE bseg-belnr,
dmbtr LIKE bseg-dmbtr,
mwsts LIKE bseg-mwsts,
pswsl LIKE bseg-pswsl,
END OF it_bseg,
BEGIN OF it_final OCCURS 0,
belnr LIKE bkpf-belnr,
budat LIKE bkpf-budat,
bldat LIKE bkpf-bldat,
xblnr LIKE bkpf-xblnr,
bktxt LIKE bkpf-bktxt,
dmbtr LIKE bseg-dmbtr,
mwsts LIKE bseg-mwsts,
pswsl LIKE bseg-pswsl,
END OF it_final.
***** End generated data section ***
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pfile.
PERFORM sub_browse_file. "Get file name
START-OF-SELECTION.
PERFORM sub_data_load. " Transfer excel into internal table.
PERFORM sub_calc_excel.
IF report = 'X'.
* PERFORM data_selection.
* PERFORM data_move.
*********************************GET ALV DATA
PERFORM alv_get_data.
*********************************ALV GRID DATA
PERFORM alv_grid.
ENDIF.
*if report = ''.
* PERFORM write.
* PERFORM open_dataset USING dataset.
PERFORM open_group.
* DO.
* READ DATASET dataset INTO record.
LOOP AT it_excel.
* IF sy-subrc <> 0. EXIT. ENDIF.
PERFORM bdc_dynpro USING 'SAPMF05A' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF05A-NEWKO'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'BKPF-BLDAT'
it_excel-bldat_001.
PERFORM bdc_field USING 'BKPF-BLART'
'DR'." record-blart_002.
PERFORM bdc_field USING 'BKPF-BUKRS'
it_excel-bukrs_003.
PERFORM bdc_field USING 'BKPF-BUDAT'
it_excel-budat_004.
PERFORM bdc_field USING 'BKPF-MONAT'
'3'. "record-monat_005.
PERFORM bdc_field USING 'BKPF-WAERS'
it_excel-waers_006.
PERFORM bdc_field USING 'BKPF-XBLNR'
it_excel-xblnr_007.
PERFORM bdc_field USING 'BKPF-BKTXT'
it_excel-bktxt_008.
PERFORM bdc_field USING 'FS006-DOCID'
'*' ."record-docid_009.
PERFORM bdc_field USING 'RF05A-NEWBS'
'01'." record-newbs_010.
PERFORM bdc_field USING 'RF05A-NEWKO'
it_excel-kunnr_019 .
PERFORM bdc_dynpro USING 'SAPMF05A' '0301'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF05A-NEWKO'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'BSEG-WRBTR'
it_excel-wrbtr_020." it_excel-wrbtr_012.
PERFORM bdc_field USING 'BSEG-ZTERM'
'NT30' ." record-zterm_013.
PERFORM bdc_field USING 'BSEG-ZBD1T'
'30'."record-zbd1t_014.
PERFORM bdc_field USING 'BSEG-ZFBDT'
it_excel-bldat_001."record-zfbdt_015.
PERFORM bdc_field USING 'BSEG-ZUONR'
it_excel-xblnr_007."record-zuonr_016.
PERFORM bdc_field USING 'BSEG-SGTXT'
it_excel-sgtxt_017.
PERFORM bdc_field USING 'RF05A-NEWBS'
'50'." record-newbs_018.
PERFORM bdc_field USING 'RF05A-NEWKO'
it_excel-newko_011." record-newko_019."Gl account
PERFORM bdc_dynpro USING 'SAPMF05A' '0300'.
PERFORM bdc_field USING 'BDC_CURSOR'
'BSEG-SGTXT'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'BSEG-WRBTR'
it_excel-wrbtr_012."changes from 12 to 20
PERFORM bdc_field USING 'BSEG-MWSKZ'
it_excel-mwskz." record-mwskz_021.
PERFORM bdc_field USING 'BSEG-ZUONR'
it_excel-xblnr_007." record-zuonr_022.
PERFORM bdc_field USING 'BSEG-SGTXT'
it_excel-sgtxt_017." record-sgtxt_023.
PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_CURSOR'
'COBL-PRCTR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTE'.
PERFORM bdc_field USING 'COBL-PRCTR'
it_excel-prctr ." record-prctr_024.
PERFORM bdc_dynpro USING 'SAPMF05A' '0300'.
PERFORM bdc_field USING 'BDC_CURSOR'
'BSEG-WRBTR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=STER'.
PERFORM bdc_field USING 'BSEG-WRBTR'
it_excel-wrbtr_012." it_excel-wrbtr_025.
PERFORM bdc_field USING 'BSEG-MWSKZ'
it_excel-mwskz.
PERFORM bdc_field USING 'BSEG-ZUONR'
it_excel-xblnr_007." record-zuonr_027.
PERFORM bdc_field USING 'BSEG-SGTXT'
it_excel-sgtxt_017." record-sgtxt_028.
PERFORM bdc_field USING 'DKACB-FMORE'
'X' ."record-fmore_029.
PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_CURSOR'
'COBL-PARGB'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTE'.
PERFORM bdc_field USING 'COBL-PRCTR'
it_excel-prctr." record-prctr_030.
PERFORM bdc_dynpro USING 'SAPLTAX1' '0300'.
PERFORM bdc_field USING 'BDC_CURSOR'
'BSET-FWSTE(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=GOBU'.
PERFORM bdc_field USING 'BSET-FWSTE(01)'
it_excel-wrbtr_025." record-fwste_01_031.
PERFORM bdc_transaction USING 'FB01'.
REFRESH:bdcdata,messtab.
ENDLOOP.
REFRESH:bdcdata.
** PERFORM bdc_dynpro USING 'SAPMF05A' '0100'.
* PERFORM bdc_field USING 'BDC_CURSOR'
* 'RF05A-NEWKO'.
* PERFORM bdc_field USING 'BDC_OKCODE'
* '/00'.
* PERFORM bdc_field USING 'BKPF-BLDAT'
* record-bldat_001.
* PERFORM bdc_field USING 'BKPF-BLART'
* record-blart_002.
* PERFORM bdc_field USING 'BKPF-BUKRS'
* record-bukrs_003.
* PERFORM bdc_field USING 'BKPF-BUDAT'
* record-budat_004.
* PERFORM bdc_field USING 'BKPF-MONAT'
* record-monat_005.
* PERFORM bdc_field USING 'BKPF-WAERS'
* record-waers_006.
* PERFORM bdc_field USING 'BKPF-XBLNR'
* record-xblnr_007.
* PERFORM bdc_field USING 'BKPF-BKTXT'
* record-bktxt_008.
* PERFORM bdc_field USING 'FS006-DOCID'
* record-docid_009.
* PERFORM bdc_field USING 'RF05A-NEWBS'
* record-newbs_010.
* PERFORM bdc_field USING 'RF05A-NEWKO'
* record-newko_011.
* PERFORM bdc_dynpro USING 'SAPMF05A' '0301'.
* PERFORM bdc_field USING 'BDC_CURSOR'
* 'RF05A-NEWKO'.
* PERFORM bdc_field USING 'BDC_OKCODE'
* '/00'.
* PERFORM bdc_field USING 'BSEG-WRBTR'
* record-wrbtr_012.
* PERFORM bdc_field USING 'BSEG-ZTERM'
* record-zterm_013.
* PERFORM bdc_field USING 'BSEG-ZBD1T'
* record-zbd1t_014.
* PERFORM bdc_field USING 'BSEG-ZFBDT'
* record-zfbdt_015.
* PERFORM bdc_field USING 'BSEG-ZUONR'
* record-zuonr_016.
* PERFORM bdc_field USING 'BSEG-SGTXT'
* record-sgtxt_017.
* PERFORM bdc_field USING 'RF05A-NEWBS'
* record-newbs_018.
* PERFORM bdc_field USING 'RF05A-NEWKO'
* record-newko_019.
* PERFORM bdc_dynpro USING 'SAPMF05A' '0300'.
* PERFORM bdc_field USING 'BDC_CURSOR'
* 'BSEG-SGTXT'.
* PERFORM bdc_field USING 'BDC_OKCODE'
* '/00'.
* PERFORM bdc_field USING 'BSEG-WRBTR'
* record-wrbtr_020.
* PERFORM bdc_field USING 'BSEG-MWSKZ'
* record-mwskz_021.
* PERFORM bdc_field USING 'BSEG-ZUONR'
* record-zuonr_022.
* PERFORM bdc_field USING 'BSEG-SGTXT'
* record-sgtxt_023.
* PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
* PERFORM bdc_field USING 'BDC_CURSOR'
* 'COBL-PRCTR'.
* PERFORM bdc_field USING 'BDC_OKCODE'
* '=ENTE'.
* PERFORM bdc_field USING 'COBL-PRCTR'
* record-prctr_024.
* PERFORM bdc_dynpro USING 'SAPMF05A' '0300'.
* PERFORM bdc_field USING 'BDC_CURSOR'
* 'BSEG-WRBTR'.
* PERFORM bdc_field USING 'BDC_OKCODE'
* '=STER'.
* PERFORM bdc_field USING 'BSEG-WRBTR'
* record-wrbtr_025.
* PERFORM bdc_field USING 'BSEG-MWSKZ'
* record-mwskz_026.
* PERFORM bdc_field USING 'BSEG-ZUONR'
* record-zuonr_027.
* PERFORM bdc_field USING 'BSEG-SGTXT'
* record-sgtxt_028.
* PERFORM bdc_field USING 'DKACB-FMORE'
* record-fmore_029.
* PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
* PERFORM bdc_field USING 'BDC_CURSOR'
* 'COBL-PARGB'.
* PERFORM bdc_field USING 'BDC_OKCODE'
* '=ENTE'.
* PERFORM bdc_field USING 'COBL-PRCTR'
* record-prctr_030.
* PERFORM bdc_dynpro USING 'SAPLTAX1' '0300'.
* PERFORM bdc_field USING 'BDC_CURSOR'
* 'BSET-FWSTE(01)'.
* PERFORM bdc_field USING 'BDC_OKCODE'
* '=GOBU'.
* PERFORM bdc_field USING 'BSET-FWSTE(01)'
* record-fwste_01_031.
* PERFORM bdc_transaction USING 'FB01'.
* ENDDO.
PERFORM close_group.
* PERFORM close_dataset USING dataset.
*endif.
*& Form sub_browse_file
* text
* --> p1 text
* <-- p2 text
FORM sub_browse_file .
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
* FIELD_NAME = ' '
IMPORTING
file_name = pfile.
ENDFORM. " sub_browse_file
*& Form sub_data_load
* text
* --> p1 text
* <-- p2 text
FORM sub_data_load .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw
i_filename = pfile
TABLES
i_tab_converted_data = it_excel[]
* EXCEPTIONS
* CONVERSION_FAILED = 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.
ENDFORM. " sub_data_load
**& Form data_selection
** text
** --> p1 text
** <-- p2 text
*FORM data_selection .
* SELECT * FROM bkpf
* INTO CORRESPONDING FIELDS OF TABLE it_bkpf
* WHERE budat = p_budat AND
* bukrs = p_bukrs.
* IF NOT it_bkpf[] IS INITIAL.
* SELECT belnr dmbtr mwsts pswsl
* FROM bseg INTO TABLE it_bseg
* FOR ALL ENTRIES IN it_bkpf
* WHERE belnr = it_bkpf-belnr AND
* kunnr = p_kunnr AND
* hkont = p_hkont AND
* pswsl = p_waers.
* ENDIF.
*ENDFORM. " data_selection
**& Form data_move
** text
** --> p1 text
** <-- p2 text
*FORM data_move.
* SORT : it_bseg BY belnr,
* it_bkpf BY belnr.
* LOOP AT it_bseg.
* it_final-dmbtr = it_bseg-dmbtr.
* it_final-belnr = it_bseg-belnr.
* it_final-mwsts = it_bseg-mwsts.
* it_final-pswsl = it_bseg-pswsl.
* READ TABLE it_bkpf WITH KEY belnr = it_bseg-belnr BINARY SEARCH.
* IF sy-subrc = 0.
* it_final-budat = it_bkpf-budat.
* it_final-bldat = it_bkpf-bldat.
* it_final-xblnr = it_bkpf-xblnr.
* it_final-bktxt = it_bkpf-bktxt.
* ENDIF.
* APPEND it_final.
* CLEAR it_final.
* ENDLOOP.
*ENDFORM. " data_move
*& Form alv_get_data
* text
* --> p1 text
* <-- p2 text
FORM alv_get_data .
CLEAR it_fieldcat.
***************** Document number
* wa_fieldcat-col_pos = '1'. " ALV O/P COL-1
wa_fieldcat-fieldname = 'XBLNR_007'.
wa_fieldcat-seltext_m = 'Document number'.
wa_fieldcat-just = 'L'.
wa_fieldcat-no_zero(1) = 'X'.
wa_fieldcat-outputlen = 15.
wa_fieldcat-tabname = 'IT_EXCEL'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
***************** Posting Date
* wa_fieldcat-col_pos = '2'. " ALV O/P COL-1
wa_fieldcat-fieldname = 'BUDAT_004'.
wa_fieldcat-seltext_m = 'Posting Date'.
wa_fieldcat-just = 'L'.
wa_fieldcat-no_zero(1) = 'X'.
wa_fieldcat-outputlen = 20.
wa_fieldcat-tabname = 'IT_EXCEL'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
******************** Document Date
* wa_fieldcat-col_pos = '3'. " ALV O/P COL-2
wa_fieldcat-fieldname = 'BLDAT_001'.
wa_fieldcat-seltext_m = 'Document Date'.
wa_fieldcat-just = 'L'.
wa_fieldcat-tabname = 'IT_EXCEL'.
wa_fieldcat-outputlen = 15.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
********************* REFERENCE DOCUMENT
** wa_fieldcat-col_pos = '4'. " ALV O/P COL-2
* wa_fieldcat-fieldname = 'XBLNR'.
* wa_fieldcat-seltext_m = 'REFERENCE DOCUMENT'.
* wa_fieldcat-just = 'L'.
* wa_fieldcat-tabname = 'IT_EXCEL'.
** wa_fieldcat-outputlen = 15.
* APPEND wa_fieldcat TO it_fieldcat.
* CLEAR wa_fieldcat.
***************** DOCUMENT HEADER TEXT
* wa_fieldcat-col_pos = '5'. " ALV O/P COL-3
wa_fieldcat-fieldname = 'SGTXT_017'.
wa_fieldcat-seltext_m = 'DOCUMENT HEADER TEXT'.
wa_fieldcat-just = 'L'.
wa_fieldcat-tabname = 'IT_EXCEL'.
* wa_fieldcat-outputlen = 15.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
*******************Invoice Net amount
* wa_fieldcat-col_pos = '6'. " ALV O/P COL-4
wa_fieldcat-fieldname = 'WRBTR_012'.
wa_fieldcat-seltext_m = 'Invoice Net amount'.
wa_fieldcat-just = 'L'.
wa_fieldcat-tabname = 'IT_EXCEL'.
* wa_fieldcat-outputlen = 15.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
*********** Tax Amount
* wa_fieldcat-col_pos = '7'. " ALV O/P COL-5
wa_fieldcat-fieldname = 'WRBTR_025'.
wa_fieldcat-seltext_m = 'Tax Amount'.
wa_fieldcat-just = 'L'.
* wa_fieldcat-no_zero(1) = 'X'.
wa_fieldcat-tabname = 'IT_EXCEL'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
*********** NEt Amount
* wa_fieldcat-col_pos = '7'. " ALV O/P COL-5
wa_fieldcat-fieldname = 'WRBTR_020'.
wa_fieldcat-seltext_m = 'Net Amount'.
wa_fieldcat-just = 'L'.
* wa_fieldcat-no_zero(1) = 'X'.
wa_fieldcat-tabname = 'IT_EXCEL'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
*********** General ledger currency
* wa_fieldcat-col_pos = '7'. " ALV O/P COL-5
wa_fieldcat-fieldname = 'WAERS_006'.
wa_fieldcat-seltext_l = 'General ledger currency'.
wa_fieldcat-just = 'L'.
* wa_fieldcat-no_zero(1) = 'X'.
wa_fieldcat-outputlen = 25.
wa_fieldcat-tabname = 'IT_EXCEL'.
APPEND wa_fieldcat TO it_fieldcat.
CLEAR wa_fieldcat.
ENDFORM. " alv_get_data
*& Form alv_grid
* text
* --> p1 text
* <-- p2 text
FORM alv_grid .
* PERFORM fill_list_header USING it_top_of_page[].
* PERFORM event-build USING gt_events[].
PERFORM fill_layout USING ls_layout.
MESSAGE 'Please press F3 to generate a session or call transaction method after getting report!' TYPE 'I'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = ls_layout
it_fieldcat = it_fieldcat
it_events = gt_events[]
i_save = 'A'
TABLES
t_outtab = it_excel
EXCEPTIONS
program_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.
ENDFORM. " alv_grid
* FORM FILL_LAYOUT *
FORM fill_layout USING p_ls_layout TYPE slis_layout_alv.
p_ls_layout-zebra = 'X'.
p_ls_layout-cell_merge = 'X'.
ENDFORM. "fill_layout
*& Form sub_calc_excel
* text
* --> p1 text
* <-- p2 text
FORM sub_calc_excel .
data: idate TYPE sy-datum,
tdat8 type string.
LOOP AT it_excel.
CONCATENATE it_excel-blart_002 '/' it_excel-monat_005 '/' it_excel-bktxt_008 INTO
it_excel-sgtxt_017.
it_excel-bukrs_003 = p_bukrs.
* it_excel-budat_004 = p_budat.
it_excel-waers_006 = p_waers.
it_excel-newko_011 = p_hkont.
it_excel-kunnr_019 = p_kunnr.
it_excel-mwskz = p_mwskz.
it_excel-prctr = p_prctr.
idate = p_budat.
CALL FUNCTION 'DATUMSAUFBEREITUNG'
EXPORTING
* FLAGM = ' '
* FLAGW = ' '
IDATE = idate
* IMONT = ' '
* IWEEK = ' '
IMPORTING
* MDAT4 =
* MDAT6 =
* TDAT4 =
* TDAT6 =
TDAT8 = tdat8
* WDAT4 =
* WDAT6 =
* EXCEPTIONS
* DATFM_UNGUELTIG = 1
* DATUM_UNGUELTIG = 2
* OTHERS = 3
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
it_excel-budat_004 = tdat8.
* CONCATENATE it_excel-budat_004+4(2) '/' it_excel-budat_004+6(2) '/' it_excel-budat_004+0(4)
* INTO it_excel-budat_004.
* SPLIT it_excel-bldat_001 AT '/' INTO it_excel-month it_excel-date.
* CONCATENATE it_excel-date '.' it_excel-month '.' it_excel-bldat_001+6(4) INTO it_excel-bldat_001.
MODIFY it_excel.
CLEAR it_excel.
ENDLOOP.
ENDFORM. " sub_calc_excel
*& Form write
* text
* --> p1 text
* <-- p2 text
*form write .
*OPEN DATASET dataset FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
*data: wa_excel like line of it_excel.
*loop at it_excel into wa_excel.
*TRANSFER wa_excel to dataset.
*endloop.
*CLOSE DATASETdataset.
*endform. " write -
Hi SDN
i have a small problem where iam unable to add fields in the final internal table
i have to add two fields i.e., COMMITMENT AND ACTVALUE from ESUH TABLE
AND the final internal table is l_i_ekpo.
we have to add only two fields COMMITMENT and a ....variable = COMMITMENT - ACTVALUE. which is already done in the program.
here iam attaching a program.
TABLES: ekpo.
DATA: i_directory_list LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE.
DATA: i_directory_sel LIKE popuptext OCCURS 0 WITH HEADER LINE.
*{ INSERT PS010306UPGR
CLASS cl_abap_char_utilities DEFINITION LOAD.
*} INSERT
DATA: BEGIN OF tab,
*{ REPLACE PS010306UPGR
T(1) TYPE X VALUE '09', "HEX!
t(1) TYPE c VALUE cl_abap_char_utilities=>horizontal_tab, "Unicode
*} REPLACE
END OF tab.
DATA: ekpo_konnr LIKE ekpo-konnr.
DATA: ekpo_ktpnr LIKE ekpo-ktpnr.
DATA: BEGIN OF t_bapiessrc OCCURS 0.
INCLUDE STRUCTURE zbapiessrc_chars.
DATA: END OF t_bapiessrc.
DATA: t_bapiessrc_tab(301) OCCURS 0." with header line.
DATA: wa_bapiessrc_tab(301).
DATA: BEGIN OF t_headertext OCCURS 0,
ext_number LIKE zbapiessrc_chars-ext_number,
linno(4) TYPE n,
tcode(20),
recordname(30),
txpargraph(2),
txline(72),
text_mark,
END OF t_headertext.
DATA: BEGIN OF t_itemtext OCCURS 0,
ext_number LIKE zbapiessrc_chars-ext_number,
ext_line(18),
linno(4) TYPE n,
tcode(20),
recordname(30),
txpargraph(2),
txline(72),
text_mark,
ext_linno(6),
END OF t_itemtext.
DATA: t_headertext_tab(180) OCCURS 0.
DATA: wa_headertext_tab(180).
DATA: t_itemtext_tab(190) OCCURS 0.
DATA: wa_itemtext_tab(190).
DATA: BEGIN OF t_bapiesllc OCCURS 0.
ext_number like bapiessrc-ext_number.
INCLUDE STRUCTURE zbapiesllc_chars.
DATA: END OF t_bapiesllc.
DATA: t_bapiesllc_tab(650) OCCURS 0." with header line.
DATA: wa_bapiesllc_tab(650).
DATA: no_of_files LIKE sy-index.
DATA: perc_uploaded TYPE i.
DATA: text_uploaded(50).
DATA: text_fi_not_upl1(30), text_fi_not_upl2(30).
DATA: continue_yn.
DATA: file TYPE localfile.
FIELD-SYMBOLS .
DATA: BEGIN OF clbp_content OCCURS 0.
INCLUDE STRUCTURE solisti1.
DATA: END OF clbp_content.
DATA w_mode VALUE 'A'.
CONSTANTS: c_update VALUE 'S'.
DATA: BEGIN OF bdcdata OCCURS 0. " BDC Table
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdcdata.
DATA: BEGIN OF bdcmsgcoll OCCURS 0. " BDC Messages
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF bdcmsgcoll.
DATA params LIKE pri_params.
DATA list_text LIKE pri_params-prtxt.
DATA: days(1) TYPE n VALUE 2,
count(3) TYPE n VALUE 1,
valid TYPE c.
DATA t_bapi_essr LIKE bapiessrc OCCURS 0.
DATA t_bapi_essr_log LIKE bapiessrc OCCURS 0 WITH HEADER LINE.
DATA t_bapi_esll LIKE bapiesllc OCCURS 0.
DATA t_bapi_esll_log LIKE bapiesllc OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF output_prot OCCURS 0.
INCLUDE STRUCTURE essr.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF output_prot.
DATA: BEGIN OF i_sgcses_struc OCCURS 0,
po_number LIKE zbapiessrc_chars-po_number,
po_item LIKE zbapiessrc_chars-po_item,
short_text LIKE zbapiessrc_chars-short_text,
xblnr LIKE essr-xblnr,
ref_date LIKE zbapiessrc_chars-ref_date,
service LIKE zbapiesllc_chars-service,
flag,
quantity LIKE zbapiesllc_chars-quantity,
final,
END OF i_sgcses_struc.
start of insert >>>
DATA: l_ses_no LIKE essr-lblni.
TYPES: BEGIN OF t_ekpo,
ebeln LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
werks LIKE ekpo-werks,
packno LIKE ekpo-packno,
END OF t_ekpo.
DATA: i_ekpo TYPE STANDARD TABLE OF t_ekpo.
end of insert <<<
$$----
S E L E C T I O N S C R E E N -
PARAMETERS: p_path TYPE localfile DEFAULT
'C: empBasellInterfacesSesSES-Daten'.
***parameters: p_dismod type ctu_mode default 'A'.
PARAMETERS: p_dismod TYPE ctu_mode DEFAULT 'E'.
PARAMETERS: p_spnam TYPE tsp01-rq2name DEFAULT 'SES_UPL.....'
OBLIGATORY.
PARAMETERS: cb_serv AS CHECKBOX DEFAULT 'X'.
PARAMETERS: cb_text AS CHECKBOX DEFAULT 'X'.
PARAMETERS: cb_chck AS CHECKBOX DEFAULT 'X'.
$$----
A T S E L E C T I O N S C R E E N -
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
DATA: len TYPE i,
testchar(1).
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
mask = 'C:*.txt'
static = 'X'
CHANGING
file_name = p_path.
DESCRIBE FIELD p_path LENGTH len IN CHARACTER MODE.
DO len TIMES.
len = len - 1.
testchar = p_path+len(1).
IF testchar = ''.
len = len + 1.
p_path = p_path(len).
EXIT.
ENDIF.
ENDDO.
$$----
S T A R T O F S E L E C T I O N -
START-OF-SELECTION.
PERFORM select_files.
PERFORM spool_settings.
PERFORM upload_files.
PERFORM select_additional_data.
$$----
E N D O F S E L E C T I O N -
END-OF-SELECTION.
PERFORM spool_settings.
CLEAR: perc_uploaded, no_of_files, text_uploaded.
DESCRIBE TABLE t_bapiessrc LINES no_of_files.
Loop over header-records: for each header-record one call transaction:
LOOP AT t_bapiessrc.
perc_uploaded = ( 100 * sy-tabix ) / no_of_files.
IF cb_serv = 'X'.
PERFORM prepare_clipboard.
Upload Service Entry Sheets:
PERFORM call_transaction_upload.
Italian Version begin
IMPORT output_prot FROM MEMORY ID 'OUT_PROT'.
PERFORM write_prot_to_spool.
FREE MEMORY ID 'OUT_PROT'.
REFRESH: output_prot.
Italian Version end
PERFORM find_ses_number.
PERFORM check_estimated_value.
ENDIF.
IF cb_text = 'X'.
Upload SES Texts:
PERFORM upload_texts.
ENDIF.
start of insert >>>
PERFORM change_account.
IF cb_serv = 'X'.
PERFORM release_ses.
ENDIF.
end of insert <<<
ENDLOOP.
In case only text and no services shall be uploaded:
IF NOT cb_text IS INITIAL.
In case also services are uploaded this loop won't apply cause
t_headertext-entries are deleted after they were processed in the
loop above!
LOOP AT t_headertext.
MOVE t_headertext-ext_number TO t_bapiessrc-ext_number.
*only for test cases since data file is not correct:
move t_headertext-ext_number to t_bapiessrc-ref_doc_no.
*only for test cases since data file is not correct:END
PERFORM upload_texts.
ENDLOOP.
ENDIF.
PERFORM log_upload_success.
NEW-PAGE PRINT OFF.
PERFORM delete_files.
WRITE: / text-001.
write: / 'Check spools for correct processing (Transaction SP01)!'.
$$----
T O P O F P A G E -
TOP-OF-PAGE.
*--at user-command--
AT USER-COMMAND.
*--top of page-during line selection--
TOP-OF-PAGE DURING LINE-SELECTION.
$$----
F O R M - R O U T I N E S -
*& Form SPLIT_BAPIESSRC
FORM split_bapiessrc.
DATA: l_score_time(3),
l_score_qual(3),
l_essr_lblni LIKE essr-lblni.
start of insert >>>
TABLES: esuc.
DATA: l_packno LIKE ekpo-packno.
end of insert <<<
CLEAR: t_bapiessrc, ekpo_konnr, ekpo_ktpnr, ekpo.
TRANSLATE doc_content-line USING '#;'. ZBAPIESSRC_CHARS
SPLIT AT '§' INTO
t_bapiessrc-sheet_no t_bapiessrc-ext_number
t_bapiessrc-person_int t_bapiessrc-person_ext
t_bapiessrc-location t_bapiessrc-ref_date
t_bapiessrc-begdate t_bapiessrc-enddate
t_bapiessrc-pckg_no t_bapiessrc-short_text
Only for testing due to wrong data
t_bapiessrc-po_number t_bapiessrc-po_item
ekpo_konnr ekpo_ktpnr
Only for testing due to wrong data END
t_bapiessrc-block_ind t_bapiessrc-score_time
t_bapiessrc-score_qual t_bapiessrc-doc_date
t_bapiessrc-post_date t_bapiessrc-ref_doc_no
Only for testing due to wrong data
t_bapiessrc-po_number t_bapiessrc-po_item
Only for testing due to wrong data END
t_bapiessrc-accasscat t_bapiessrc-comm_no
t_bapiessrc-user_field t_bapiessrc-acceptance
Only for testing due to wrong data
ekpo_konnr ekpo_ktpnr t_bapiessrc-final.
Only for testing due to wrong data END
MOVE '0000000001' TO t_bapiessrc-pckg_no.
SHIFT t_bapiessrc-po_item RIGHT DELETING TRAILING space.
TRANSLATE t_bapiessrc-po_item USING ' 0'.
start of delete >>>
IF NOT ekpo_konnr IS INITIAL AND NOT ekpo_ktpnr IS INITIAL.
SELECT SINGLE konnr ktpnr FROM ekpo
INTO (ekpo-konnr, ekpo-ktpnr)
WHERE ebeln = t_bapiessrc-po_number
AND ebelp = t_bapiessrc-po_item.
IF NOT sy-subrc IS INITIAL.
WRITE:/ text-101, t_bapiessrc-ext_number,
text-102,
t_bapiessrc-po_number,
text-103,
t_bapiessrc-po_item,
text-104.
WRITE: / text-105.
EXIT.
ELSE.
IF ekpo_konnr NE ekpo-konnr OR ekpo_ktpnr NE ekpo-ktpnr.
WRITE:/ text-101, t_bapiessrc-ext_number,
text-106,
ekpo_konnr, '/',
ekpo_ktpnr,
text-107,
t_bapiessrc-po_number,
text-103, t_bapiessrc-po_item, ')'.
WRITE: / text-105.
EXIT.
ENDIF.
ENDIF.
ENDIF.
end of delete <<<
start of insert >>>
" check contract number
IF NOT ekpo_konnr IS INITIAL AND NOT ekpo_ktpnr IS INITIAL.
SELECT SINGLE konnr ktpnr packno
FROM ekpo
INTO (ekpo-konnr, ekpo-ktpnr, l_packno)
WHERE ebeln = t_bapiessrc-po_number
AND ebelp = t_bapiessrc-po_item.
IF sy-subrc NE 0.
" no corresponding PO, no update will be performed
WRITE:/ text-101, t_bapiessrc-ext_number,
text-102,
t_bapiessrc-po_number,
text-103,
t_bapiessrc-po_item,
text-104.
WRITE: / text-105.
EXIT.
ELSE.
" check contract number against table ESUC first.
SELECT SINGLE *
FROM esuc
WHERE packno EQ l_packno
AND ebeln EQ ekpo_konnr
AND ebelp EQ ekpo_ktpnr.
IF sy-subrc NE 0.
" check against PO line
IF ekpo_konnr NE ekpo-konnr OR ekpo_ktpnr NE ekpo-ktpnr.
WRITE:/ text-101, t_bapiessrc-ext_number,
text-106,
ekpo_konnr, '/',
ekpo_ktpnr,
text-107,
t_bapiessrc-po_number,
text-103, t_bapiessrc-po_item, ')'.
WRITE: / text-105.
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
end of insert <<<
IF cb_chck = 'X'.
SELECT SINGLE lblni FROM essr INTO l_essr_lblni
WHERE loekz = ' '
AND user1 = t_bapiessrc-ext_number.
IF sy-subrc IS INITIAL.
WRITE:/ 'External SES', t_bapiessrc-ext_number,
'is already uploaded. SES-Number: ', l_essr_lblni.
WRITE: / 'No update of this sheet was accomplished!'.
EXIT.
ENDIF.
ENDIF.
APPEND t_bapiessrc.
ENDFORM. " SPLIT_BAPIESSRC
*& Form SPLIT_BAPIESLLC
FORM split_bapiesllc.
DATA: l_outl_level(3), l_ovf_tol(3), l_price_unit(5), l_gr_price(23),
l_target_val(23), l_userf2_num(13), l_quantity(13),
l_form_val1(13), l_form_val2(13), l_form_val3(13),
l_form_val4(13), l_form_val5(13), l_ext_number(16).
CLEAR: t_bapiesllc.
TRANSLATE doc_content-line USING '#;'.
SPLIT AT '§' INTO
t_bapiesllc-ext_number
t_bapiesllc-pckg_no t_bapiesllc-line_no
t_bapiesllc-ext_line t_bapiesllc-outl_level
t_bapiesllc-outl_no t_bapiesllc-outl_ind
t_bapiesllc-subpckg_no t_bapiesllc-service
t_bapiesllc-serv_type t_bapiesllc-edition
t_bapiesllc-ssc_item t_bapiesllc-ext_serv
t_bapiesllc-quantity t_bapiesllc-base_uom
t_bapiesllc-uom_iso t_bapiesllc-ovf_tol
t_bapiesllc-ovf_unlim t_bapiesllc-price_unit
t_bapiesllc-gr_price t_bapiesllc-from_line
t_bapiesllc-to_line t_bapiesllc-short_text
t_bapiesllc-distrib t_bapiesllc-pers_no
t_bapiesllc-wagetype t_bapiesllc-pln_pckg
t_bapiesllc-pln_line t_bapiesllc-con_pckg
t_bapiesllc-con_line t_bapiesllc-tmp_pckg
t_bapiesllc-tmp_line t_bapiesllc-ssc_lim
t_bapiesllc-limit_line t_bapiesllc-target_val
t_bapiesllc-basline_no t_bapiesllc-basic_line
t_bapiesllc-alternat t_bapiesllc-bidder
t_bapiesllc-supp_line t_bapiesllc-open_qty
t_bapiesllc-inform t_bapiesllc-blanket
t_bapiesllc-eventual t_bapiesllc-tax_code
t_bapiesllc-taxjurcode t_bapiesllc-price_chg
t_bapiesllc-matl_group t_bapiesllc-date
t_bapiesllc-begintime t_bapiesllc-endtime
t_bapiesllc-extpers_no t_bapiesllc-formula
t_bapiesllc-form_val1 t_bapiesllc-form_val2
t_bapiesllc-form_val3 t_bapiesllc-form_val4
t_bapiesllc-form_val5 t_bapiesllc-userf1_num
t_bapiesllc-userf2_num t_bapiesllc-userf1_txt
t_bapiesllc-userf2_txt t_bapiesllc-hi_line_no.
start of insert >>> "AP13022007i
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = t_bapiesllc-line_no
IMPORTING
output = t_bapiesllc-line_no.
end of insert <<< "AP13022007i
TRANSLATE t_bapiesllc-quantity USING ',.'.
MOVE '0000000002' TO t_bapiesllc-pckg_no. "TS20082002
APPEND t_bapiesllc.
ENDFORM. " SPLIT_BAPIESLLC
*& Form SELECT_FILES
FORM select_files.
CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'
EXPORTING
i_path = p_path
IMPORTING
E_PURE_PATH =
TABLES
e_directory = i_directory_list
EXCEPTIONS
download = 1
upload = 2
execute = 3
directory_not_exist = 4
directory = 5
OTHERS = 6
IF sy-subrc <> 0.
*{ REPLACE PS010306UPGR
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
MESSAGE w208(00) WITH 'Enter existing directory'(003).
*} REPLACE
EXIT.
ENDIF.
LOOP AT i_directory_list.
CHECK i_directory_list(1) CA 'KPLT'.
check i_directory_list cs '.XLS' or i_directory_list cs '.TXT'.
CHECK i_directory_list CS '.TXT'.
CLEAR i_directory_sel.
MOVE 'X' TO i_directory_sel-text(1).
MOVE i_directory_list(79) TO i_directory_sel-text+1(79).
APPEND i_directory_sel.
ENDLOOP.
CALL FUNCTION 'Z_SL018_POPUP_WITH_TEXT_TO_SEL'
EXPORTING
popup_title = 'Select Files for SES-Upload'
start_column = 10
start_row = 1
end_column = 50
end_row = 16
IMPORTING
sy_ucomm = sy-ucomm
TABLES
x_popuptext = i_directory_sel.
*Check which Files shall be uploaded:
LOOP AT i_directory_sel.
CHECK i_directory_sel-text(1) NE 'Y'.
DELETE i_directory_sel.
ENDLOOP.
SORT i_directory_sel.
DESCRIBE TABLE i_directory_sel LINES no_of_files.
ENDFORM. " SELECT_FILES
*& Form UPLOAD_FILES
FORM upload_files.
*{ INSERT PS010306UPGR
DATA: fname TYPE string.
*} INSERT
LOOP AT i_directory_sel.
CLEAR: file.
UNASSIGN: .
perc_uploaded = ( 100 * sy-tabix ) / no_of_files.
CONCATENATE i_directory_sel-text+1(31) 'uploaded from disk'
INTO text_uploaded
SEPARATED BY space.
CONCATENATE p_path i_directory_sel-text+1(31) INTO file.
Choose the right structure for <doc_content> and <wa_doc_content>
depending on file type K, P, T or L via assignment of field symbols:
CASE i_directory_sel-text+1(1).
WHEN 'K'. "Kopfdaten
ASSIGN t_bapiessrc_tab TO .
ENDCASE.
*{ REPLACE PS010306UPGR
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FILE
TABLES
DATA_TAB = <DOC_CONTENT>
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
CUSTOMER_ERROR = 9
OTHERS = 10.
fname = file.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = fname
CHANGING
data_tab = 0.
CLEAR: text_fi_not_upl1, text_fi_not_upl2, continue_yn.
CONCATENATE 'File' i_directory_sel-text+1(21) ': upload failed!'
INTO text_fi_not_upl1 SEPARATED BY space.
MOVE 'Continue Program?' TO text_fi_not_upl2.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'N'
textline1 = text_fi_not_upl1
textline2 = text_fi_not_upl2
titel = 'Upload Failed'
start_column = 25
start_row = 6
cancel_display = ' '
IMPORTING
answer = continue_yn.
IF continue_yn = 'N'.
EXIT.
ENDIF.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
Move uploaded File records line by line into correct internal table:
t_bapiessrc for K__.txt
t_bapiesllc for P__.txt
t_headertext for T__.txt
t_itemtext for L__.txt
LOOP AT .
IF NOT sy-subrc IS INITIAL. EXIT. ENDIF.
ENDDO.
CASE i_directory_sel-text+1(1).
WHEN 'K'. "Kopfdaten
PERFORM split_bapiessrc.
WHEN 'T'.
PERFORM split_headertext.
WHEN 'P'.
PERFORM split_bapiesllc.
WHEN 'L'.
PERFORM split_itemtext.
ENDCASE.
ENDLOOP.
ENDIF.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = perc_uploaded
text = text_uploaded.
ENDLOOP.
SORT t_bapiessrc BY ext_number.
SORT t_headertext BY ext_number linno.
SORT t_bapiesllc BY ext_number. "
SORT t_bapiesllc BY ext_number pckg_no line_no.
sort t_bapiesllc by ext_number line_no.
SORT t_itemtext BY ext_number ext_linno ext_line linno.
ENDFORM. " UPLOAD_FILES
*& Form PREPARE_CLIPBOARD
FORM prepare_clipboard.
CLEAR: clbp_content.
REFRESH: clbp_content.
DATA: l_line TYPE n.
DATA: l_tabix LIKE sy-tabix.
CLEAR l_tabix.
*Assemble the File-Structure out of the internal tables t_bapiessrc
and t_bapiesllc which is expected by the user exit
exit_saplmlsx_002 and move it to the clipboard:
MOVE 'K' TO clbp_content(1). "Flag for header record
MOVE t_bapiessrc TO clbp_content+1(246).
APPEND clbp_content.
READ TABLE t_bapiesllc WITH KEY ext_number = t_bapiessrc-comm_no
BINARY SEARCH.
CHECK sy-subrc IS INITIAL.
MOVE sy-tabix TO l_tabix.
insert dummy row for connection between pach_no and sub_packno:
CLEAR l_line.
CLEAR: clbp_content, t_bapiesllc.
ADD 1 TO l_line.
MOVE 'P' TO clbp_content(1). "Flag for service-record
MOVE l_line TO clbp_content+1(1).
MOVE '0000000001' TO t_bapiesllc-pckg_no.
MOVE '0000000002' TO t_bapiesllc-subpckg_no.
WRITE t_bapiesllc16(245) TO clbp_content3(245).
APPEND clbp_content.
CLEAR clbp_content.
ADD 1 TO l_line.
MOVE 'P' TO clbp_content(1).
MOVE l_line TO clbp_content+1(1).
WRITE t_bapiesllc261(245) TO clbp_content3(245).
APPEND clbp_content.
APPEND clbp_content.
CLEAR clbp_content.
ADD 1 TO l_line.
MOVE 'P' TO clbp_content(1).
MOVE l_line TO clbp_content+1(1).
MOVE 'E' TO clbp_content+2(1).
WRITE t_bapiesllc506(27) TO clbp_content3(245).
APPEND clbp_content.
CLEAR clbp_content.
end insert
LOOP AT t_bapiesllc FROM l_tabix.
CLEAR l_line.
CLEAR clbp_content.
IF t_bapiesllc-ext_number NE t_bapiessrc-ext_number.
EXIT.
ENDIF.
ADD 1 TO l_line.
MOVE 'P' TO clbp_content(1). "Flag for service-record
'P'-service records are split into three clipbord-lines since
structure t_bapiesllc is too long for one line
MOVE l_line TO clbp_content+1(1).
WRITE t_bapiesllc16(245) TO clbp_content3(245).
APPEND clbp_content.
CLEAR clbp_content.
ADD 1 TO l_line.
MOVE 'P' TO clbp_content(1).
MOVE l_line TO clbp_content+1(1).
WRITE t_bapiesllc261(245) TO clbp_content3(245).
APPEND clbp_content.
CLEAR clbp_content.
ADD 1 TO l_line.
MOVE 'P' TO clbp_content(1).
MOVE l_line TO clbp_content+1(1).
MOVE 'E' TO clbp_content+2(1).
WRITE t_bapiesllc506(27) TO clbp_content3(245).
APPEND clbp_content.
CLEAR clbp_content.
ENDLOOP.
******Italy version of upload
PERFORM include_italy.
export t_bapiessrc to memory id 'GER_ESSRC'.
export t_bapiesllc to memory id 'GER_ESLLC'.
EXPORT t_bapi_essr TO MEMORY ID 'GER_ESSRC'.
EXPORT t_bapi_esll TO MEMORY ID 'GER_ESLLC'.
CHECK 1 = 2.
******Italy version of upload END
CALL FUNCTION 'CLPB_EXPORT'
TABLES
data_tab = clbp_content
EXCEPTIONS
clpb_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.
ENDFORM. " PREPARE_CLIPBOARD
*& Form CALL_TRANSACTION_UPLOAD
FORM call_transaction_upload.
REFRESH bdcdata.
PERFORM bdc_dynpro USING: 'RM11RL00' '1000'.
PERFORM bdc_field USING: 'BDC_OKCODE' '=UPL'.
PERFORM bdc_field USING: 'S_LBLNI-LOW' ' '.
PERFORM bdc_field USING: 'S_LBLNI-HIGH' ' '.
PERFORM bdc_field USING: 'P_BSTNR' ' '.
PERFORM bdc_field USING: 'S_BSTPO-LOW' ' '.
PERFORM bdc_field USING: 'S_BSTPO-HIGH' ' '.
*Italian upload version -> comments set|remove comments for Germ.Version
perform bdc_dynpro using: 'SAPLMLSX' '0480'.
perform bdc_field using: 'BDC_OKCODE' '=EXEC'.
perform bdc_dynpro using: 'SAPLGRAP' '0210'.
perform bdc_field using: 'BDC_OKCODE' '=UPL_FR_CLP'.
PERFORM bdc_dynpro USING: 'SAPMSSY0' '0120'.
perform bdc_field using: 'MARKIERT' 'X'.
*Italian upload version -> comments set; END
CASE p_dismod.
WHEN 'A'.
PERFORM bdc_field USING: 'BDC_OKCODE' '=LITE'.
WHEN 'N'.
PERFORM bdc_field USING: 'BDC_OKCODE' '=HIND'.
WHEN 'E'.
PERFORM bdc_field USING: 'BDC_OKCODE' '=DARK'.
ENDCASE.
Here the call transcation of SAP-standard takes place for creating the
service entry sheet
After SAP-standard call transaction: analyze the popup with the
*Italian upload version -> comments set|remove comments for Germ.Version
PERFORM bdc_dynpro USING: 'SAPMSSY0' '0120'.
perform bdc_field using: 'BDC_OKCODE' '=PRI'.
perform bdc_dynpro using: 'SAPLSPRI' '0100'.
perform bdc_field using: 'BDC_OKCODE' '=PRIN'.
perform bdc_field using: 'PRI_PARAMS-PLIST' p_spnam.
perform bdc_field using: 'PRI_PARAMS-PRIMM' ' '.
perform bdc_field using: 'PRI_PARAMS-PRREL' ' '.
perform bdc_field using: 'PRI_PARAMS-PRNEW' ' '.
perform bdc_dynpro using: 'SAPMSSY0' '0120'.
perform bdc_field using: 'BDC_OKCODE' '=EXEC'.
*Italian upload version -> remove the following line for Germ. version:
PERFORM bdc_field USING: 'BDC_OKCODE' '/00'.
w_mode = p_dismod.
currently w_mode and p_dismod are set to the same value:
foregroud, background or error. But it could also be set to differnt
values: Foreground for upload clipboard,
CALL TRANSACTION 'ML81' USING bdcdata MODE w_mode UPDATE c_update
MESSAGES INTO bdcmsgcoll.
ENDFORM. " CALL_TRANSACTION_UPLOAD
*& Form BDC_DYNPRO
FORM bdc_dynpro
USING program TYPE c
dynpro TYPE c.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. " BDC_DYNPRO
*& Form BDC_FIELD
FORM bdc_field
USING fnam TYPE c
fval TYPE c.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. " BDC_FIELD
*& Form UPLOAD_TEXTS
FORM upload_texts.
DATA l_lblni LIKE essr-lblni.
DATA l_tabix_header_start LIKE sy-tabix.
DATA l_tabix_item_start LIKE sy-tabix.
DATA: p(2) TYPE c.
DATA: w LIKE sy-index.
DATA: w_field(20) TYPE c.
DATA: l_ext_line_save LIKE t_itemtext-ext_line.
DATA: l_ext_linno_save LIKE t_itemtext-ext_linno.
DATA: l_extrow(10)." like ml_esll-extrow.
DATA: l_messg LIKE message.
DATA: l_msgno LIKE sy-msgno.
*only for test cases since data file is not correct:
read table t_headertext with key ext_number = t_bapiessrc-ref_doc_no.
READ TABLE t_headertext WITH KEY ext_number = t_bapiessrc-ext_number
BINARY SEARCH.
*only for test cases since data file is not correct:END
IF NOT sy-subrc IS INITIAL.
MESSAGE ID 'ZV' TYPE 'I' NUMBER '011'
WITH text-202.
WRITE: / text-202.
EXIT.
ENDIF.
l_tabix_header_start = sy-tabix.
SELECT SINGLE MAX( lblni ) FROM essr INTO l_lblni
where xblnr = t_headertext-ext_number.
WHERE user1 = t_headertext-ext_number
AND loekz = ' '.
IF NOT sy-subrc IS INITIAL.
MESSAGE ID 'ZV' TYPE 'I' NUMBER '011'
WITH text-203.
WRITE: / text-203.
EXIT.
ENDIF.
CLEAR: bdcdata, bdcmsgcoll.
REFRESH: bdcdata, bdcmsgcoll.
PERFORM bdc_dynpro USING 'RM11RL00' '1000'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.
PERFORM bdc_field USING 'S_LBLNI-LOW' l_lblni. " '1000001748'.
PERFORM bdc_field USING 'BDC_CURSOR' 'P_LIST'.
PERFORM bdc_field USING 'P_LIST' ' '.
PERFORM bdc_field USING 'P_DIRECT' 'X'.
PERFORM bdc_field USING 'P_LISTU' ' '.
PERFORM bdc_dynpro USING 'SAPLMLSR' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=TXT'.
perform bdc_field using 'ESSR-TXZ01' t_headertext-txline(40).
PERFORM bdc_dynpro USING 'SAPLSTXX' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=TXBA'.
CLEAR w.
ADD 1 TO w.
LOOP AT t_headertext FROM l_tabix_header_start.
Is t_bapiessrc-ext_number really filled?
IF t_headertext-ext_number NE t_bapiessrc-ext_number.
EXIT.
ENDIF.
ADD 1 TO w.
UNPACK w TO p.
CLEAR w_field.
w_field+00(17) = 'RSTXT-TXPARGRAPH('.
w_field+17(02) = p.
w_field+19(01) = ')'.
PERFORM bdc_field USING w_field t_headertext-txpargraph.
CLEAR w_field.
w_field+00(13) = 'RSTXT-TXLINE('.
w_field+13(02) = p.
w_field+15(01) = ')'.
PERFORM bdc_field USING w_field t_headertext-txline .
delete line from internal table so that Upload Texts is not
processed twice when perform_upload_texts is called without up-
loading services:
DELETE t_headertext.
ENDLOOP.
PERFORM bdc_dynpro USING 'SAPLMLSR' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SERV'.
PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.
PERFORM bdc_field USING 'BDC_OKCODE' 'ENTER'.
READ TABLE t_itemtext WITH KEY
ext_number = t_bapiessrc-ext_number.
l_tabix_item_start = sy-tabix.
CLEAR l_ext_line_save.
LOOP AT t_itemtext FROM l_tabix_item_start.
IF t_itemtext-ext_number NE t_bapiessrc-ext_number.
EXIT.
ENDIF.
SHIFT t_itemtext-ext_line RIGHT DELETING TRAILING space.
TRANSLATE t_itemtext-ext_line USING ' 0'.
IF ( t_itemtext-ext_line NE l_ext_line_save )
OR ( t_itemtext-ext_linno NE l_ext_linno_save ).
***find line number:
break michalska.
SELECT SINGLE extrow FROM ml_esll INTO l_extrow
WHERE extrow = t_itemtext-ext_linno
AND srvpos = t_itemtext-ext_line
AND ebeln = l_lblni.
IF NOT sy-subrc IS INITIAL.
CONTINUE.
ENDIF.
PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.
PERFORM bdc_field USING 'BDC_OKCODE' 'ENTER'.
PERFORM bdc_field USING 'RM11P-NEW_ROW' l_extrow.
PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ZLT'.
PERFORM bdc_field USING 'BDC_CURSOR' 'ESLL-EXTROW(01)'.
PERFORM bdc_field USING 'RM11P-SELKZ(01)' 'X'.
PERFORM bdc_dynpro USING 'SAPLSTXX' '1100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=TXBA'.
CLEAR w.
ADD 1 TO w.
ENDIF.
ADD 1 TO w.
UNPACK w TO p.
CLEAR w_field.
w_field+00(17) = 'RSTXT-TXPARGRAPH('.
w_field+17(02) = p.
w_field+19(01) = ')'.
PERFORM bdc_field USING w_field t_itemtext-txpargraph.
CLEAR w_field.
w_field+00(13) = 'RSTXT-TXLINE('.
w_field+13(02) = p.
w_field+15(01) = ')'.
PERFORM bdc_field USING w_field t_itemtext-txline .
l_ext_line_save = t_itemtext-ext_line.
l_ext_linno_save = t_itemtext-ext_linno.
ENDLOOP.
PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SAV'.
CALL TRANSACTION 'ML81' USING bdcdata MODE p_dismod UPDATE c_update
MESSAGES INTO bdcmsgcoll.
LOOP AT bdcmsgcoll.
IF sy-tabix = 1.
WRITE AT: /1 text-002,
write at: /1 'Log for text uploads of entry sheet ',
37 l_lblni, 48 ':'.
ENDIF.
check bdcmsgcoll-msgtyp = 'E' or bdcmsgcoll-msgtyp = 'A'.
CHECK bdcmsgcoll-msgnr CO ' 0123456789'.
MOVE bdcmsgcoll-msgnr TO l_msgno.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = bdcmsgcoll-msgid
msgno = l_msgno
msgty = bdcmsgcoll-msgtyp
msgv1 = bdcmsgcoll-msgv1
msgv2 = bdcmsgcoll-msgv2
msgv3 = bdcmsgcoll-msgv3
msgv4 = bdcmsgcoll-msgv4
IMPORTING
messg = l_messg.
WRITE AT: /3 l_messg-msgtx.
ENDLOOP.
ENDFORM. " UPLOAD_TEXTS
*& Form SPLIT_HEADERTEXT
FORM split_headertext.
DATA: l_essr_lblni LIKE essr-lblni.
CLEAR: t_headertext.
TRANSLATE doc_content-line USING '#;'. ZBAPIESSRC_CHARS
SPLIT AT '§' INTO
t_headertext-ext_number
t_headertext-linno
t_headertext-tcode
t_headertext-recordname
t_headertext-txpargraph
t_headertext-txline
t_headertext-text_mark.
start of insert >>>
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = t_headertext-linno
IMPORTING
output = t_headertext-linno.
end of insert <<<
IF cb_chck = 'X'.
SELECT SINGLE lblni FROM essr INTO l_essr_lblni
WHERE loekz = ' '
AND user1 = t_headertext-ext_number.
IF sy-subrc IS INITIAL.
IF t_headertext-linno = 1.
WRITE:/ 'External SES', t_headertext-ext_number,
'is already uploaded. SES-Number: ', l_essr_lblni.
WRITE: / 'No update of this sheet-texts was accomplished!'.
ENDIF.
EXIT.
ENDIF.
ENDIF.
start of insert >>>
IF NOT cb_serv IS INITIAL.
" check
READ TABLE t_bapiessrc WITH KEY ext_number = t_headertext-ext_number
BINARY SEARCH.
IF sy-subrc NE 0.
EXIT.
ENDIF.
ENDIF.
end of insert <<<
APPEND t_headertext.
ENDFORM. " SPLIT_HEADERTEXT
*& Form SPLIT_ITEMTEXT
FORM split_itemtext.
DATA: l_essr_lblni LIKE essr-lblni.
CLEAR: t_itemtext.
TRANSLATE doc_content-line USING '#;'. ZBAPIESSRC_CHARS
SPLIT AT '§' INTO
t_itemtext-ext_number
t_itemtext-ext_line
t_itemtext-linno
t_itemtext-tcode
t_itemtext-recordname
t_itemtext-txpargraph
t_itemtext-txline
t_itemtext-text_mark
t_itemtext-ext_linno.
start of insert >>>
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = t_itemtext-ext_linno
IMPORTING
output = t_itemtext-ext_linno.
end of insert <<<
IF cb_chck = 'X'.
SELECT SINGLE lblni FROM essr INTO l_essr_lblni
WHERE loekz = ' '
AND user1 = t_itemtext-ext_number.
IF sy-subrc IS INITIAL.
write:/ 'External SES', t_itemtext-ext_number,
'is already uploaded. SES-Number: ', l_essr_lblni.
write: / 'No update of this sheet was accomplished!'.
EXIT.
ENDIF.
ENDIF.
APPEND t_itemtext.
ENDFORM. " SPLIT_ITEMTEXT
start of delete >>>
*& Form SPOOL_SETTINGS
*FORM spool_settings.
MOVE p_spnam TO list_text.
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING " destination = 'dest'
copies = 1
list_name = p_spnam
list_text = list_text
immediately = ' '
release = ' '
new_list_id = ' '
expiration = 9
line_size = 125
line_count = 23
layout = 'X_65_132'
sap_cover_page = ' '
receiver = 'SAP*'
department = 'System'
no_dialog = 'X'
IMPORTING
out_parameters = params
valid = valid.
IF valid <> space.
NEW-PAGE PRINT ON PARAMETERS params NO DIALOG.
ENDIF.
*ENDFORM. " SPOOL_SETTINGS
end of delete <<<
*& Form DELETE_FILES
text
--> p1 text
<-- p2 text
FORM delete_files.
*{ REPLACE PS010306UPGR
DATA: l_return.
DATA: l_return TYPE i.
DATA: fname TYPE string.
*} REPLACE
LOOP AT i_directory_sel.
move space to i_directory_sel-text(1).
MOVE 'X' TO i_directory_sel-text(1).
MODIFY i_directory_sel.
ENDLOOP.
*{ REPLACE
CLEAR i_directory_sel.
MOVE'Xdir_file.bat' TO i_directory_sel-text.
APPEND i_directory_sel.
CLEAR i_directory_sel.
MOVE'Xdir_file.txt' TO i_directory_sel-text.
APPEND i_directory_sel.
DATA: l_directory_list LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'
EXPORTING
i_path = p_path
TABLES
e_directory = l_directory_list
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
LOOP AT l_directory_list.
IF l_directory_list CS 'dir_file.bat'.
CLEAR i_directory_sel.
MOVE'Xdir_file.bat' TO i_directory_sel-text.
APPEND i_directory_sel.
ELSEIF l_directory_list CS 'dir_file.txt'.
CLEAR i_directory_sel.
MOVE'Xdir_file.txt' TO i_directory_sel-text.
APPEND i_directory_sel.
ENDIF.
ENDLOOP.
ENDIF.
CALL FUNCTION 'Z_SL018_POPUP_WITH_TEXT_TO_SEL'
EXPORTING
popup_title = 'Select Files for DELETION'
start_column = 10
start_row = 1
end_column = 50
end_row = 16
IMPORTING
sy_ucomm = sy-ucomm
TABLES
x_popuptext = i_directory_sel.
*Check which Files shall be uploaded:
CHECK sy-ucomm = 'OK'.
LOOP AT i_directory_sel.
CHECK i_directory_sel-text(1) = 'Y'.
CLEAR file.
CONCATENATE p_path i_directory_sel-text+1(31) INTO file.
*{ REPLACE PS010306UPGR
CALL FUNCTION 'WS_FILE_DELETE'
EXPORTING
FILE = FILE
IMPORTING
RETURN = L_RETURN.
fname = file.
CALL METHOD cl_gui_frontend_services=>file_delete
EXPORTING
filename = fname
CHANGING
rcHI
add that fileds in the all locations where you need it like
in internal table declaration , write statement , select statement
these are the main areas where you have to add that 2 fileds -
Hi guys..facing problem in error fixing.in bdc...prgm is in ECC 6.0..
prgm is
*& Report ZCJI_CNV_POSTGOODSRECEIPT_ALT1
REPORT ZCJI_CNV_POSTGOODSRECEIPT_ALT1.
*REPORT ZCJI_CNV_POSTGOODSRECEIPT_ALT NO STANDARD PAGE HEADING
LINE-SIZE 255.
*Program: ZCJI_CNV_POSTGOODSRECEIPT_ALT *
*Function: This program is used to carry out GR transaction MB0A for
CJI import logistics purchase orders. The objective is to
choose only those purchase orders for which billing has been
carried out already. Once GR document is posted, the status
of delivery document items is also updated.
DATE AUTHOR SCR # CHANGE DESCRIPTION
11/04/03 Ohm Reddy BRD # 90 Initial version
DEVK928402
02/25/04 Ohm Reddy In BDC session for posting Goods
DEVK929329 Receipt document, update document
date with system local date
(SYST-DATLO) rather than with
system date(SYST-DATUM)
06/23/04 Ohm Reddy Post GR only when sales order
DEVK931359 item SKU and PO item SKU matches
03/21/05 Alex Mutia 13829/DEVK934135 *
Phase II modifications: *
1. Added criteria in the selection screen; *
2. Modified record selection logic; *
3. Added fields in the Control Report; *
04/08/05 Alex Mutia 13829/DEVK934262 *
Fixed bug in processing MFRGR field; *
04/13/05 Alex Mutia 13829/DEVK934283 *
1.Fixed bug in assigning error record pointers*
to part-success part-error POs; *
2.Added SO and SO line item numbers in report;*
3.Compressed report to fit in 255 columns; *
04/27/05 Alex Mutia 13829/DEVK934384 *
1.Material documents retrieval changed from *
MSEG to EKBE for performance. *
2.Display empty ALV columns when no records *
were selected for processing; *
TYPE-POOLS: SLIS.
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: G_LAYOUT_ALV_SPEC TYPE SLIS_LAYOUT_ALV.
*INCLUDE ZMMCJI_CNV_POSTGR_BDC2.
INCLUDE ZCJI_CNV_PGR_DATA_ALT.
$--"DEVK934135 Begin;-$
INITIALIZATION. "DEVK934135
PERFORM INITIALIZE_VENDOR. "DEVK934135
PERFORM INITIALIZE_PRICE. "DEVK934135
$--"DEVK934135 End;---$
START-OF-SELECTION.
IF P_LIFNR IS INITIAL. "DEVK934135
PERFORM INITIALIZE_VENDOR. "DEVK934135
ENDIF. "DEVK934135
IF P_NETPR IS INITIAL. "DEVK934135
PERFORM INITIALIZE_PRICE. "DEVK934135
ENDIF. "DEVK934135
PERFORM 100_SELECT_DATA.
END-OF-SELECTION.
CHECK: g_return_code IS INITIAL. "DEVK934384
IF NOT itab[] IS INITIAL. "DEVK934384
IF G_RETURN_CODE IS INITIAL AND "DEVK934384
NOT ITAB[] IS INITIAL. "DEVK934384
PERFORM 200_PROCESS_DATA.
PERFORM 300_POST_DOCUMENTS.
PERFORM 399_RETRIEVE_DOCUMENTS.
PERFORM REORG_ITAB.
PERFORM BUILD_HEADER_CATALOG.
PERFORM FIELDCAT_INIT USING GT_FIELDCAT[].
SY_COPY = SYST.
PERFORM SHOW_TRANSACTION_ERRORS.
ELSE. "DEVK934384
PERFORM SHOW_EMPTY_LIST. "DEVK934384
ENDIF.
*& Form SELECT_DATA
FORM 100_SELECT_DATA.
PERFORM 110_SELECT_OPEN_PO_QTY.
CHECK: G_RETURN_CODE IS INITIAL.
PERFORM 120_SELECT_PO_BILLED_QTY.
ENDFORM. " 100_SELECT_DATA
*& Form 110_SELECT_OPEN_PO_QTY
FORM 110_SELECT_OPEN_PO_QTY.
$--"DEVK934135 Begin;-$
SELECT T1~VGBEL
T1~VGPOS
T1~VBELN
T1~POSNR
T1~MATNR
T1~LFIMG
T1~MFRGR
T2~LIFEX
T2~LFDAT
FROM LIPS AS T1
INNER JOIN LIKP AS T2
ON T1MANDT EQ T2MANDT AND
T1VBELN EQ T2VBELN
APPENDING CORRESPONDING FIELDS OF TABLE ITAB_LIPS
WHERE T1~MANDT EQ SY-MANDT "client is system client
AND T1~VBELN IN S_VBELN "billing doc in criteria
AND T1~VGBEL IN S_EBELN "po reference in criteria
AND T1~PSTYV EQ 'ELN' "billing item category
AND T1~WERKS EQ 'JDC1' "plant
AND T1~MFRGR NE 'C' "material freight group
AND T2~LIFNR EQ P_LIFNR. "vendor is param vendor
LOOP AT ITAB_LIPS.
ITAB_LIPS-EBELN = ITAB_LIPS-VGBEL.
ITAB_LIPS-EBELP = ITAB_LIPS-VGPOS.
ITAB_LIPS-CHARG = ITAB_LIPS-LIFEX.
ITAB_LIPS-OLDMFRGR
= ITAB_LIPS-MFRGR.
MODIFY ITAB_LIPS.
ENDLOOP.
IF ITAB_LIPS[] IS INITIAL.
MESSAGE i032(zm) WITH text-m11. "DEVK934384
G_RETURN_CODE = 'X'.
EXIT.
ENDIF.
SELECT T1~EBELN
T1~EBELP
T1~LICHA
T2~MATNR
T2~MENGE
T2~LOEKZ
T2~ELIKZ
T2~NETPR
T3~IHREZ
FROM EKET AS T1
INNER JOIN EKPO AS T2
ON T1MANDT EQ T2MANDT AND
T1EBELN EQ T2EBELN AND
T1EBELP EQ T2EBELP
INNER JOIN EKKO AS T3
ON T1MANDT EQ T3MANDT AND
T1EBELN EQ T3EBELN
APPENDING CORRESPONDING FIELDS OF TABLE ITAB
FOR ALL ENTRIES IN ITAB_LIPS
WHERE T1~MANDT EQ SY-MANDT "client is system client
AND T1~EBELN EQ ITAB_LIPS-EBELN "po# matches w/ billing
AND T3~BSART IN ('YT', 'YN'). "po type
IF ITAB[] IS INITIAL.
MESSAGE i032(zm) WITH text-m11. "DEVK934384
G_RETURN_CODE = 'X'.
EXIT.
ENDIF.
$--"DEVK934135 End;---$
delete any duplicate entries in itab table
SORT ITAB BY EBELN EBELP.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING EBELN EBELP.
LOOP AT ITAB.
ITAB-RECID = SY-TABIX.
IF NOT ITAB-IHREZ IS INITIAL.
WHILE ITAB-IHREZ+0(1) EQ ' '.
SHIFT ITAB-IHREZ.
ENDWHILE.
WHILE ITAB-IHREZ+9(1) EQ ' '.
SHIFT ITAB-IHREZ RIGHT.
ITAB-IHREZ+0(1) = '0'.
ENDWHILE.
ENDIF.
MODIFY ITAB.
ENDLOOP.
delete ITAB_LIPS entries that are not there in ITAB
LOOP AT ITAB_LIPS.
SY_COPY-TABIX = SY-TABIX.
CLEAR ITAB.
READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
SY_COPY-INDEX = SY-TABIX.
IF SY-SUBRC NE 0.
DELETE ITAB_LIPS.
ELSE.
ITAB_LIPS-IHREZ = ITAB-IHREZ.
MODIFY ITAB_LIPS INDEX SY_COPY-TABIX.
ITAB-MFRGR = ITAB_LIPS-MFRGR.
ITAB-LIFEX = ITAB_LIPS-LIFEX.
ITAB-OLDMFRGR
= ITAB_LIPS-OLDMFRGR.
MODIFY ITAB INDEX SY_COPY-INDEX.
ENDIF.
ENDLOOP.
select the goods receipts documents created for the above deliveries
SELECT EBELN EBELP BELNR GJAHR
INTO TABLE ITAB_EKBE FROM EKBE
FOR ALL ENTRIES IN ITAB_LIPS
WHERE EBELN = ITAB_LIPS-EBELN
AND EBELP = ITAB_LIPS-EBELP.
select Goods receipt data from MSEG table for the above deliveries
IF NOT ITAB_EKBE[] IS INITIAL.
SELECT EBELN EBELP CHARG BWART MENGE MBLNR MJAHR ZEILE
INTO TABLE ITAB_MSEG FROM MSEG
FOR ALL ENTRIES IN ITAB_EKBE
WHERE MBLNR = ITAB_EKBE-BELNR
AND MJAHR = ITAB_EKBE-GJAHR.
ENDIF.
SORT ITAB_MSEG BY EBELN EBELP CHARG.
calculate the GR qty eligible to be posted
SORT ITAB_LIPS BY EBELN EBELP.
LOOP AT ITAB_LIPS.
ITAB_LIPS-POSTQTY = ITAB_LIPS-LFIMG.
CLEAR ITAB_MSEG.
LOOP AT ITAB_MSEG WHERE EBELN = ITAB_LIPS-EBELN
AND EBELP = ITAB_LIPS-EBELP
AND CHARG = ITAB_LIPS-CHARG.
IF ITAB_MSEG-BWART = '101'.
ITAB_LIPS-POSTQTY = ITAB_LIPS-POSTQTY - ITAB_MSEG-MENGE.
ELSEIF ITAB_MSEG-BWART = '102'.
ITAB_LIPS-POSTQTY = ITAB_LIPS-POSTQTY + ITAB_MSEG-MENGE.
ENDIF.
ENDLOOP.
MODIFY ITAB_LIPS.
CLEAR ITAB_LIPS.
ENDLOOP.
LOOP AT ITAB.
ITAB-RECID = SY-TABIX.
MODIFY ITAB.
LOOP AT ITAB_LIPS WHERE EBELN EQ ITAB-EBELN
AND EBELP EQ ITAB-EBELP.
ITAB_LIPS-RECID = ITAB-RECID.
MODIFY ITAB_LIPS.
ENDLOOP.
ENDLOOP.
free the memory of unnecessary internal tables
$--"DEVK934135 Begin;-$
CLEAR: ITAB_EKBE.
FREE: ITAB_EKBE.
$--"DEVK934135 End;---$
ENDFORM. " 110_SELECT_OPEN_PO_QTY
*& Form 120_SELECT_PO_BILLED_QTY
FORM 120_SELECT_PO_BILLED_QTY.
$--"DEVK934135 Begin;-$
SELECT T1~VBELN
T1~POSNR
T1~FKIMG
T1~AUBEL
T1~AUPOS
APPENDING CORRESPONDING FIELDS OF TABLE ITAB_VBRP
FROM VBRP AS T1
INNER JOIN VBRK AS T2
ON T1MANDT EQ T2MANDT AND
T1VBELN EQ T2VBELN
FOR ALL ENTRIES IN ITAB
WHERE T1~MANDT EQ SY-MANDT "client is system client
AND T1~VBELN EQ ITAB-IHREZ+0(10) "billing doc = your ref.
AND T2~FKSTO EQ ' '. "status NOT cancelled
Match ITAB-IHREZ <-> ITAB_VBRP-VBELN...
ITAB-LICHA <-> ITAB_VBRP-POSNR...
LOOP AT ITAB.
SY_COPY-TABIX = SY-TABIX.
Check your reference (IHREZ) field;
IF ITAB-IHREZ IS INITIAL. "your-ref blank
ITAB-ERRFA = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-E0A.
APPEND GT_ERROR.
ELSE. "your-ref NOT blank
IF ITAB-IHREZ CO ' 0123456789'. "your-ref numeric
ENDIF. "your-ref numeric
IF SY-FDPOS NE 12. "your-ref NOT numeric
ITAB-ERRFA = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-E0A.
APPEND GT_ERROR.
ELSE. "your-ref NOT numeric
Check PO line item (LICHA) field;
IF ITAB-LICHA IS INITIAL. "line item blank
ITAB-ERRFA = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-E01.
APPEND GT_ERROR.
ELSE. "line item NOT blank
IF ITAB-LICHA CO ' 0123456789'. "line item numeric
ENDIF. "line item numeric
IF SY-FDPOS NE 15. "line item NOT numeric
ITAB-ERRFA = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-E01.
APPEND GT_ERROR.
ELSE. "line item NOT numeric
SY_COPY-SUBRC = 4.
READ TABLE ITAB_VBRP
WITH KEY VBELN = ITAB-IHREZ+0(10)
POSNR = ITAB-LICHA+0(6) BINARY SEARCH.
SY_COPY-SUBRC = SY-SUBRC.
IF SY_COPY-SUBRC NE 0.
ITAB-ERRFA = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-E01.
APPEND GT_ERROR.
ELSE. "DEVK934283
ITAB-AUBEL = ITAB_VBRP-AUBEL. "DEVK934283
ITAB-AUPOS = ITAB_VBRP-AUPOS. "DEVK934283
ENDIF.
ENDIF. "line item NOT numeric
ENDIF. "line item blank
ENDIF. "your-ref NOT numeric
ENDIF. "your-ref blank
Check ID - LIFEX;
IF ITAB-LIFEX EQ ' '. "LIFEX is blank
ITAB-ERRFB = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-ERB.
APPEND GT_ERROR.
ELSE. "LIFEX is NOT blank
Check ID - MFRGR;
IF ITAB-MFRGR NE 'G'. "MFRGR NOT G
ITAB-ERRFC = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-ERC.
APPEND GT_ERROR.
ENDIF. "MFRGR NOT G
ENDIF. "LIFEX is blank
Check PO - Deletion indicator;
IF ITAB-LOEKZ NE ' '. "LOEKZ NOT blank
ITAB-ERRFD = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-ERD.
APPEND GT_ERROR.
ENDIF. "LOEKZ NOT blank
Check PO - Delivery completed flag;
IF ITAB-ELIKZ NE ' '. "ELIKZ NOT blank
ITAB-ERRFE = 'X'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-ERE.
APPEND GT_ERROR.
ENDIF. "ELIKZ NOT blank
Check PO - Net price;
IF ITAB-NETPR LT P_NETPR. "price < parameter
ITAB-ERRFF = 'X'.
GT_ERROR-RECID = ITAB-RECID.
CONCATENATE TEXT-ERF
G_NETPR
TEXT-USD
INTO GT_ERROR-ERRTX SEPARATED BY SPACE.
APPEND GT_ERROR.
ENDIF. "ELIKZ NOT blank
IF ITAB-AUPOS EQ '000000'.
CLEAR: ITAB-AUPOS.
ENDIF.
MODIFY ITAB INDEX SY_COPY-TABIX.
ENDLOOP.
LOOP AT ITAB. "DEVK934283
READ TABLE ITAB_LIPS "DEVK934283
WITH KEY VGBEL = ITAB-EBELN "DEVK934283
VGPOS = ITAB-EBELP "DEVK934283
BINARY SEARCH. "DEVK934283
SY_COPY-TABIX = SY-TABIX. "DEVK934283
IF SY-SUBRC EQ 0. "DEVK934283
ITAB_LIPS-AUBEL = ITAB-AUBEL. "DEVK934283
ITAB_LIPS-AUPOS = ITAB-AUPOS. "DEVK934283
MODIFY ITAB_LIPS INDEX SY_COPY-TABIX. "DEVK934283
ENDIF. "DEVK934283
ENDLOOP. "DEVK934283
Transfer errors from ITAB to ITAB_LIPS;
LOOP AT ITAB WHERE ERRFA EQ 'X'
OR ERRFB EQ 'X'
OR ERRFC EQ 'X'
OR ERRFD EQ 'X'
OR ERRFE EQ 'X'
OR ERRFF EQ 'X'.
READ TABLE ITAB_LIPS
WITH KEY VGBEL = ITAB-EBELN
VGPOS = ITAB-EBELP BINARY SEARCH.
SY_COPY-TABIX = SY-TABIX.
IF SY-SUBRC EQ 0.
ITAB_LIPS-ERRFA = ITAB-ERRFA.
ITAB_LIPS-ERRFB = ITAB-ERRFB.
ITAB_LIPS-ERRFC = ITAB-ERRFC.
ITAB_LIPS-ERRFD = ITAB-ERRFD.
ITAB_LIPS-ERRFE = ITAB-ERRFE.
ITAB_LIPS-ERRFF = ITAB-ERRFF.
ITAB_LIPS-NEWMFRGR = 'E'.
MODIFY ITAB_LIPS INDEX SY_COPY-TABIX.
ENDIF.
ENDLOOP.
$--"DEVK934135 End;---$
ENDFORM. " 120_SELECT_PO_BILLED_QTY
*& Form 200_PROCESS_DATA
FORM 200_PROCESS_DATA.
PERFORM 210_CONSOLIDATE_DATA.
PERFORM 220_PROCESS_DATA.
ENDFORM. " 200_PROCESS_DATA
*& Form 210_consolidate_data
FORM 210_CONSOLIDATE_DATA.
Get the PO item open qty and billed qty into one table
LOOP AT ITAB.
CLEAR ITAB_LIPS.
LOOP AT ITAB_LIPS WHERE EBELN = ITAB-EBELN
AND EBELP = ITAB-EBELP.
ITAB-IDQTY = ITAB-IDQTY + ITAB_LIPS-POSTQTY. "inbound delv qty
ENDLOOP.
CLEAR ITAB_VBRP.
LOOP AT ITAB_VBRP WHERE VBELN = ITAB-IHREZ
AND POSNR = ITAB-LICHA.
ITAB-FKIMG = ITAB-FKIMG + ITAB_VBRP-FKIMG. "PO item billed qty
ENDLOOP.
CLEAR ITAB_MSEG.
LOOP AT ITAB_MSEG WHERE EBELN = ITAB-EBELN
AND EBELP = ITAB-EBELP.
IF ITAB_MSEG-BWART = '101'.
ITAB-GRQTY = ITAB-GRQTY + ITAB_MSEG-MENGE. "PO item GR qty
ELSEIF ITAB_MSEG-BWART = '102'.
ITAB-GRQTY = ITAB-GRQTY - ITAB_MSEG-MENGE. "PO item GR qty
ELSEIF ITAB_MSEG-BWART = '122'. "DEVK934135
ITAB-GRQTY = ITAB-GRQTY - ITAB_MSEG-MENGE. "PO item GR qty
ENDIF.
ENDLOOP.
ITAB-RCVQTY = ITAB-FKIMG - ITAB-GRQTY. "qty billed but not received
calculate the quantity to be processed for which GRs are to be posted
IF ITAB-RCVQTY > 0 AND ITAB-RCVQTY > ITAB-IDQTY.
ITAB-PROCQTY = ITAB-IDQTY.
ELSEIF ITAB-RCVQTY > 0 AND ITAB-RCVQTY < ITAB-IDQTY.
ITAB-PROCQTY = ITAB-RCVQTY.
ELSEIF ITAB-RCVQTY > 0 AND ITAB-RCVQTY = ITAB-IDQTY.
ITAB-PROCQTY = ITAB-IDQTY.
ENDIF.
MODIFY ITAB.
CLEAR ITAB.
ENDLOOP.
free the memory of unnecessary internal tables
$--"DEVK934135 Begin;-$
CLEAR: ITAB_MSEG.
FREE: ITAB_MSEG.
$--"DEVK934135 End;---$
ENDFORM. " 210_consolidate_data
*& Form 220_PROCESS_DATA
FORM 220_PROCESS_DATA.
DATA: L0_FISCAL_PERIOD LIKE BAPI0002_4-FISCAL_PERIOD,
L0_FISCAL_YEAR LIKE BAPI0002_4-FISCAL_YEAR,
L0_RETURN LIKE BAPIRETURN1,
L1_FISCAL_PERIOD LIKE BAPI0002_4-FISCAL_PERIOD,
L1_FISCAL_YEAR LIKE BAPI0002_4-FISCAL_YEAR,
L1_RETURN LIKE BAPIRETURN1.
SORT ITAB_LIPS BY VGBEL VGPOS EBELN EBELP
LFDAT DESCENDING POSNR ASCENDING.
SORT ITAB BY EBELN EBELP.
Calculate the GR quanities to be posted for all inbound deliveries
LOOP AT ITAB_LIPS.
AT NEW EBELP.
CLEAR ITAB.
CLEAR V_RCVQTY.
READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
V_RCVQTY = ITAB-RCVQTY.
ENDAT.
IF ITAB-PROCQTY GT 0.
IF ITAB_LIPS-POSTQTY GT ITAB-PROCQTY.
ITAB_LIPS-PROCQTY = ITAB-PROCQTY.
ITAB_LIPS-NEWMFRGR = 'B'.
ITAB-PROCQTY = 0.
ELSEIF ITAB_LIPS-POSTQTY LT ITAB-PROCQTY.
ITAB_LIPS-PROCQTY = ITAB_LIPS-POSTQTY.
ITAB_LIPS-NEWMFRGR = 'C'.
ITAB-PROCQTY = ITAB-PROCQTY - ITAB_LIPS-POSTQTY.
ELSEIF ITAB_LIPS-POSTQTY EQ ITAB-PROCQTY.
ITAB_LIPS-PROCQTY = ITAB_LIPS-POSTQTY.
ITAB_LIPS-NEWMFRGR = 'C'.
ITAB-PROCQTY = 0.
ENDIF.
Compare the Inbound delivery processing quantity with the pending
billing quantity to write it in the report log
IF ITAB_LIPS-POSTQTY LT V_RCVQTY.
ITAB_LIPS-GRIND = 'D'. "GR will be created for ID qty
V_RCVQTY = V_RCVQTY - ITAB_LIPS-POSTQTY.
ELSEIF ITAB_LIPS-POSTQTY GT V_RCVQTY.
ITAB_LIPS-GRIND = 'B'. "GR will be created for Billied qty
V_RCVQTY = 0.
ELSEIF ITAB_LIPS-POSTQTY EQ V_RCVQTY.
ITAB_LIPS-GRIND = 'S'. "Billed qty is equal to ID qty
V_RCVQTY = 0.
ENDIF.
ELSE.
Decide why this inbound delivery could not have GR quantity -
excess GR quantity or unavailable Billing quantity
IF ITAB-RCVQTY LT ITAB-IDQTY.
ITAB_LIPS-GRIND = 'C'. "GR not created - Lack of Billed qty
ENDIF.
IF ITAB-RCVQTY LT 0.
ITAB_LIPS-GRIND = 'A'. "GR not created - GR qty > Bill qty
ENDIF.
ENDIF.
MODIFY ITAB_LIPS.
CLEAR ITAB_LIPS.
ENDLOOP.
$--"DEVK934135-Begin;-$
LOOP AT ITAB_LIPS.
AT NEW EBELP.
CLEAR ITAB.
CLEAR V_RCVQTY.
READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-EBELN
EBELP = ITAB_LIPS-EBELP BINARY SEARCH.
V_RCVQTY = ITAB-FKIMG - ITAB-GRQTY.
ENDAT.
IF ITAB_LIPS-ERRFA IS INITIAL.
IF V_RCVQTY EQ 0.
ITAB_LIPS-ERRF1 = 'X'.
ITAB_LIPS-NEWMFRGR = 'E'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-R01.
APPEND GT_ERROR.
ELSEIF V_RCVQTY LT 0.
ITAB_LIPS-ERRF2 = 'X'.
ITAB_LIPS-NEWMFRGR = 'E'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-R02.
APPEND GT_ERROR.
ELSEIF V_RCVQTY GT 0.
IF V_RCVQTY EQ ITAB_LIPS-LFIMG.
ITAB_LIPS-ERRF3 = 'X'.
ITAB_LIPS-NEWMFRGR = 'C'.
ELSEIF V_RCVQTY GT ITAB_LIPS-LFIMG.
ITAB_LIPS-ERRF4 = 'X'.
ITAB_LIPS-NEWMFRGR = 'C'.
ITAB_LIPS-PROCQTY = ITAB_LIPS-LFIMG.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-R04.
APPEND GT_ERROR.
ELSEIF V_RCVQTY LT ITAB_LIPS-LFIMG.
ITAB_LIPS-ERRF5 = 'X'.
ITAB_LIPS-NEWMFRGR = 'E'.
GT_ERROR-RECID = ITAB-RECID.
GT_ERROR-ERRTX = TEXT-R05.
APPEND GT_ERROR.
ENDIF.
ENDIF.
ENDIF.
CLEAR: ITAB_LIPS-BLDAT.
READ TABLE ITAB WITH KEY EBELN = ITAB_LIPS-VGBEL
EBELP = ITAB_LIPS-VGPOS BINARY SEARCH.
SELECT SINGLE FKDAT
FROM VBRK
INTO (ITAB_LIPS-BLDAT)
WHERE VBELN EQ ITAB-IHREZ+0(10).
CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
EXPORTING
COMPANYCODEID = 'C800'
POSTING_DATE = ITAB_LIPS-BLDAT
IMPORTING
FISCAL_YEAR = L0_FISCAL_YEAR
FISCAL_PERIOD = L0_FISCAL_PERIOD
RETURN = L0_RETURN.
CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
EXPORTING
COMPANYCODEID = 'C800'
POSTING_DATE = SY-DATLO
IMPORTING
FISCAL_YEAR = L1_FISCAL_YEAR
FISCAL_PERIOD = L1_FISCAL_PERIOD
RETURN = L1_RETURN.
IF L0_FISCAL_YEAR EQ L1_FISCAL_YEAR AND
L0_FISCAL_PERIOD EQ L1_FISCAL_PERIOD.
ITAB_LIPS-BUDAT = ITAB_LIPS-BLDAT.
ELSE.
ITAB_LIPS-BUDAT = SY-DATLO.
ENDIF.
MODIFY ITAB_LIPS.
CLEAR ITAB_LIPS.
ENDLOOP.
$--"DEVK934135-End;---$
collect all the inbound deliveries for which goods receipt are to be
made / material freight status are to be updated
LOOP AT ITAB_LIPS WHERE ERRFA IS INITIAL "DEVK934135
AND ERRFB IS INITIAL "DEVK934135
AND ERRFC IS INITIAL "DEVK934135
AND ERRFD IS INITIAL "DEVK934135
AND ERRFE IS INITIAL "DEVK934135
AND ERRFF IS INITIAL "DEVK934135
AND ERRF1 IS INITIAL "DEVK934135
AND ERRF2 IS INITIAL "DEVK934135
AND ERRF5 IS INITIAL. "DEVK934135
IF ITAB_LIPS-PROCQTY GT 0 AND ITAB_LIPS-LFIMG NE 0.
ITAB_LIPS_G-VBELN = ITAB_LIPS-VBELN.
ITAB_LIPS_G-BLDAT = ITAB_LIPS-BLDAT. "DEVK934135
ITAB_LIPS_G-BUDAT = ITAB_LIPS-BUDAT. "DEVK934135
ITAB_LIPS_G-IHREZ = ITAB_LIPS-IHREZ. "DEVK934135
APPEND ITAB_LIPS_G.
ENDIF.
ENDLOOP.
SORT ITAB_LIPS_G BY VBELN.
DELETE ADJACENT DUPLICATES FROM ITAB_LIPS_G.
LOOP AT ITAB_LIPS WHERE NOT ERRFA IS INITIAL "DEVK934135
OR NOT ERRFB IS INITIAL "DEVK934135
OR NOT ERRFC IS INITIAL "DEVK934135
OR NOT ERRFD IS INITIAL "DEVK934135
OR NOT ERRFE IS INITIAL "DEVK934135
OR NOT ERRFF IS INITIAL "DEVK934135
OR NOT ERRF1 IS INITIAL "DEVK934135
OR NOT ERRF2 IS INITIAL "DEVK934135
OR NOT ERRF3 IS INITIAL "DEVK934135
OR NOT ERRF4 IS INITIAL "DEVK934135
OR NOT ERRF5 IS INITIAL. "DEVK934135
ITAB_LIPS_X-VBELN = ITAB_LIPS-VBELN.
ITAB_LIPS_X-BLDAT = ITAB_LIPS-BLDAT. "DEVK934135
ITAB_LIPS_X-BUDAT = ITAB_LIPS-BUDAT. "DEVK934135
ITAB_LIPS_X-IHREZ = ITAB_LIPS-IHREZ. "DEVK934135
APPEND ITAB_LIPS_X.
ENDLOOP.
SORT ITAB_LIPS_X BY VBELN.
DELETE ADJACENT DUPLICATES FROM ITAB_LIPS_X.
LOOP AT ITAB_LIPS.
READ TABLE ITAB WITH KEY RECID = ITAB_LIPS-RECID.
SY_COPY-INDEX = SY-TABIX.
IF SY-SUBRC EQ 0.
ITAB-ERRFA = ITAB_LIPS-ERRFA.
ITAB-ERRFB = ITAB_LIPS-ERRFB.
ITAB-ERRFC = ITAB_LIPS-ERRFC.
ITAB-ERRFD = ITAB_LIPS-ERRFD.
ITAB-ERRFE = ITAB_LIPS-ERRFE.
ITAB-ERRFF = ITAB_LIPS-ERRFF.
ITAB-ERRF1 = ITAB_LIPS-ERRF1.
ITAB-ERRF2 = ITAB_LIPS-ERRF2.
ITAB-ERRF3 = ITAB_LIPS-ERRF3.
ITAB-ERRF4 = ITAB_LIPS-ERRF4.
ITAB-ERRF5 = ITAB_LIPS-ERRF5.
MODIFY ITAB INDEX SY_COPY-INDEX.
ENDIF.
ENDLOOP.
Decide the goods receipt item number for the delivery items that are
to be processed. Delivery items with zero quantities are not shown up
in MB0A transaction for GR
CLEAR V_DEL_ZERO.
IF NOT ITAB_LIPS_G[] IS INITIAL.
SELECT VBELN POSNR LFIMG
INTO CORRESPONDING FIELDS OF TABLE ITAB_LIPS_Z FROM LIPS
FOR ALL ENTRIES IN ITAB_LIPS_G
WHERE VBELN = ITAB_LIPS_G-VBELN
AND LFIMG EQ 0.
IF SY-SUBRC EQ 0.
V_DEL_ZERO = 'X'.
CLEAR ITAB_LIPS_Z.
FREE ITAB_LIPS_Z.
SELECT VBELN POSNR LFIMG
INTO CORRESPONDING FIELDS OF TABLE ITAB_LIPS_Z FROM LIPS
FOR ALL ENTRIES IN ITAB_LIPS_G
WHERE VBELN = ITAB_LIPS_G-VBELN.
SORT ITAB_LIPS_Z BY VBELN POSNR.
LOOP AT ITAB_LIPS_Z.
AT NEW VBELN.
CLEAR V_ZEILE.
ENDAT.
IF ITAB_LIPS_Z-LFIMG NE 0.
V_ZEILE = V_ZEILE + 1.
ENDIF.
ITAB_LIPS_Z-ZEILE = V_ZEILE.
MODIFY ITAB_LIPS_Z.
ENDLOOP.
ELSE.
V_DEL_ZERO = ' '.
ENDIF.
ENDIF.
SORT ITAB_LIPS_Z BY VBELN POSNR.
LOOP AT ITAB_LIPS.
IF V_DEL_ZERO = ' '.
ITAB_LIPS-ZEILE = ITAB_LIPS-POSNR.
ELSE.
CLEAR ITAB_LIPS_Z.
READ TABLE ITAB_LIPS_Z WITH KEY VBELN = ITAB_LIPS-VBELN
POSNR = ITAB_LIPS-POSNR BINARY SEARCH.
ITAB_LIPS-ZEILE = ITAB_LIPS_Z-ZEILE.
ENDIF.
MODIFY ITAB_LIPS.
ENDLOOP.
SORT ITAB_LIPS BY VBELN DESCENDING POSNR ASCENDING.
ENDFORM. " 220_PROCESS_DATA
*& Form 300_post_documents
FORM 300_POST_DOCUMENTS.
LOOP AT ITAB_LIPS_G.
PERFORM 310_POST_GR_DOC.
MODIFY ITAB_LIPS_G.
CLEAR ITAB_LIPS_G.
ENDLOOP.
CLEAR: BDCDATA, BDCDATA[].
ITAB_LIPS_R[] = ITAB_LIPS_G[].
ITAB_LIPS_G[] = ITAB_LIPS_X[].
LOOP AT ITAB_LIPS_G.
PERFORM 350_UPDATE_DELIVERY_DOC.
MODIFY ITAB_LIPS_G.
CLEAR ITAB_LIPS_G.
ENDLOOP.
PERFORM close_group.
ENDFORM. " 300_post_documents
*& Form 310_POST_GR_DOC
FORM 310_POST_GR_DOC.
PERFORM 320_POST_GR_HEADER.
LOOP AT ITAB_LIPS WHERE VBELN = ITAB_LIPS_G-VBELN
AND LFIMG NE 0
AND PROCQTY NE 0
AND ERRFA IS INITIAL
AND ERRFB IS INITIAL
AND ERRFC IS INITIAL
AND ERRFD IS INITIAL
AND ERRFE IS INITIAL
AND ERRFF IS INITIAL
AND ERRF1 IS INITIAL
AND ERRF2 IS INITIAL
AND ERRF5 IS INITIAL.
IF ITAB_LIPS-ZEILE EQ 1.
PERFORM 335_POST_GR_ITEMS.
ELSE.
PERFORM 330_POST_GR_ITEMS.
ENDIF.
ENDLOOP.
PERFORM 340_SAVE_GR_DOC.
ENDFORM. " 310_POST_GR_DOC
*& Form 320_POST_GR_HEADER
FORM 320_POST_GR_HEADER.
DATA: L_BLDAT TYPE SYDATUM,
L_BUDAT TYPE SYDATUM.
WRITE: ITAB_LIPS_G-BLDAT TO L_BLDAT,
ITAB_LIPS_G-BUDAT TO L_BUDAT.
IF ITAB_LIPS_G-IHREZ+0(10) NE '0000000000' AND
ITAB_LIPS_G-IHREZ+0(10) NE ' '.
WHILE ITAB_LIPS_G-IHREZ+0(1) EQ '0'.
SHIFT ITAB_LIPS_G-IHREZ.
ENDWHILE.
ENDIF.
perform bdc_dynpro using 'SAPMM07M' '0201'.
perform bdc_field using 'BDC_CURSOR'
'RM07M-VLIEF'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'MKPF-BKTXT'
ITAB_LIPS_G-IHREZ.
perform bdc_field using 'MKPF-BLDAT'
L_BLDAT.
perform bdc_field using 'MKPF-BUDAT'
L_BUDAT.
perform bdc_field using 'RM07M-BWARTWE'
'101'.
perform bdc_field using 'RM07M-WERKS'
perform bdc_field using 'RM07M-LGORT'
perform bdc_field using 'RM07M-XNUVO'
'X'.
perform bdc_field using 'XFULL'
perform bdc_field using 'RM07M-VLIEF'
ITAB_LIPS_G-VBELN.
perform bdc_dynpro using 'SAPMM07M' '0221'.
perform bdc_field using 'BDC_OKCODE'
'=SELN'.
perform bdc_dynpro using 'SAPMM07M' '0221'.
perform bdc_field using 'BDC_CURSOR'
'MSEG-ERFMG(01)'.
ENDFORM. " 320_POST_GR_HEADER
*& Form 330_POST_GR_ITEMS
FORM 330_POST_GR_ITEMS.
perform bdc_field using 'BDC_OKCODE'
'=KLA'.
perform bdc_dynpro using 'SAPMM07M' '1501'.
perform bdc_field using 'BDC_OKCODE'
'=OK'.
VV_ZEILE = ITAB_LIPS-ZEILE.
PERFORM BDC_FIELD USING 'RM07M-ZEILE'
VV_ZEILE.
perform bdc_dynpro using 'SAPMM07M' '0221'.
perform bdc_field using 'RM07M-XSELK(01)'
'X'.
VV_PROCQTY = ITAB_LIPS-PROCQTY.
perform bdc_field using 'MSEG-ERFMG(01)'
VV_PROCQTY.
perform bdc_field using 'MSEG-CHARG(01)'
ITAB_LIPS-CHARG.
perform bdc_field using 'MSEG-INSMK(01)'
'S'.
ENDFORM. " 330_POST_GR_ITEMS
*& Form 340_SAVE_GR_DOC
FORM 340_SAVE_GR_DOC.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
CLEAR V_FAIL_IND.
PERFORM BDC_TRANSACTION USING 'MB0A'
CHANGING V_FAIL_IND.
ENDFORM. " 340_SAVE_GR_DOC
*& Form 350_UPDATE_DELIVERY_DOC
FORM 350_UPDATE_DELIVERY_DOC.
PERFORM 360_UPDATE_DELIVERY_HEADER.
LOOP AT ITAB_LIPS WHERE VBELN = ITAB_LIPS_G-VBELN
AND ERRFA IS INITIAL
AND ERRFB IS INITIAL
AND ERRFC IS INITIAL.
AND errfd IS INITIAL
AND errfe IS INITIAL.
PERFORM 370_UPDATE_DELIVERY_ITEMS.
ENDLOOP.
PERFORM 380_SAVE_DELIVERY_DOC.
ENDFORM. " 350_UPDATE_DELIVERY_DOC
*& Form 360_UPDATE_DELIVERY_HEADER
FORM 360_UPDATE_DELIVERY_HEADER.
perform bdc_dynpro using 'SAPMV50A' '0108'.
perform bdc_field using 'BDC_CURSOR'
'LIKP-VBELN'.
perform bdc_field using 'BDC_OKCODE'
'=UELA'.
perform bdc_field using 'LIKP-VBELN'
ITAB_LIPS_G-VBELN.
ENDFORM. " 360_UPDATE_DELIVERY_HEADER
*& Form 370_UPDATE_DELIVERY_ITEMS
FORM 370_UPDATE_DELIVERY_ITEMS.
IF ITAB_LIPS-ERRFD EQ 'X' OR
ITAB_LIPS-ERRFE EQ 'X' OR
ITAB_LIPS-ERRFF EQ 'X'.
ITAB_LIPS-NEWMFRGR = 'E'.
ENDIF.
perform bdc_dynpro using 'SAPMV50A' '0270'.
perform bdc_field using 'BDC_CURSOR'
'RV50A-VERUR_LA'.
perform bdc_field using 'BDC_OKCODE'
'=POPO'.
perform bdc_dynpro using 'SAPMV50A' '0111'.
perform bdc_field using 'BDC_CURSOR'
'RV50A-POSNR'.
perform bdc_field using 'BDC_OKCODE'
'=POPO'.
VV_POSNR = ITAB_LIPS-POSNR.
perform bdc_field using 'RV50A-POSNR'
VV_POSNR.
perform bdc_dynpro using 'SAPMV50A' '0270'.
perform bdc_field using 'BDC_CURSOR'
'LIPS-POSNR(01)'.
perform bdc_field using 'BDC_OKCODE'
'=LAPD'.
perform bdc_field using 'RV50A-LIPS_SELKZ(01)'
'X'.
perform bdc_dynpro using 'SAPMV50A' '0570'.
perform bdc_field using 'BDC_CURSOR'
'LIPS-MFRGR'.
perform bdc_field using 'BDC_OKCODE'
'=BACK'.
perform bdc_field using 'LIPS-MFRGR'
ITAB_LIPS-NEWMFRGR.
ENDFORM. " 370_UPDATE_DELIVERY_ITEMS
*& Form 380_SAVE_DELIVERY_DOC
FORM 380_SAVE_DELIVERY_DOC.
perform bdc_dynpro using 'SAPMV50A' '0270'.
perform bdc_field using 'BDC_CURSOR'
'RV50A-VERUR_LA'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
If GR document is not posted successfully, then do not update the
status of delivery document
CLEAR V_FAIL_IND.
PERFORM BDC_TRANSACTION USING 'VL32'
CHANGING V_FAIL_IND.
IF V_FAIL_IND = 'X'.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'VL32'
TABLES
DYNPROTAB = BDCDATA.
REFRESH BDCDATA.
ENDIF.
ENDFORM. " 380_SAVE_DELIVERY_DOC
Start new transaction according to parameters *
FORM BDC_TRANSACTION USING TCODE
CHANGING V_FAILURE_IND.
DATA: L_MSTRING(480).
DATA: L_SUBRC LIKE SY-SUBRC.
REFRESH MESSTAB.
CALL TRANSACTION TCODE USING BDCDATA
MODE CTUMODE
UPDATE CUPDATE
MESSAGES INTO MESSTAB.
L_SUBRC = SY-SUBRC.
CLEAR V_FAILURE_IND.
IF L_SUBRC NE 0.
V_FAILURE_IND = 'X'.
CLEAR V_IND.
LOOP AT MESSTAB.
SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
AND ARBGB = MESSTAB-MSGID
AND MSGNR = MESSTAB-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
IF MESSTAB-MSGTYP = 'E'.
ERRORTAB-TCODE = TCODE.
ERRORTAB-VBELN = ITAB_LIPS_G-VBELN.
ERRORTAB-ERROR_TEXT = L_MSTRING.
APPEND ERRORTAB.
V_IND = 'X'.
ENDIF.
ELSE.
IF MESSTAB-MSGTYP = 'E'.
ERRORTAB-TCODE = TCODE.
ERRORTAB-VBELN = ITAB_LIPS_G-VBELN.
ERRORTAB-ERROR_TEXT = TEXT-U01.
APPEND ERRORTAB.
V_IND = 'X'.
ENDIF.
ENDIF.
ENDLOOP.
IF V_IND IS INITIAL.
ERRORTAB-TCODE = TCODE.
ERRORTAB-VBELN = ITAB_LIPS_G-VBELN.
ERRORTAB-ERROR_TEXT = TEXT-U01.
APPEND ERRORTAB.
ENDIF.
ELSE.
IF TCODE = 'MB0A'.
LOOP AT MESSTAB WHERE MSGTYP = 'S'
AND MSGID = 'M7'
AND MSGNR = '060'.
IF NOT MESSTAB-MSGV1 IS INITIAL.
ITAB_LIPS_G-MBLNR = MESSTAB-MSGV1.
ENDIF.
ENDLOOP.
ELSEIF TCODE = 'VL32'.
ITAB_LIPS_G-DLVIND = 'X'.
ENDIF.
ENDIF.
IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
IF E_GROUP_OPENED = ' '.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = E_GROUP
USER = E_USER
KEEP = E_KEEP
HOLDDATE = E_HDATE.
E_GROUP_OPENED = 'X'.
ENDIF.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = TCODE
TABLES
DYNPROTAB = BDCDATA.
ENDIF.
REFRESH BDCDATA.
ENDFORM.
*& Form 335_POST_GR_ITEMS
FORM 335_POST_GR_ITEMS.
VV_ZEILE = ITAB_LIPS-ZEILE.
perform bdc_field using 'RM07M-XSELK(01)'
'X'.
VV_PROCQTY = ITAB_LIPS-PROCQTY.
perform bdc_field using 'MSEG-ERFMG(01)'
VV_PROCQTY.
perform bdc_field using 'MSEG-CHARG(01)'
ITAB_LIPS-CHARG.
perform bdc_field using 'MSEG-INSMK(01)'
'S'.
ENDFORM. " 335_POST_GR_ITEMS
*& Form 399_RETRIEVE_DOCUMENTS
&----that is a warning message only ... But if you want to fix it then replace all 000 with 001 in your write statement. The position instead of 000 you have to give 001
write : /000(10)....instead of this
write : /1(10) or write : /(10) or write : /001(10) any thing you can use.
regards
shiba dutta -
Hi
I have to add 'Upload excel file' option in Material consumption program. Current logic is Uploading Unix file. Can any one give me some idea pls.
following is my coding
PROGRAM ZMDM0081 MESSAGE-ID ZM.
TABLES: MARA.
* Resource file record structure
DATA: BEGIN OF RECORD,
MATERIAL_NUMBER(10),
PLANT(5),
CORRECTED_VALUE_19(11),
CORRECTED_VALUE_18(11),
CORRECTED_VALUE_17(11),
CORRECTED_VALUE_16(11),
CORRECTED_VALUE_15(11),
CORRECTED_VALUE_14(11),
CORRECTED_VALUE_13(11),
CORRECTED_VALUE_12(11),
CORRECTED_VALUE_11(11),
CORRECTED_VALUE_10(11),
CORRECTED_VALUE_09(11),
CORRECTED_VALUE_08(11),
CORRECTED_VALUE_07(11),
CORRECTED_VALUE_06(11),
CORRECTED_VALUE_05(11),
CORRECTED_VALUE_04(11),
CORRECTED_VALUE_03(11),
CORRECTED_VALUE_02(11),
CORRECTED_VALUE_01(11),
END OF RECORD.
* Working variables
DATA: RECORD_READ(6) TYPE P,
RECORD_INSERT(6) TYPE P,
RECORD_OMIT(6) TYPE P,
MATERIAL_NUMBER LIKE MARA-MATNR,
G_BRGEW LIKE MARA-BRGEW,
N_NTGEW LIKE MARA-NTGEW,
PLANT LIKE MARC-WERKS,
REMARKS(50),
FLAG(1),
RECORD_FLAG(1),
INTENSIFIED_FLAG(1),
NUMBER(6) TYPE P.
* Constant variables
CONSTANTS: VALID VALUE '1',
INVALID VALUE '0',
ON VALUE '1',
OFF VALUE '0'.
* Reporting groups
FIELD-GROUPS HEADER.
* Insert into groups
INSERT MATERIAL_NUMBER
PLANT
REMARKS
INTO HEADER.
* BDC parameters
SELECTION-SCREEN BEGIN OF BLOCK ONE WITH FRAME TITLE TEXT-010.
PARAMETERS: FILE(30) TYPE C
DEFAULT '/export/remote/data.txt'
LOWER CASE
OBLIGATORY,
SESSION LIKE RL04I-MAPPE
OBLIGATORY
DEFAULT '8301_MM02',
UNAME LIKE SY-UNAME DEFAULT SY-UNAME.
SELECTION-SCREEN END OF BLOCK ONE.
* Data conversion parameters
SELECTION-SCREEN BEGIN OF BLOCK TWO WITH FRAME TITLE TEXT-020.
PARAMETERS MONTH(2) TYPE N DEFAULT 1.
SELECTION-SCREEN END OF BLOCK TWO.
* Notes to user
SELECTION-SCREEN BEGIN OF BLOCK THREE WITH FRAME TITLE TEXT-030.
SELECTION-SCREEN COMMENT /5(70) TEXT-040.
SELECTION-SCREEN COMMENT /5(70) TEXT-050.
SELECTION-SCREEN END OF BLOCK THREE.
MOVE UNAME TO SY-UNAME.
* Including SAP R/3 BDC customized include
INCLUDE ZSIN0001.
* Verifying the path & file name
AT SELECTION-SCREEN ON FILE.
PERFORM RESOURCE_FILE_OPEN.
* Processing BDC
START-OF-SELECTION.
PERFORM SESSION_OPEN.
PERFORM SESSION_GENERATION.
PERFORM SESSION_CLOSE.
CLOSE DATASET FILE.
* Printing execution report
END-OF-SELECTION.
SKIP.
WRITE /15 'BDC & SYSTEM PARAMETERS -' COLOR 3.
SKIP.
WRITE: /15 'Resource path & filename ..........', FILE,
/15 'Session name ......................', SESSION,
/15 'ABAP/4 Program name ...............', SY-REPID,
/15 'Client ............................', SY-MANDT,
/15 'SAP System ID .....................', SY-SYSID,
/15 'SAP Release .......................', SY-SAPRL,
/15 'Host ..............................', SY-HOST,
/15 'Operating system ..................', SY-OPSYS,
/15 'Database system ...................', SY-DBSYS,
/15 'User ID ...........................', SY-UNAME,
/15 'Date ..............................', SY-DATUM,
/15 'Time ..............................', SY-UZEIT.
SKIP 3.
WRITE /15 'DATA CONVERSION DEFAULT PARAMETERS -' COLOR 3.
SKIP.
WRITE: /15 'Start at previous month ............', MONTH.
SKIP 3.
WRITE /15 'EXECUTION REPORT -' COLOR 3.
SKIP.
WRITE: /15 'Total records read form file ......', RECORD_READ,
/15 'Total records insert to BDC .......', RECORD_INSERT,
/15 'Total records omitted .............', RECORD_OMIT.
NEW-PAGE.
SORT.
LOOP.
ADD 1 TO NUMBER.
IF INTENSIFIED_FLAG EQ ON.
FORMAT COLOR 2 INTENSIFIED ON.
MOVE OFF TO INTENSIFIED_FLAG.
ELSE.
FORMAT COLOR 2 INTENSIFIED OFF.
MOVE ON TO INTENSIFIED_FLAG.
ENDIF.
WRITE: /1 NUMBER, MATERIAL_NUMBER, PLANT, REMARKS.
POSITION SY-LINSZ.
WRITE ' '.
ENDLOOP.
* Reading resource file and generating BDC session
FORM SESSION_GENERATION.
DO.
READ DATASET FILE INTO RECORD.
IF SY-SUBRC NE 0 OR RECORD IS INITIAL.
EXIT.
ENDIF.
ADD 1 TO RECORD_READ.
PERFORM RECORD_CONDENSATION.
PERFORM RECORD_VERIFICATION.
CHECK RECORD_FLAG EQ VALID.
REFRESH BDCDATA.
PERFORM SCREEN_SEQUENCE.
PERFORM BDC_TRANSACTION USING 'MM02'.
IF SY-SUBRC EQ 0 .
ADD 1 TO RECORD_INSERT.
ELSE.
ADD 1 TO RECORD_OMIT.
ENDIF.
ENDDO.
ENDFORM. "SESSION_GENERATION
* Condensing the record fields
FORM RECORD_CONDENSATION.
CONDENSE: RECORD-MATERIAL_NUMBER,
RECORD-PLANT,
RECORD-CORRECTED_VALUE_19,
RECORD-CORRECTED_VALUE_18,
RECORD-CORRECTED_VALUE_17,
RECORD-CORRECTED_VALUE_16,
RECORD-CORRECTED_VALUE_15,
RECORD-CORRECTED_VALUE_14,
RECORD-CORRECTED_VALUE_13,
RECORD-CORRECTED_VALUE_12,
RECORD-CORRECTED_VALUE_11,
RECORD-CORRECTED_VALUE_10,
RECORD-CORRECTED_VALUE_09,
RECORD-CORRECTED_VALUE_08,
RECORD-CORRECTED_VALUE_07,
RECORD-CORRECTED_VALUE_06,
RECORD-CORRECTED_VALUE_05,
RECORD-CORRECTED_VALUE_04,
RECORD-CORRECTED_VALUE_03,
RECORD-CORRECTED_VALUE_02,
RECORD-CORRECTED_VALUE_01.
ENDFORM. "RECORD_CONDENSATION
* Verifying record fields
FORM RECORD_VERIFICATION.
MOVE VALID TO RECORD_FLAG.
UNPACK RECORD-MATERIAL_NUMBER TO MATERIAL_NUMBER.
SELECT SINGLE * FROM MARA
WHERE MATNR EQ MATERIAL_NUMBER.
IF SY-SUBRC NE 0.
ADD 1 TO RECORD_OMIT.
MOVE: RECORD-PLANT TO PLANT,
TEXT-060 TO REMARKS,
INVALID TO RECORD_FLAG.
EXTRACT HEADER.
EXIT.
ELSE.
IF MARA-NTGEW > MARA-BRGEW. "add to check for net weight > grow
MOVE '1' TO FLAG.
ELSE.
MOVE ' ' TO FLAG.
ENDIF.
ENDIF.
MOVE RECORD-PLANT TO PLANT.
SELECT SINGLE MATNR WERKS INTO (PLANT, MATERIAL_NUMBER)
FROM ('MARC')
WHERE MATNR EQ MATERIAL_NUMBER
AND WERKS EQ PLANT.
IF SY-SUBRC NE 0.
ADD 1 TO RECORD_OMIT.
MOVE: TEXT-070 TO REMARKS,
INVALID TO RECORD_FLAG.
EXTRACT HEADER.
ENDIF.
ENDFORM. "RECORD_VERIFICATION
* Performing the screen sequence
FORM SCREEN_SEQUENCE.
PERFORM SCREEN_SAPLMGMM_0060.
PERFORM SCREEN_SAPLMGMM_0070.
PERFORM SCREEN_SAPLMGMM_3005.
PERFORM SCREEN_SAPLMGMM_0081.
PERFORM SCREEN_SAPLMGMM_3006.
PERFORM SCREEN_SAPLMGMM_3110.
ENDFORM. "SCREEN_SEQUENCE
* Change Material: Initial Screen
FORM SCREEN_SAPLMGMM_0060.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0060'.
PERFORM BDC_FIELD USING 'RMMG1-MATNR' RECORD-MATERIAL_NUMBER.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/5'. " Select view(s)
ENDFORM. "SCREEN_SAPLMGMM_0060
* Select view(s)
FORM SCREEN_SAPLMGMM_0070.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0070'.
PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(01)' 'X'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/0'. " Enter
ENDFORM. "SCREEN_SAPLMGMM_0070
* Change Material: Basic data
FORM SCREEN_SAPLMGMM_3005.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '3005'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' 'SP08'. " MRP 1
IF FLAG EQ '1'.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '3005'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/0'.
ENDIF.
ENDFORM. "SCREEN_SAPLMGMM_3005
* Organizational levels
FORM SCREEN_SAPLMGMM_0081.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0081'.
PERFORM BDC_FIELD USING 'RMMG1-WERKS' RECORD-PLANT.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=ENTR'. "Continue
ENDFORM. "SCREEN_SAPLMGMM_0081
* Change Material: MRP 1
FORM SCREEN_SAPLMGMM_3006.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '3006'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' 'ZU11'. " Consumption
ENDFORM. "SCREEN_SAPLMGMM_3006
* Change Material: Consumption
FORM SCREEN_SAPLMGMM_3110.
CONSTANTS: PREVIOUS_MONTH VALUE 'X',
THIS_MONTH VALUE ' '.
DATA: ROW_POSITION(2) TYPE N VALUE 0,
WS_POSITION(2) TYPE C,
FIELDNAME LIKE BDCDATA-FNAM,
CONSUMPTION_QUANTITY LIKE RECORD-CORRECTED_VALUE_01.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '3110'.
* if month eq previous_month.
* move 1 to row_position.
* elseif month eq this_month.
* move 0 to row_position.
* endif.
MOVE MONTH TO ROW_POSITION.
DO 19 TIMES VARYING CONSUMPTION_QUANTITY
FROM RECORD-CORRECTED_VALUE_01
NEXT RECORD-CORRECTED_VALUE_02.
IF ROW_POSITION GT 11.
MOVE 1 TO ROW_POSITION.
PERFORM BDC_FIELD USING 'BDC_OKCODE' 'VWNP'. " Page down
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '3110'.
ENDIF.
UNPACK ROW_POSITION TO WS_POSITION.
CONCATENATE 'RM03M-VBWRT(' WS_POSITION ')' INTO FIELDNAME.
IF CONSUMPTION_QUANTITY+0(1) EQ '-'.
SHIFT CONSUMPTION_QUANTITY LEFT BY 1 PLACES.
CONCATENATE CONSUMPTION_QUANTITY '-' INTO CONSUMPTION_QUANTITY.
ENDIF.
PERFORM BDC_FIELD USING FIELDNAME CONSUMPTION_QUANTITY.
ADD 1 TO ROW_POSITION.
ENDDO.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '3110'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '/11'. " Save
ENDFORM. "SCREEN_SAPLMGMM_3110
Include Program
* BDC data table and record structure defination
DATA BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
* Opening a resource file
FORM RESOURCE_FILE_OPEN.
DATA ERROR_MESSAGE(40).
*Begin of changes Mod01
* OPEN DATASET FILE FOR INPUT IN TEXT MODE MESSAGE ERROR_MESSAGE.
OPEN DATASET FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT MESSAGE
ERROR_MESSAGE.
*End of changes Mod01
IF SY-SUBRC NE 0.
MESSAGE E000 WITH FILE ERROR_MESSAGE.
ENDIF.
ENDFORM.
* Opening of BDC session
FORM SESSION_OPEN.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING CLIENT = SY-MANDT
DEST = SY-HOST
GROUP = SESSION
USER = SY-UNAME
KEEP = 'X'
EXCEPTIONS CLIENT_INVALID = 01
DESTINATION_INVALID = 02
GROUP_INVALID = 03
HOLDDATE_INVALID = 04
INTERNAL_ERROR = 05
QUEUE_ERROR = 06
RUNNING = 07
USER_INVALID = 08.
CASE SY-SUBRC.
WHEN 01. MESSAGE E001 WITH SY-MANDT.
WHEN 02. MESSAGE E002.
WHEN 03. MESSAGE E003.
WHEN 04. MESSAGE E004.
WHEN 05. MESSAGE E005.
WHEN 06. MESSAGE E006.
WHEN 07. MESSAGE E007.
WHEN 08. MESSAGE E007.
ENDCASE.
ENDFORM.
* Closing BDC session
FORM SESSION_CLOSE.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS NOT_OPEN = 01
QUEUE_ERROR = 02.
CASE SY-SUBRC.
WHEN 01. MESSAGE E009.
WHEN 02. MESSAGE E010.
ENDCASE.
ENDFORM.
* Inserting data into BDC
FORM BDC_TRANSACTION USING TRANSACTION_CODE.
CALL FUNCTION 'BDC_INSERT'
EXPORTING TCODE = TRANSACTION_CODE
TABLES DYNPROTAB = BDCDATA
EXCEPTIONS INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
OTHERS = 5.
ENDFORM.
* Insert program name & screen number
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
MOVE: PROGRAM TO BDCDATA-PROGRAM,
DYNPRO TO BDCDATA-DYNPRO,
'X' TO BDCDATA-DYNBEGIN.
APPEND BDCDATA.
ENDFORM.
* Inserting field name/BDC_OKCODE/BDC_CUESOR and value
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
MOVE: FNAM TO BDCDATA-FNAM,
FVAL TO BDCDATA-FVAL.
APPEND BDCDATA.
ENDFORM.i have changed the selection screen as follows
SELECTION-SCREEN BEGIN OF BLOCK one WITH FRAME TITLE text-010.
* "1)
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_unix RADIOBUTTON GROUP rad1 . "
SELECTION-SCREEN COMMENT 5(26) text-008.
SELECTION-SCREEN POSITION 33. "
PARAMETERS: file(128) TYPE c
DEFAULT '/export/remote/data.txt' LOWER CASE.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_xls RADIOBUTTON GROUP rad1 . "excel file
SELECTION-SCREEN COMMENT 5(26) text-009.
SELECTION-SCREEN POSITION 33. "
PARAMETERS: filf(128).
SELECTION-SCREEN END OF LINE.
*>>
*PARAMETERS: file(128) TYPE c
* DEFAULT '/export/remote/data.txt' LOWER CASE OBLIGATORY,
PARAMETERS: session LIKE rl04i-mappe OBLIGATORY
DEFAULT '8301_MM02',
uname LIKE sy-uname DEFAULT sy-uname.
SELECTION-SCREEN END OF BLOCK one.
* Data conversion parameters
SELECTION-SCREEN BEGIN OF BLOCK two WITH FRAME TITLE text-020.
PARAMETERS month(2) TYPE n DEFAULT 1.
SELECTION-SCREEN END OF BLOCK two.
* Notes to user
SELECTION-SCREEN BEGIN OF BLOCK three WITH FRAME TITLE text-030.
SELECTION-SCREEN COMMENT /5(70) text-040.
SELECTION-SCREEN COMMENT /5(70) text-050.
SELECTION-SCREEN END OF BLOCK three. -
Add Multiple records to G/L account group.
Dear ABAP Experts,
i have requirement that is using BDC recording file the Functional People wants to add records to the G/L Account group. The FI consultant gave the recording file, based on the recording file i developed a BDC program. This BDC program will work for single record. After creating single record system will ask for transport request .
REPORT ZDP_ACC_GRP.
TYPES: BEGIN OF TY_TAB,
KTOPL TYPE KTOPL,
KTOKS TYPE KTOKS,
TXT30 TYPE TXT30,
VONNR TYPE VONNR,
BISNR TYPE BISNR,
TRKORR TYPE TRKORR,
END OF TY_TAB.
data: lt_tab type table of ty_tab,
wa_tab type ty_tab.
data: begin of record,
* data element: KTOPL
KTOPL_01_001(004),
* data element: KTOKS
KTOKS_01_002(004),
* data element: TXT30_077T
TXT30_01_003(030),
* data element: VONNR_077S
VONNR_01_004(010),
* data element: BISNR_077S
BISNR_01_005(010),
* data element: TRKORR
TRKORR_006(020),
end of record.
* Batchinputdata of single transaction
DATA: BDCDATA type table of BDCDATA WITH HEADER LINE.
* messages of call transaction
DATA: MESSTAB type table of BDCMSGCOLL WITH HEADER LINE.
* error session opened (' ' or 'X')
DATA: E_GROUP_OPENED.
* message texts
TABLES: T100.
data:lv_file type string.
parameters: p_fname type IBIPPARMS-PATH.
at selection-screen on value-request for p_fname.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = 'P_FNAME'
IMPORTING
FILE_NAME = p_fname .
start-of-selection.
lv_file = p_fname.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = LV_FILE
* FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = LT_TAB
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 .
LOop at lt_tab into wa_tab.
perform bdc_dynpro using 'SAPL0F09' '0020'.
perform bdc_field using 'BDC_CURSOR'
'V_T077S-TXT30(01)'.
perform bdc_field using 'BDC_OKCODE'
'=NEWL'.
perform bdc_dynpro using 'SAPL0F09' '0020'.
perform bdc_field using 'BDC_CURSOR'
'V_T077S-BISNR(01)'.
perform bdc_field using 'BDC_OKCODE'
'=SAVE'.
perform bdc_field using 'V_T077S-KTOPL(01)'
WA_TAB-KTOPL."record-KTOPL_01_001.
perform bdc_field using 'V_T077S-KTOKS(01)'
WA_TAB-KTOKS."record-KTOKS_01_002.
perform bdc_field using 'V_T077S-TXT30(01)'
WA_TAB-TXT30."record-TXT30_01_003.
perform bdc_field using 'V_T077S-VONNR(01)'
WA_TAB-VONNR."record-VONNR_01_004.
perform bdc_field using 'V_T077S-BISNR(01)'
WA_TAB-BISNR."record-BISNR_01_005.
perform bdc_dynpro using 'SAPLSTRD' '0300'.
perform bdc_field using 'BDC_CURSOR'
'KO008-TRKORR'.
perform bdc_field using 'BDC_OKCODE'
'=LOCK'.
perform bdc_field using 'KO008-TRKORR'
WA_TAB-TRKORR."record-TRKORR_006.
perform bdc_dynpro using 'SAPL0F09' '0020'.
perform bdc_field using 'BDC_CURSOR'
'V_T077S-KTOPL(02)'.
perform bdc_field using 'BDC_OKCODE'
'=BACK'.
perform bdc_dynpro using 'SAPL0F09' '0020'.
perform bdc_field using 'BDC_CURSOR'
'V_T077S-KTOPL(02)'.
perform bdc_field using 'BDC_OKCODE'
'=BACK'.
perform bdc_transaction using 'OBD4'.
ENDLOOP.
FORM BDC_TRANSACTION USING TCODE.
DATA: L_MSTRING(480).
DATA: L_SUBRC LIKE SY-SUBRC.
* batch input session
* call transaction using
REFRESH MESSTAB.
CALL TRANSACTION 'OBD4' USING BDCDATA
MODE 'A'" CTUMODE
UPDATE 'S'"CUPDATE
MESSAGES INTO MESSTAB.
L_SUBRC = SY-SUBRC.
LOOP AT MESSTAB.
SELECT SINGLE * FROM T100 WHERE SPRSL = MESSTAB-MSGSPRA
AND ARBGB = MESSTAB-MSGID
AND MSGNR = MESSTAB-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH MESSTAB-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH MESSTAB-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
WRITE: / MESSTAB-MSGTYP, L_MSTRING(250).
ELSE.
WRITE: / MESSTAB.
ENDIF.
ENDLOOP.
REFRESH BDCDATA.
ENDFORM.
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM.
But the FI consultant wants to add multiple records to 'G/L account group'.After adding records before saving the system need to ask transport request at the last.
How can I write code ...??
Please help me.Hi Srikanth,
Thanks for reply,
You are right we need to load hierarchy for G/L then we can see all the G/L's for all G/L groups.
I have one more question when I check in RSA3 for the G/L account numbers, I could not find them.
I am using the datasource fi_gl_4 and in rsa3 I can see 1000 records data and when I put filter on G/L account and search for the G/L number I needed I cant see it, but it is there in the functional transaction(f.01)?
How to check for the required G/L's in rsa3 ?
Thx -
Get and Set Parameter ID in BDC Call transaction
Hi all
I have written this BDC program to run a transaction eg33 to install meter. After meter get installled System generates Device location number. I need to use this device location number in calling another transaction il03. but my data fetching using get and set parameter id is not giving accurate result. Kindly check my code and suggest where should I improve. Or whatelse can I do to fullfill this type of requirement other than GET and SET PARAMETER ID.
REPORT ZAC_EG33 NO STANDARD PAGE HEADING
LINE-SIZE 100.
TABLES: EABL,
BUT000,
ZISUH0003.
DATA :
XYZ LIKE IFLO-TPLNR.
DATA: IT_STATUS TYPE ZISUH0003.
DATA: G_INDEX TYPE I,
G_START_COL TYPE I VALUE '1', "start column
G_START_ROW TYPE I VALUE '14', "start row
G_END_COL TYPE I VALUE '18', "maximum column
G_END_ROW TYPE I VALUE '75', "maximum row
G_TEXT(20), "stores error messages
G_PAGES TYPE I,
G_CURRENT_PAGE TYPE I,
G_COUNT LIKE SY-DBCNT.
data: l_file type file_table,
file1 type string,
l_title type string,
LENGTH TYPE I,
FILES type filetable,
SUBRC type i,
STR_FILE type STRING,
D_FILE type RLGRAP-FILENAME,
filename TYPE String,
L_itab_date(10).
FIELD-SYMBOLS : <FS>.
DATA: IT_EXCEL LIKE STANDARD TABLE OF ALSMEX_TABLINE WITH HEADER LINE,
IT_MESS TYPE STANDARD TABLE OF BDCMSGCOLL WITH HEADER LINE.
TYPES: BEGIN OF TY_OPEN,
HAUS LIKE REG30-HAUS,
EADAT(10),
GERAETNEU LIKE REG30-GERAETNEU,
MESSDRCK LIKE REG30-MESSDRCK,
ZWSTANDCE LIKE REG30-ZWSTANDCE,
END OF TY_OPEN.
DATA : T_ANLAGE LIKE EANLD-ANLAGE,
VSTELLE LIKE EVBS-VSTELLE,
S_ANLAGE LIKE EANLD-ANLAGE,
temp_c(7).
DATA: IT_OPEN TYPE STANDARD TABLE OF TY_OPEN WITH HEADER LINE.
DATA: BDCDATA TYPE STANDARD TABLE OF BDCDATA WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP 2.
PARAMETERS: P_FILE like RLGRAP-FILENAME OBLIGATORY.
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN END OF BLOCK 1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE .
PERFORM GET_FILE_NAME.
MOVE FILENAME TO P_FILE.
START-OF-SELECTION.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = p_file
I_BEGIN_COL = 1 "VF_START_COL
I_BEGIN_ROW = 2 "VF_START_ROW
I_END_COL = 5 "VF_END_COL
I_END_ROW = 10000 "VF_END_ROW
TABLES
INTERN = IT_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF IT_EXCEL[] IS INITIAL.
G_TEXT = 'No Data Uploaded'.
ELSE.
SORT IT_EXCEL BY ROW COL.
LOOP AT IT_EXCEL.
MOVE : IT_EXCEL-COL TO G_INDEX.
ASSIGN COMPONENT G_INDEX OF STRUCTURE IT_OPEN TO <FS>.
MOVE IT_EXCEL-VALUE TO <FS>.
AT END OF ROW.
IF NOT IT_OPEN IS INITIAL.
APPEND IT_OPEN." TO IT_LINE.
CLEAR IT_OPEN.
CLEAR IT_EXCEL.
ENDIF.
ENDAT.
ENDLOOP.
ENDIF.
REFRESH IT_EXCEL.
ULINE.
FORMAT COLOR 3 ON.
WRITE: /1 sy-vline ,
2 'Material No.' ,
25 sy-vline,
2 'Logs' ,
100 sy-vline.
uline.
FORMAT COLOR OFF.
PERFORM BDC_OPEN_READING.
MESSAGE S013(ZPS).
*& Form GET_FILE_NAME
text
--> p1 text
<-- p2 text
FORM GET_FILE_NAME .
REFRESH FILES.
call method cl_gui_frontend_services=>file_open_dialog
exporting
window_title = l_title
changing
file_table = files
rc = subrc
exceptions
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
others = 4.
check sy-subrc = 0.
loop at files into l_file.
str_file = l_file.
move str_file to filename.
exit.
endloop.
ENDFORM. " GET_FILE_NAME
*& Form BDC_OPEN_READING
text
--> p1 text
<-- p2 text
FORM BDC_OPEN_READING .
LOOP AT IT_OPEN.
REFRESH BDCDATA.
clear : temp_c.
move it_open-MESSDRCK to temp_c.
condense : temp_c.
PERFORM MAP1.
CALL TRANSACTION 'EG33' USING BDCDATA MODE 'A' MESSAGES INTO IT_MESS.
+***changes by added on 28/02/08 +
get parameter id 'IFL' FIELD XYZ.
PERFORM MAP2.
set parameter id 'IFL' FIELD XYZ.
++*
CALL TRANSACTION 'IL03' USING BDCDATA MODE 'A' MESSAGES INTO IT_MESS.
+****end change added on 28.02.08+DATA: G_INSNO LIKE IT_OPEN-HAUS.
IF NOT IT_MESS[] IS INITIAL.
G_INSNO = IT_OPEN-HAUS.
PERFORM GET_MESSAGES TABLES IT_MESS USING G_INSNO." IT_LINE.
ENDIF.
READ TABLE IT_MESS WITH KEY MSGTYP = 'E'.
IF SY-SUBRC NE 0.
READ TABLE IT_MESS WITH KEY MSGTYP = 'S' MSGNR = '622'.
IF SY-SUBRC EQ 0.
SELECT SINGLE VSTELLE FROM EVBS INTO VSTELLE WHERE HAUS = IT_OPEN-HAUS.
SELECT SINGLE ANLAGE FROM EANL INTO T_ANLAGE WHERE VSTELLE = VSTELLE.
MOVE T_ANLAGE TO IT_STATUS-ANLAGE.
MOVE 'X' TO IT_STATUS-RFC.
*perform get_date_format using IT_OPEN-EADAT.
MOVE IT_OPEN-EADAT TO IT_STATUS-ADATE.
SELECT SINGLE ANLAGE FROM ZISUH0003 INTO S_ANLAGE WHERE ANLAGE =
T_ANLAGE.
IF SY-SUBRC EQ 4.
INSERT ZISUH0003 FROM IT_STATUS.
ELSE.
UPDATE ZISUH0003 FROM IT_STATUS.
ENDIF.
ENDIF.
ENDIF.
REFRESH IT_MESS.
CLEAR IT_MESS.
ENDLOOP.
ENDFORM. " BDC_OPEN_READING
Start new screen *
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
Insert field *
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> SPACE.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM.
*& Form MAP1
text
--> p1 text
<-- p2 text
FORM MAP1 .
perform bdc_dynpro using 'SAPLE30D' '0100'.
perform bdc_field using 'BDC_CURSOR'
'REG30-GERAETNEU'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'REG30-HAUS'
IT_OPEN-HAUS. "'100000000033'.
perform bdc_field using 'REG30-EADAT'
IT_OPEN-EADAT. "'18.02.2006'.
perform bdc_field using 'REG30-GERAETNEU'
IT_OPEN-GERAETNEU. "'66a'.
perform bdc_dynpro using 'SAPLE30D' '0220'.
perform bdc_field using 'BDC_CURSOR'
'REG30-TEMP_AREA(02)'.
perform bdc_field using 'BDC_OKCODE'
'=SAVE'.
perform bdc_field using 'REG30-MESSDRCK'
temp_c. "IT_OPEN-MESSDRCK'0.0125'.
perform bdc_field using 'REG30-GERWECHS'
'05'.
perform bdc_field using 'REG30-ANZDAYSOFPERIOD(01)'
'30'.
perform bdc_field using 'REG30-ZWSTANDCE(01)'
IT_OPEN-ZWSTANDCE. "'10'.
perform bdc_field using 'REG30-ZWSTANDCE(02)'
'0'.
perform bdc_field using 'REG30-PERVERBR(01)'
'0'.
perform bdc_field using 'REG30-PERVERBR(02)'
'0'.
perform bdc_field using 'REG30-TEMP_AREA(01)'
'0001'.
perform bdc_field using 'REG30-TEMP_AREA(02)'
'0001'.
perform bdc_field using 'REG30-PR_AREA_AI(01)'
'0001'.
perform bdc_field using 'REG30-PR_AREA_AI(02)'
'0001'.
ENDFORM. " MAP1
****CHANGEs added BY ALKA 28.02.08
*& Form MAP2
text
--> p1 text
<-- p2 text
FORM MAP2 .
perform bdc_dynpro using 'SAPMILO0' '1110'.
perform bdc_field using 'BDC_CURSOR'
'IFLO-TPLNR'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'IFLO-TPLNR'
XYZ..
perform bdc_field using 'RILO0-TPLKZ'
'AO_GP'.
perform bdc_dynpro using 'SAPMILO0' '2100'.
perform bdc_field using 'BDC_CURSOR'
'IFLO-PLTXT'.
perform bdc_field using 'BDC_OKCODE'
'=T\04'.
perform bdc_field using 'IFLO-PLTXT'
'DEVICE LOCATION'.
perform bdc_dynpro using 'SAPMILO0' '2100'.
perform bdc_field using 'BDC_OKCODE'
'=BU'.
perform bdc_field using 'IFLO-PLTXT'
'DEVICE LOCATION'.
perform bdc_field using 'BDC_CURSOR'
'ITOBATTR-EINZL'.
perform bdc_field using 'ITOBATTR-IEQUI'
'X'.
perform bdc_field using 'ITOBATTR-EINZL'
'X'.
ENDFORM. " MAP2
*****END CHANGE added on 28.02.08
*& Form get_date_format
text
-->P_IT_ORDER_TABLE_C_DATE text
FORM get_date_format USING L_ITAB_DATE." LIKE SY-DATUM.
data: d_temp(4),
m_temp(2),
y_temp(4).
*move L_ITAB_DATE to L_ITAB_DATE.
y_temp = L_ITAB_DATE(4).
m_temp = L_ITAB_DATE+4(2).
d_temp = L_ITAB_DATE+6(2).
CONCATENATE d_temp '.' m_temp '.' y_temp into L_ITAB_DATE.
ENDFORM. " get_date_format
*& Form GET_MESSAGES
text
-->P_IT_MESS text
-->P_G_INSNO text
FORM GET_MESSAGES TABLES IT_MESS STRUCTURE BDCMSGCOLL USING G_INSNO .TABLES T100.
DATA: L_MSTRING(255).
LOOP AT IT_MESS WHERE MSGTYP = 'E' OR MSGTYP = 'S'.
SELECT SINGLE * FROM T100 WHERE SPRSL = IT_MESS-MSGSPRA
AND ARBGB = IT_MESS-MSGID
AND MSGNR = IT_MESS-MSGNR.
IF SY-SUBRC = 0.
L_MSTRING = T100-TEXT.
IF L_MSTRING CS '&1'.
REPLACE '&1' WITH IT_MESS-MSGV1 INTO L_MSTRING.
REPLACE '&2' WITH IT_MESS-MSGV2 INTO L_MSTRING.
REPLACE '&3' WITH IT_MESS-MSGV3 INTO L_MSTRING.
REPLACE '&4' WITH IT_MESS-MSGV4 INTO L_MSTRING.
ELSE.
REPLACE '&' WITH IT_MESS-MSGV1 INTO L_MSTRING.
REPLACE '&' WITH IT_MESS-MSGV2 INTO L_MSTRING.
REPLACE '&' WITH IT_MESS-MSGV3 INTO L_MSTRING.
REPLACE '&' WITH IT_MESS-MSGV4 INTO L_MSTRING.
ENDIF.
CONDENSE L_MSTRING.
ENDIF.
CONDENSE G_INSNO.
CONCATENATE 'For' ' ' G_INSNO ',' L_MSTRING INTO L_MSTRING SEPARATED BY SPACE.
FORMAT COLOR 2 ON.
*IF IT_MESS-MSGTYP = 'S' AND IT_MESS-MSGNR = '622'.
*WRITE: 1 sy-vline,
L_MSTRING under 'Error Messages',
100 sy-vline.
*ULINE.
*ELSEIF IT_MESS-MSGTYP = 'E'.
WRITE: 1 sy-vline,
L_MSTRING under 'Logs',
100 sy-vline.
ULINE.
*ENDIF.
ENDLOOP.
ENDFORM. " GET_MESSAGESi think there might be some time gap between CALL TRANSACTION and GET PARAMETER ID.....,that is to say,the new No. has not been generated and what you fetch is an old No..
i think you should use the "CALL TRANSACTION" like the following one:
CALL TRANSACTION 'EG33' USING BDCDATA MODE 'A' UPDATE 'L' MESSAGES INTO IT_MESS .
then i think you can get the right value.
P.S: the different update model(from SAP document)
upd Effect
"A" Asynchronous update. Updates of called programs are executed in the same way as if in the COMMIT WORK statement the AND WAIT addition was not specified.
"S" Synchronous processing. Updates of the called programs are executed in the same way as if in the COMMIT WORK statement the AND WAIT addition had been specified.
"L" Local update. Updates of the called program are executed in such a way as if the SET UPDATE TASK LOCAL statement had been executed in it.
Other As for "A". -
Data is not uploding for the following code in bdc
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
* messages of call transaction
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
* error session opened (' ' or 'X')
DATA: e_group_opened.
* message texts
TABLES: t100,
cosp.
*** Generated data section with specific formatting - DO NOT CHANGE ***
DATA: BEGIN OF record OCCURS 0,
* data element: KPP_VALUE
bdc00(032), "Cost Center
* data element:
bdc01(032), "Cost Element
* data element:
bdc02(032), "January
* data element:
bdc03(032), "february
* data element:
bdc04(032), "March
* data element:
bdc05(032), "April
* data element:
bdc06(032), "may
* data element:
bdc07(032), "june
* data element:
bdc08(032), "july
* data element:
bdc09(032), "august
* data element:
bdc10(032), "september
* data element:
bdc11(032), "october
* data element:
bdc12(032), "november
* data element:
bdc13(032), "december
END OF record.
*** End generated data section ***
DATA: g_file TYPE string, "Input file var for FM
g_count(4) TYPE n VALUE 0000, "Counter
g_flag(1), "Flag
g_bdc01(11),
g_bdc02(11),
g_bdc03(11),
g_bdc04(11),
g_bdc05(11),
g_bdc06(11),
g_bdc07(11),
g_bdc08(11),
g_bdc09(11),
g_bdc10(11),
g_bdc11(11),
g_bdc12(11),
g_bdc13(11).
DATA: g_objnr LIKE cosp-objnr. "Object Number
DATA: g_record TYPE string, "work area to read from app server
g_tab TYPE string. "tab variable to separate the columns
* Selection Screen Variables
PARAMETERS ctumode LIKE ctu_params-dismode DEFAULT 'A' OBLIGATORY.
PARAMETERS: user(12) DEFAULT sy-uname OBLIGATORY. "user for session in batch
PARAMETERS cupdate LIKE ctu_params-updmode DEFAULT 'L' OBLIGATORY.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
PARAMETERS: p_file(256) LOWER CASE OBLIGATORY, "Input file
p_ver(3) OBLIGATORY, "version
p_gjahr(4) OBLIGATORY, "Fiscal Year
p_prof(8) OBLIGATORY, "Planner Profile
p_lines(4) OBLIGATORY, "No. of Lines
p_kokrs(4) OBLIGATORY. "Controlling area
SELECTION-SCREEN END OF BLOCK b1.
* Initialization
INITIALIZATION.
*Shiva-Change -01/03/2007 Costom Authorization check.
INITIALIZATION.
INCLUDE zauthocheck.
*End.
CLASS cl_abap_char_utilities DEFINITION LOAD.
g_tab = cl_abap_char_utilities=>horizontal_tab.
* Start of Selection
START-OF-SELECTION.
*Set the Controlling area
PERFORM bdc_dynpro USING 'SAPLSPO4' '0300'.
PERFORM bdc_field USING 'SVALD-VALUE(001)' p_kokrs. "Contr.area
PERFORM bdc_transaction USING 'OKKS'.
*Set the planner profile
PERFORM bdc_dynpro USING 'SAPLKPP6' '1007'.
PERFORM bdc_field USING 'RKPP6-PLPROF' p_prof. "Planner profile
PERFORM bdc_transaction USING 'KP04'.
*Number of lines
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = p_lines
IMPORTING
output = p_lines.
*For use in FM g_file should be of type string
g_file = p_file.
*Open the app server file
PERFORM sub_get_data.
*read all data one by one
* DO.
* READ DATASET p_file INTO g_record.
* IF sy-subrc <> 0.
* EXIT.
* ENDIF.
**Split the record at tab
* SPLIT g_record AT g_tab INTO
* record-bdc00 record-bdc01 record-bdc02
* record-bdc03 record-bdc04 record-bdc05
* record-bdc06 record-bdc07 record-bdc08
* record-bdc09 record-bdc10 record-bdc11
* record-bdc12 record-bdc13.
* IF sy-subrc = 0.
* APPEND record.
* CLEAR record.
* ENDIF.
* ENDDO.
*For every new cost center, check whether there is already some plan data
*that is existing. If yes, delete them and replace with new plan data. Else,
*upload the new data.
LOOP AT record.
*Start of every new transaction
AT NEW bdc00.
READ TABLE record INDEX sy-tabix.
CLEAR cosp.
CONCATENATE 'KS' p_kokrs record-bdc00 INTO g_objnr.
SELECT SINGLE * FROM cosp WHERE objnr = g_objnr AND
gjahr = p_gjahr AND
wrttp = '01' AND
vrgng = 'RKP1'.
IF sy-subrc = 0.
PERFORM bdc_dynpro USING 'SAPLKPP0' '1000'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KPP0B-VALUE(03)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=CSUB'.
PERFORM bdc_field USING 'KPP0B-VALUE(01)'
p_ver.
PERFORM bdc_field USING 'KPP0B-VALUE(02)'
p_gjahr.
PERFORM bdc_field USING 'KPP0B-VALUE(03)'
record-bdc00.
PERFORM bdc_dynpro USING 'SAPLKPP2' '0106'.
PERFORM bdc_field USING 'BDC_CURSOR'
'Z-BDC02(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=CMAL'.
PERFORM bdc_dynpro USING 'SAPLKPP2' '0106'.
PERFORM bdc_field USING 'BDC_CURSOR'
'Z-BDC02(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=CDEL'.
PERFORM bdc_dynpro USING 'SAPLSPO1' '0200'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=YES'.
PERFORM bdc_dynpro USING 'SAPLKPP2' '0106'.
PERFORM bdc_field USING 'BDC_CURSOR'
'Z-BDC02(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=CBUC'.
PERFORM bdc_transaction USING 'KP06'.
ENDIF.
*The line count should be set to 0001 first
g_count = 0001.
PERFORM bdc_dynpro USING 'SAPLKPP0' '1000'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KPP0B-VALUE(03)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=CSUB'.
PERFORM bdc_field USING 'KPP1B-ONLY'
'X'.
PERFORM bdc_field USING 'KPP0B-VALUE(01)'
p_ver.
PERFORM bdc_field USING 'KPP0B-VALUE(02)'
p_gjahr.
PERFORM bdc_field USING 'KPP0B-VALUE(03)'
record-bdc00.
ENDAT.
*End of every new transaction
*If the line count increases what was specified in sel screen, reset it to 1
IF g_count > p_lines.
g_count = 0001.
g_flag = 'X'.
ENDIF.
CONCATENATE 'Z-BDC01(' g_count+2(2) ')' INTO g_bdc01.
CONCATENATE 'Z-BDC02(' g_count+2(2) ')' INTO g_bdc02.
CONCATENATE 'Z-BDC03(' g_count+2(2) ')' INTO g_bdc03.
CONCATENATE 'Z-BDC04(' g_count+2(2) ')' INTO g_bdc04.
CONCATENATE 'Z-BDC05(' g_count+2(2) ')' INTO g_bdc05.
CONCATENATE 'Z-BDC06(' g_count+2(2) ')' INTO g_bdc06.
CONCATENATE 'Z-BDC07(' g_count+2(2) ')' INTO g_bdc07.
CONCATENATE 'Z-BDC08(' g_count+2(2) ')' INTO g_bdc08.
CONCATENATE 'Z-BDC09(' g_count+2(2) ')' INTO g_bdc09.
CONCATENATE 'Z-BDC10(' g_count+2(2) ')' INTO g_bdc10.
CONCATENATE 'Z-BDC11(' g_count+2(2) ')' INTO g_bdc11.
CONCATENATE 'Z-BDC12(' g_count+2(2) ')' INTO g_bdc12.
CONCATENATE 'Z-BDC13(' g_count+2(2) ')' INTO g_bdc13.
*Trigger a new page when the limit reaches.
IF g_flag = 'X'.
PERFORM bdc_dynpro USING 'SAPLKPP2' '0106'.
PERFORM bdc_field USING 'BDC_CURSOR'
g_bdc01.
PERFORM bdc_field USING 'BDC_OKCODE'
'=CP+'.
g_flag = space.
ENDIF.
PERFORM bdc_dynpro USING 'SAPLKPP2' '0106'.
PERFORM bdc_field USING 'BDC_CURSOR'
g_bdc01.
PERFORM bdc_field USING g_bdc01
record-bdc01.
PERFORM bdc_field USING g_bdc02
record-bdc02.
PERFORM bdc_field USING g_bdc03
record-bdc03.
PERFORM bdc_field USING g_bdc04
record-bdc04.
PERFORM bdc_field USING g_bdc05
record-bdc05.
PERFORM bdc_field USING g_bdc06
record-bdc06.
PERFORM bdc_field USING g_bdc07
record-bdc07.
PERFORM bdc_field USING g_bdc08
record-bdc08.
PERFORM bdc_field USING g_bdc09
record-bdc09.
PERFORM bdc_field USING g_bdc10
record-bdc10.
PERFORM bdc_field USING g_bdc11
record-bdc11.
PERFORM bdc_field USING g_bdc12
record-bdc12.
PERFORM bdc_field USING g_bdc13
record-bdc13.
g_count = g_count + 1.
*at end of all records of a transaction
AT END OF bdc00.
PERFORM bdc_dynpro USING 'SAPLKPP2' '0106'.
PERFORM bdc_field USING 'BDC_CURSOR'
g_bdc13.
PERFORM bdc_field USING 'BDC_OKCODE'
'=CBUC'.
SKIP.
WRITE:/ 'Cost Center:', 15 record-bdc00.
PERFORM bdc_transaction USING 'KP06'.
ENDAT.
ENDLOOP.
*& Form sub_get_data
* text
* --> p1 text
* <-- p2 text
FORM sub_get_data .
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = g_file
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = record
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.
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. " sub_get_data
* open dataset *
*FORM open_dataset USING p_dataset.
* OPEN DATASET p_dataset
* FOR INPUT IN TEXT MODE
* ENCODING DEFAULT.
* IF sy-subrc <> 0.
* WRITE: / text-e00, sy-subrc.
* STOP.
* ENDIF.
*ENDFORM. "OPEN_DATASET
** close dataset *
*FORM close_dataset USING p_dataset.
* CLOSE DATASET p_dataset.
*ENDFORM. "CLOSE_DATASET
* Start new transaction according to parameters *
FORM bdc_transaction USING tcode.
DATA: l_mstring(480).
DATA: l_subrc LIKE sy-subrc.
* batch input session
* call transaction using
REFRESH messtab.
CALL TRANSACTION tcode USING bdcdata
MODE ctumode
UPDATE cupdate
MESSAGES INTO messtab.
l_subrc = sy-subrc.
WRITE: / 'CALL_TRANSACTION',
tcode,
'returncode:'(i05),
l_subrc,
'RECORD:',
sy-index.
LOOP AT messtab.
SELECT SINGLE * FROM t100 WHERE sprsl = messtab-msgspra
AND arbgb = messtab-msgid
AND msgnr = messtab-msgnr.
IF sy-subrc = 0.
l_mstring = t100-text.
IF l_mstring CS '&1'.
REPLACE '&1' WITH messtab-msgv1 INTO l_mstring.
REPLACE '&2' WITH messtab-msgv2 INTO l_mstring.
REPLACE '&3' WITH messtab-msgv3 INTO l_mstring.
REPLACE '&4' WITH messtab-msgv4 INTO l_mstring.
ELSE.
REPLACE '&' WITH messtab-msgv1 INTO l_mstring.
REPLACE '&' WITH messtab-msgv2 INTO l_mstring.
REPLACE '&' WITH messtab-msgv3 INTO l_mstring.
REPLACE '&' WITH messtab-msgv4 INTO l_mstring.
ENDIF.
CONDENSE l_mstring.
WRITE: / messtab-msgtyp, l_mstring(250).
ELSE.
WRITE: / messtab.
ENDIF.
ENDLOOP.
SKIP.
REFRESH bdcdata.
ENDFORM. "BDC_TRANSACTION
* Start new screen *
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
* Insert field *
FORM bdc_field USING fnam fval.
* IF fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
* ENDIF.
from the flat file its reading first record in to the tab strip but not the second record for the same costcenterSo your sparse upper level members are dynamically calculated?
I wonder if that is interacting with the calc order of the attribute dimension and not valuing the way you want.
The DBAG has lots of good stuff on attributes: http://download.oracle.com/docs/cd/E10530_01/doc/epm.931/html_esb_dbag/dattrib.htm
You might want to think about making the upper level members in Function stored/never share and see if you get the result you're looking for. If Function is sparse, I would think long and hard about whether I really want those members to be dynamically calculated because of retrieval performance impact.
Regards,
Cameron Lackpour -
I want in LSMW SAME CODING. THIS IS USING BDC CALL TRANSACTION
REPORT ZXX_BDC_PRA NO STANDARD PAGE HEADING LINE-COUNT 20
LINE-SIZE 150 .
Program Name :ZXX_BDC_PRA *
Object Id : *
Develper Name : praveen *
Start Date : 25.06.07 *
Description : uploading flat file to sap system *
*--structure for Data Uploading.
DATA: BEGIN OF IT_STR ,
VKORG LIKE RF02D-VKORG,
VTWEG LIKE RF02D-VTWEG,
SPART LIKE RF02D-SPART,
KTOKD LIKE RF02D-KTOKD,
NAME1 LIKE KNA1-NAME1,
SORTL LIKE KNA1-SORTL,
ORT01 LIKE KNA1-ORT01,
PSTLZ LIKE KNA1-PSTLZ,
LAND1 LIKE KNA1-LAND1,
SPRAS LIKE KNA1-SPRAS,
END OF IT_STR.
*--Internal Table for Data Uploading.
DATA: ITAB LIKE IT_STR OCCURS 0.
*--Internal Table to sucessfull Records.
DATA: ITAB1 LIKE IT_STR OCCURS 0.
*--Internal Table to Store Error Records.
DATA: ITAB2 LIKE STANDARD TABLE OF IT_STR WITH HEADER LINE.
*--Internal Table for Storing the BDC data.
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
*--Internal Table for storing the messages.
DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: COUNT TYPE I VALUE 1,
S VALUE 0, E VALUE 0.
Selection screen *
SELECTION-SCREEN BEGIN OF BLOCK b1
WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE TYPE IBIPPARMS-PATH.
SELECTION-SCREEN END OF BLOCK B1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
*functionality to use drill down list
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
IMPORTING
FILE_NAME = P_FILE.
Start-of-selection *
START-OF-SELECTION.
DATA FILENAME TYPE STRING.
FILENAME = P_FILE.
*-- Form to upload flatfile data into the internal table.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = FILENAME
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = ITAB
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.
*--Generating the BDC table for the fields of the internal table.
LOOP AT ITAB INTO IT_STR.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0107'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RF02D-KTOKD'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'RF02D-VKORG'
IT_STR-VKORG.
PERFORM BDC_FIELD USING 'RF02D-VTWEG'
IT_STR-VTWEG.
PERFORM BDC_FIELD USING 'RF02D-SPART'
IT_STR-SPART.
PERFORM BDC_FIELD USING 'RF02D-KTOKD'
IT_STR-KTOKD.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0110'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNA1-SPRAS'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'KNA1-NAME1'
IT_STR-NAME1.
PERFORM BDC_FIELD USING 'KNA1-SORTL'
IT_STR-SORTL.
PERFORM BDC_FIELD USING 'KNA1-ORT01'
IT_STR-ORT01.
PERFORM BDC_FIELD USING 'KNA1-PSTLZ'
IT_STR-PSTLZ.
PERFORM BDC_FIELD USING 'KNA1-LAND1'
IT_STR-LAND1.
PERFORM BDC_FIELD USING 'KNA1-SPRAS'
IT_STR-SPRAS.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0120'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNA1-TXJCD'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0125'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNA1-NIELS'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0360'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNVK-NAMEV(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0310'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNVV-BEGRU'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_DYNPRO USING 'SAPMF02D' '0324'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'KNVP-PARVW(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
*--Calling the transaction 'Vd01'.
CALL TRANSACTION 'VD01' USING BDCDATA MODE 'N' UPDATE 'S'
MESSAGES INTO MESSTAB.
PERFORM MESSAGES.
REFRESH : BDCDATA, MESSTAB.
ENDLOOP.
END-OF-SELECTION.
*--Populating the Success records internal table.
IF ITAB1[] IS NOT INITIAL.
format color 5.
WRITE: /'SUCCESSFUL RECORDS'.
format color off.
LOOP AT ITAB1 INTO IT_STR.
WRITE:/ IT_STR-VKORG,IT_STR-VTWEG,
IT_STR-SPART,IT_STR-KTOKD,
IT_STR-NAME1,IT_STR-SORTL,
IT_STR-ORT01,
IT_STR-PSTLZ,
IT_STR-LAND1,
IT_STR-SPRAS.
S = S + 1.
ENDLOOP.
REFRESH : ITAB1.
WRITE:/ 'TOTAL RECORDS',S.
ENDIF.
*--Populating the error records internal table.
IF ITAB2[] IS NOT INITIAL.
FORMAT COLOR 3.
WRITE :/ 'ERRORS RECORDS ARE'.
FORMAT COLOR OFF.
LOOP AT ITAB2.
WRITE:/ ITAB2-VKORG,
ITAB2-VTWEG,
ITAB2-SPART,ITAB2-KTOKD,
ITAB2-NAME1,ITAB2-SORTL,
ITAB2-ORT01,
ITAB2-PSTLZ,
ITAB2-LAND1,
ITAB2-SPRAS.
E = E + 1.
ENDLOOP.
REFRESH : ITAB2.
WRITE: / 'TOTAL RECORDS',E.
REFRESH : ITAB2.
ENDIF.
End of Selection *
END-OF-SELECTION.
TOP-OF-PAGE *
TOP-OF-PAGE.
WRITE:/ SY-ULINE.
WRITE:/10 'REPORT ID',21 SY-REPID,35 'USERNAME',46 SY-UNAME,
60 'SYSTEM DATE',70 SY-DATUM,80 'SYSTEM TIME',90 SY-UZEIT,
100 'PAGE NO',108 SY-PAGNO.
WRITE:/ SY-ULINE.
FOrm to Populate the BDC table.
Start new screen *
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
Insert field *
FORM BDC_FIELD USING FNAM FVAL.
IF FVAL <> SPACE.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDIF.
ENDFORM. "BDC_FIELD
*& Form messages
FORM MESSAGES .
LOOP AT MESSTAB.
IF MESSTAB-MSGTYP = 'I'.
WRITE : / MESSTAB-MSGV1.
ELSEIF
MESSTAB-MSGTYP = 'S'.
INSERT LINES OF ITAB FROM COUNT TO COUNT INTO TABLE ITAB1 .
COUNT = COUNT + 1.
WRITE : / MESSTAB-MSGV1.
ELSEIF
MESSTAB-MSGTYP = 'E'.
INSERT LINES OF ITAB FROM COUNT TO COUNT INTO TABLE ITAB2.
COUNT = COUNT + 1.
WRITE : / MESSTAB-MSGV1.
ENDIF.
ENDLOOP.
ENDFORM. " messagesHi
Go through the doc and do the same using LSMW
BDC is the way to transfer data by writing a batch input program which can use either session or call transaction method.
LSMW used to transfer data without/less code.
What type of data we transfer using LSMW?
LSMW is best suited for transferring master data.
Actually BDC and LSMW are not comparable at all.
for example LSMW itself can use BDC as a way of mass data transfer.
BDC is a mass data transfer technique via screen logic of existing SAP Data entry transactions. It behaves as if you are manually making thousand of entires into sap system as a background job. And that is probably the reason why BAPI's are preffered over BDC's.
On the other hand LSMW is a tool to facilitate DATA migration from other legacy systems ... It contains step by step procedure for data migration.
Like Managing Data Migration Projects , Creating Source Structures , Mapping Source structures wid Target structures , etc etc
LSMW internally might well be using the following techniqes for data transfer..
1. IDOX
2. Direct Input / BDC
4. BAPI's
LSMW is an encapsulated data transfer tool. It can provide the same functionality as BDC infact much more but when coming to techinical perspective most the parameters are encapulated. To listout some of the differences :
LSMW is basicaly designed for a fuctional consultant who do not do much coding but need to explore the fuctionality while BDC is designed for a technical consultant.
LSMW offers different techinque for migrating data: Direct input ,BAPI,Idoc,Batch input recording. While bdc basically uses recording.
LSMW mapping is done by SAP while in BDC we have to do it explicitly .
LSMW is basically for standard SAP application while bdc basically for customized application.
Coding can be done flexibly in BDC when compared to LSMW
1. Maintain Attributes:
Here you have to choose the second option and you can do the recording how this should work. Then assign the same to the Batch Input Recording name.
2. Maintain Source structure:
Create a structure name
3. Maintain Source field:
In this you have to create a structure same as that of the input file
eg: name
age
4. Maintain structure relations:
This will link the structure to the input file.
5. Maintain field mapping and conversion rules:
Here is the place where you can do coding, depending upon the code you have written or assignment you have done the values will get picked up from the file and get processed.
6. Maintain field mapping and conversion rules:
If you have any fixed values you can define here.
7. Specify files:
Specify the input file path and type.
8. Assign files:
This will assign ur file to the Input file
9. Read Data:
This will read ur data from teh file.
10. Dispaly Read Data:
You can see the uploaded data
11. Convert Data
This will convert the data to the corresponding format for processing
12. Display Converted data:
13. Create batch input session
Here this will create a batch input session for processing
14. Run Batch Input session:
By clicking on the session and process the same you can do teh needfu.
http://www.sapbrain.com/TOOLS/LSMW/SAP_LSMW_steps_introduction.html
http://esnips.com/doc/8e732760-5548-44cc-a0bb-5982c9424f17/lsmw_sp.ppt
http://esnips.com/doc/f55fef40-fb82-4e89-9000-88316699c323/Data-Transfer-Using-LSMW.zip
http://esnips.com/doc/1cd73c19-4263-42a4-9d6f-ac5487b0ebcb/LSMW-with-Idocs.ppt
http://esnips.com/doc/ef04c89f-f3a2-473c-beee-6db5bb3dbb0e/LSMW-with-BAPI.ppt
http://esnips.com/doc/7582d072-6663-4388-803b-4b2b94d7f85e/LSMW.pdf
for Long texts Upload
Please take a look at this..
http://help.sap.com/saphelp_erp2005/helpdata/en/e1/c6d30210e6cf4eac7b054a73f8fb1d/frameset.htm
Reward points for useful Answers
Regards
Anji -
No batch input data for screen for VF01
Hi All,
Iam trying to to create billing document using BDC for VF01 with sales order. For single line item it is working fine and that to in Mode 'A'. But while creating invoices using multiple sales orders , Iam getting the following error.
No batch input data for screen 'SAPMV60A' '0102' . Error - 0344.
Kindly help me as I was strucked here.
My code .
PERFORM bdc_dynpro USING 'SAPMV60A' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KOMFK-VBELN(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'KOMFK-VBELN(01)'
gwa_bdc-vbeln.
PERFORM bdc_dynpro USING 'SAPMV60A' '0104'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBRK-FKART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_dynpro USING 'SAPMV60A' '0104'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBRK-FKART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
REFRESH messtab[].
CALL TRANSACTION 'VF01' USING bdcdata
OPTIONS FROM wa_options
MESSAGES INTO messtab.
Please <removed by moderator> help.
Thanks ,
Srikanth.A
Edited by: Thomas Zloch on Sep 15, 2011 1:47 PMHi Jurgen
LOOP AT git_bdc INTO gwa_bdc.
refresh messtab[].
PERFORM bdc_dynpro USING 'SAPMV60A' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KOMFK-VBELN(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'KOMFK-VBELN(01)'
gwa_bdc-vbeln.
PERFORM bdc_dynpro USING 'SAPMV60A' '0104'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBRK-FKART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_dynpro USING 'SAPMV60A' '0104'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBRK-FKART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_dynpro USING 'SAPMV60A' '0104'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBRK-FKART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
REFRESH messtab[].
CALL TRANSACTION 'VF01' USING bdcdata
OPTIONS FROM wa_options
MESSAGES INTO messtab.
Error message population....
REFRESH bdcdata[].
ENDLOOP.
Thanks,
Srikanth.A -
Hi ,
This is vijay...
can anyone help me plz
Hi,
Iam uploading data using call transaction.Tcode is ff67.In this TCode we have the begining balance(ssald) and ending balance(esald).The new record we are uploading will take the begining balance as the previous record ending balance, if we give the begining balance wrong then the record does not saved it will show error(the begining balance does not match with the prior ending balance).
while uploading the data using MODE A iam able to get the desired output but by using the MODE N iam not able to get the desired output i,e if there is any error in the begining balance also the record is being saved iam not getting the error message.
Iam attaching the code below..please help me
report Z_BRS_BDC no standard page heading line-size 255.
INTERNAL TABLES DECLARATIONS
DATA : BEGIN OF bdcdata OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA : END OF bdcdata.
DATA: LV_OUT TYPE STRING.
DATA : iopt LIKE ctu_params.
DATA : wa_rec_err TYPE i.
DATA : wa_rec_wri TYPE i.
DATA : wa_tot_rec TYPE i.
DATA : amt(16) type c.
DATA : BEGIN OF gu_upload OCCURS 0,
hbkid LIKE febmka-hbkid,
hktid LIKE febmka-hktid,
aznum LIKE febmka-aznum,
azdat LIKE febmka-azdat,
ssald LIKE amt,
esald LIKE amt,
budtm LIKE febmka-budtm,
mnam1 LIKE febmka-mnam1,
jname LIKE febmka-jname,
vgman LIKE febmka-vgman,
valut LIKE febep-valut,
kwbtr(13) TYPE c,
chect_kf LIKE febmkk-chect_kf,
END OF gu_upload.
DATA:GU_DOWNLOAD LIKE GU_UPLOAD OCCURS 0 WITH HEADER LINE.
kishi*********************************
DATA: BEGIN OF itab OCCURS 0,
vgman LIKE febmka-vgman,
valut LIKE febep-valut,
kwbtr(13) TYPE c,
chect_kf LIKE febmkk-chect_kf,
END OF itab.
kishi)(_()00-8-09
DATA: BEGIN OF messtab OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF messtab.
DATA: BEGIN OF messtab1 OCCURS 0.
INCLUDE STRUCTURE messtab.
DATA: END OF messtab1.
DATA : BEGIN OF int_count OCCURS 0.
INCLUDE STRUCTURE alsmex_tabline.
DATA : END OF int_count.
DATA: c_tcode LIKE sy-tcode VALUE 'FF67',
c_upd LIKE ctu_params-updmode VALUE 'S',
c_def_size LIKE ctu_params-defsize VALUE 'X'.
*VALUES FOR STARTING COLUMNS AND ROWS IN THE EXCEL SHEET
DATA : c_begcol TYPE i VALUE '1',
c_begrow TYPE i VALUE '1',
*DATA IS ENDED AT THE 13TH COLUMN IN THE EXCELSHEET
c_endcol TYPE i VALUE '13',
*LAST ROW IN THE EXCEL SHEET
c_endrow TYPE i VALUE '65536',
c_path(3) TYPE c VALUE 'C:\'.
*Field Symbols
FIELD-SYMBOLS: <fs>.
SELECTION SCREEN PARAMETERS
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : p_file LIKE rlgrap-filename DEFAULT
'C:\ ',
*This is the path for downloading file
P_FNAME2 LIKE RLGRAP-FILENAME ,
c_mode LIKE ctu_params-dismode DEFAULT 'N'.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
*F4 HELP FOR FILE SELECTION
PERFORM validate_input_file.
START-OF-SELECTION.
CLEAR gu_upload.
REFRESH gu_upload.
UPLOAD THE DATA FROM FLAT FILE TO INTERNAL TABLE
PERFORM file_upload.
iopt-dismode = c_mode.
iopt-updmode = c_upd.
iopt-defsize = c_def_size.
POPULATE THE DATA THROUGHSCREENS
PERFORM bdc_upload.
END-OF-SELECTION.
*DISPLY THE ERROR RECORDS
PERFORM DISPLAY-DATA.
FORM file_upload *
FORM file_upload.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = c_begcol
i_begin_row = c_begrow
i_end_col = c_endcol
i_end_row = c_endrow
TABLES
intern = int_count
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
LOOP AT int_count.
ASSIGN COMPONENT int_count-col OF STRUCTURE gu_upload TO <fs>.
IF sy-subrc NE 0.
EXIT.
ENDIF.
<fs> = int_count-value.
AT END OF row.
APPEND gu_upload.
CLEAR gu_upload.
ENDAT.
ENDLOOP.
*kishhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
LOOP AT gu_upload.
itab-vgman = gu_upload-vgman.
itab-valut = gu_upload-valut.
itab-kwbtr = gu_upload-kwbtr.
itab-chect_kf = gu_upload-chect_kf.
APPEND itab.
ENDLOOP.
*kishiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
ENDFORM. "file_upload
*& Form BDC_UPLOAD
FORM bdc_upload.
LOOP AT gu_upload.
CLEAR bdcdata.
REFRESH bdcdata.
*& POPULATE THE DATA FOR FIRST SCREEN
perform bdc_dynpro using 'SAPMF40K' '0101'.
perform bdc_field using 'BDC_CURSOR'
'FEBMKA-JNAME'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'FEBMKA-BUKRS'
'IN14'.
perform bdc_field using 'FEBMKA-HBKID'
gu_upload-hbkid.
perform bdc_field using 'FEBMKA-HKTID'
gu_upload-hktid.
perform bdc_field using 'FEBMKA-AZNUM'
gu_upload-aznum.
perform bdc_field using 'FEBMKA-AZDAT'
gu_upload-azdat.
perform bdc_field using 'FEBMKA-SSALD'
gu_upload-ssald.
perform bdc_field using 'FEBMKA-ESALD'
gu_upload-esald.
perform bdc_field using 'FEBMKA-BUDTM'
gu_upload-budtm.
perform bdc_field using 'FEBMKA-MNAM1'
gu_upload-mnam1.
perform bdc_field using 'FEBMKA-JNAME'
gu_upload-jname.
*& POPULATE THE DATA FOR SECOND SCREEN
DATA : fnam(20) TYPE c,
idx TYPE c.
MOVE 1 TO idx.
LOOP AT itab.
PERFORM bdc_dynpro USING 'SAPMF40K' '8000'.
PERFORM bdc_field USING 'BDC_CURSOR'
'FEBMKK-CHECT_KF(03)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
CONCATENATE 'FEBMKA-VGMAN(' idx ')' INTO fnam.
PERFORM bdc_field USING fnam
itab-vgman.
CONCATENATE 'FEBEP-VALUT(' idx ')' INTO fnam.
PERFORM bdc_field USING fnam itab-valut.
CONCATENATE 'FEBMKA-KWBTR(' idx ')' INTO fnam.
PERFORM bdc_field USING fnam itab-kwbtr.
CONCATENATE 'FEBMKK-CHECT_KF(' idx ')' INTO fnam.
PERFORM bdc_field USING fnam itab-chect_kf.
idx = idx + 1.
ENDLOOP.
*perform bdc_dynpro using 'SAPMF40K' '8000'.
*perform bdc_field using 'BDC_CURSOR'
'FEBMKK-CHECT_KF(01)'.
*perform bdc_field using 'BDC_OKCODE'
'/00'.
*perform bdc_field using 'FEBMKA-VGMAN(01)'
'z001'.
*perform bdc_field using 'FEBEP-VALUT(01)'
'2007/04/26'.
*perform bdc_field using 'FEBMKA-KWBTR(01)'
' 5000-'.
*perform bdc_field using 'FEBMKK-CHECT_KF(01)'
'1122'.
perform bdc_dynpro using 'SAPMF40K' '8000'.
perform bdc_field using 'BDC_CURSOR'
'FEBMKK-CHECT_KF(01)'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
*& POPULATE THE DATA FOR FOURTH SCREEN
perform bdc_dynpro using 'SAPMF40K' '0101'.
perform bdc_field using 'BDC_CURSOR'
'FEBMKA-BUKRS'.
perform bdc_field using 'BDC_OKCODE'
'=BUCH'.
perform bdc_field using 'FEBMKA-BUKRS'
'IN14'.
perform bdc_field using 'FEBMKA-HBKID'
gu_upload-hbkid.
perform bdc_field using 'FEBMKA-HKTID'
gu_upload-hktid.
perform bdc_field using 'FEBMKA-AZNUM'
gu_upload-aznum.
perform bdc_field using 'FEBMKA-AZDAT'
gu_upload-azdat.
perform bdc_field using 'FEBMKA-SSALD'
gu_upload-ssald.
perform bdc_field using 'FEBMKA-ESALD'
gu_upload-esald.
perform bdc_field using 'FEBMKA-BUDTM'
gu_upload-budtm.
perform bdc_field using 'FEBMKA-MNAM1'
gu_upload-mnam1.
perform bdc_field using 'FEBMKA-JNAME'
gu_upload-jname.
*perform bdc_dynpro using 'SAPMF40K' '0101'.
*perform bdc_field using 'BDC_OKCODE'
'/EENDE'.
*perform bdc_field using 'BDC_CURSOR'
'FEBMKA-BUKRS'.
perform bdc_dynpro using 'SAPMF40K' '0101'.
perform bdc_field using 'BDC_OKCODE'
'/EABBR'.
perform bdc_field using 'BDC_CURSOR'
'FEBMKA-BUKRS'.
*& USING THE CALL TRANSACTION
PERFORM call_transaction.
CLEAR BDCDATA. "<--- Add here
REFRESH BDCDATA. "<--- Add here
ENDLOOP.
ENDFORM. " BDC_UPLOAD
*& Form VALIDATE_INPUT_FILE
FORM validate_input_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_path = ' c:\ '
mask = ',.txt,.*.'
mode = 'O'
title = 'Upload '
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
IF sy-subrc <> 0 AND sy-subrc <> 3.
MESSAGE e100(zm) WITH text-007.
ENDIF.
ENDFORM. " VALIDATE_INPUT_FILE
Start new screen *
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "bdc_dynpro
Insert field *
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "bdc_field
*& Form CALL_TRANSACTION
FORM call_transaction.
DATA: l_index LIKE sy-tabix.
CALL TRANSACTION c_tcode USING bdcdata
MODE c_mode
MESSAGES INTO messtab.
*POPULATE THE ERROR RECORDS INTO INTERNAL TABLE
IF SY-SUBRC NE 0.
GU_DOWNLOAD-HBKID = GU_UPLOAD-HBKID.
GU_DOWNLOAD-HBKID = GU_UPLOAD-HBKID.
GU_DOWNLOAD-HKTID = GU_UPLOAD-HKTID.
GU_DOWNLOAD-AZNUM = GU_UPLOAD-AZNUM.
GU_DOWNLOAD-AZDAT = GU_UPLOAD-AZDAT.
GU_DOWNLOAD-ESALD = GU_UPLOAD-ESALD.
GU_DOWNLOAD-SSALD = GU_UPLOAD-SSALD.
GU_DOWNLOAD-BUDTM = GU_UPLOAD-BUDTM.
GU_DOWNLOAD-MNAM1 = GU_UPLOAD-MNAM1.
GU_DOWNLOAD-JNAME = GU_UPLOAD-JNAME.
GU_DOWNLOAD-VGMAN = GU_UPLOAD-VGMAN.
GU_DOWNLOAD-VALUT = GU_UPLOAD-VALUT.
GU_DOWNLOAD-KWBTR = GU_UPLOAD-KWBTR.
GU_DOWNLOAD-CHECT_KF = GU_UPLOAD-CHECT_KF.
APPEND GU_DOWNLOAD.
*DISPLAY THE PROGRESS OF PROCESS
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 0
TEXT = 'Downloading is in process'.
*DOWNLOADING THE ERROR RECORD
LV_OUT = P_FNAME2.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = LV_OUT
WRITE_FIELD_SEPARATOR = 'X'
TABLES
DATA_TAB = GU_DOWNLOAD.
ENDIF.
IF NOT messtab[] IS INITIAL.
PERFORM format_message.
ENDIF.
ENDFORM. " CALL_TRANSACTION
*& Form DISPLAY-DATA
FORM display-data.
SKIP.
WRITE: 'SY-SUBRC' , sy-subrc.
ENDFORM. " DISPLAY-DATA
FORM FORMAT_MESSAGE *
FORM format_message.
DATA: l_msg(100),
l_index LIKE sy-tabix.
LOOP AT messtab.
READ TABLE gu_upload INDEX l_index.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = messtab-msgid
lang = sy-langu
no = messtab-msgnr
v1 = messtab-msgv1
v2 = messtab-msgv2
v3 = messtab-msgv3
v4 = messtab-msgv4
IMPORTING
msg = l_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.
ENDIF.
WRITE:/ l_msg.
ENDLOOP.
WRITE:/ l_msg.
ENDFORM.
Message was edited by:
vijayd duvvadaHi,
First , keep the mode "E" and check the debugger , you can exactly see where the error is and let me know, what error and where it is stoping.
By your coding, i suppose to think that, its proble in the amount (currency). When ever you are try to pass the value, and value is not there in upload file or data is mismatch, the call transaction will fail in mode 'A' and succesful in mode 'N'.
In that situation use this before the currecny field.
IF NOT FEBMKA-SSALD IS INTIAL.
perform bdc_field using 'FEBMKA-ESALD'
gu_upload-esald.
ENDIF.
tHANKS
Manju
Maybe you are looking for
-
How do you export & print photos that have been cropped/rotated/angled?
I have found that if I straighten a photo in Lightroom and then export it, it will not print correctly. The photo will print with the edges of the photo not straight with the borders of the paper. The angle the photo is printed askew is the same an
-
i locked my new ipod touch and cant it back open from the computer help.?:
-
Problem when trying to update my iPod touch 3g
So I was trying to update my iTouch 3g to iso 5 by using iTunes 10.5 and it haven't been working. then later I re-installed my iTunes and it is already the latest version but I still can't update my iTouch 3g to anything newer than 4.2.1. It didn't h
-
Hi! I don't know what to do and really need some help! I've been updating my website on iweb for the last month now but when I logged on today I could only find the work that I already have published, and not the data that I was still working on! I h
-
Converting Coverage Start Date during OAB Conversion for current elections
We have a requirement to convert the coverage start date of current elections in the Legacy System to OAB. We are using 'BEN_ELECTION_INFORMATION.ELECTION_INFORMATION_W' api to convert current enrollments and is passing the actual coverage start date